1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-01 08:27:46 +00:00

dbm -> Initialize functional; Liquidate initial work done

This commit is contained in:
Mordred 2018-12-11 00:04:29 +01:00
parent de77e94e56
commit b37262e374
2 changed files with 100 additions and 4 deletions

View file

@ -100,6 +100,7 @@ bool DbManager::performAction()
result = modeInit(); result = modeInit();
break; break;
case Mode::LIQUIDATE: case Mode::LIQUIDATE:
result = modeLiquidate();
break; break;
case Mode::UPDATE: case Mode::UPDATE:
break; break;
@ -191,9 +192,102 @@ bool DbManager::modeInit()
content.erase( 0, pos + delimiter.length() ); content.erase( 0, pos + delimiter.length() );
} }
// we do not actually want this to stay atm... std::cout << "======================================================" << std::endl;
if( !execute( "DROP DATABASE " + m_database ) ) std::cout << "Inserting default values..." << std::endl;
std::ifstream t1( insertFile );
if( !t1.is_open() )
{
m_lastError = "File " + insertFile + " does not exist!";
return false; return false;
}
std::string content1( ( std::istreambuf_iterator< char >( t1 ) ),
( std::istreambuf_iterator< char >( ) ) );
std::string delimiter1 = ";";
size_t pos_ = 0;
std::string token1;
while( ( pos_ = content1.find( delimiter1 ) ) != std::string::npos )
{
token1 = content1.substr( 1, pos_ );
size_t pos_1 = token1.find_first_not_of( "\r\n" );
token1 = token1.substr( pos_1, token1.size() );
size_t pos_2 = token1.find_first_of( "(" );
std::cout << token1.substr( 0, pos_2 - 1 ) << std::endl;
if( !execute( token1 ) )
return false;
content1.erase( 0, pos_ + delimiter1.length() );
}
return true; return true;
} }
bool promptForChar( const char* prompt, char& readch )
{
std::string tmp;
std::cout << prompt << std::endl;
if( std::getline( std::cin, tmp ) )
{
if( tmp.length() == 1 )
{
readch = tmp[ 0 ];
}
else
{
readch = '\0';
}
return true;
}
return false;
}
bool DbManager::modeLiquidate()
{
if( !selectSchema() )
return false;
char type = '\0';
while( promptForChar( "This action will drop all tables in the database. Are you sure? [y/n]", type ) )
{
if( type == 'y' )
break;
if( type == 'n' )
return true;
}
std::string query = "SELECT TABLE_NAME "
"FROM information_schema.tables "
"WHERE table_type = 'BASE TABLE' "
"AND table_schema = '" + m_database + "';";
try
{
auto stmt = m_pConnection->createStatement();
auto resultSet = stmt->executeQuery( query );
while( resultSet->next() )
{
std::cout << resultSet->getString( 1 ) << "\n";
}
return false;
auto count = resultSet->getUInt( 1 );
if( count )
{
m_lastError = "Database " + m_database + " still contains tables. <Liquidate> it first!";
return false;
}
}
catch( std::runtime_error& e )
{
m_lastError = e.what();
return false;
}
return false;
}

View file

@ -35,6 +35,8 @@ class DbManager
bool modeInit(); bool modeInit();
bool modeLiquidate();
virtual ~DbManager(); virtual ~DbManager();
const std::string& getLastError(); const std::string& getLastError();