From de77e94e5632a9cbad27850fb239a80f8ef207e3 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 8 Dec 2018 01:11:46 +0100 Subject: [PATCH] More dbm... --- deps/mysqlConnector/Statement.cpp | 2 +- src/dbm/DbManager.cpp | 39 ++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/deps/mysqlConnector/Statement.cpp b/deps/mysqlConnector/Statement.cpp index 543e5b1b..14d81020 100644 --- a/deps/mysqlConnector/Statement.cpp +++ b/deps/mysqlConnector/Statement.cpp @@ -60,7 +60,7 @@ std::shared_ptr< Mysql::ResultSet > Mysql::Statement::getResultSet() { if( errNo() != 0 ) throw std::runtime_error( "Error during getResultSet() : " + std::to_string( errNo() ) + ": " + - m_pConnection->getError() ); + m_pConnection->getError() ); return std::make_shared< ResultSet >( mysql_store_result( m_pConnection->getRawCon() ), shared_from_this() ); } diff --git a/src/dbm/DbManager.cpp b/src/dbm/DbManager.cpp index f1b264b1..42b20978 100644 --- a/src/dbm/DbManager.cpp +++ b/src/dbm/DbManager.cpp @@ -123,20 +123,41 @@ bool DbManager::modeInit() const std::string insertFile = "sql/schema/inserts.sql"; bool result = false; + bool dbCreated = false; if( selectSchema() ) { - // TODO: allow init if database is empty - // select count(*) - // from information_schema.tables - // where table_type = 'BASE TABLE' - // and table_schema = 'your_database_name_here' - m_lastError = "Database already existing, use mode first to remove it."; - return false; + std::string query = "SELECT COUNT(*) " + "FROM information_schema.tables " + "WHERE table_type = 'BASE TABLE' " + "AND table_schema = '" + m_database + "';"; + dbCreated = true; + try + { + auto stmt = m_pConnection->createStatement(); + auto resultSet = stmt->executeQuery( query ); + + if( !resultSet->next() ) + return false; + + auto count = resultSet->getUInt( 1 ); + if( count ) + { + m_lastError = "Database " + m_database + " still contains tables. it first!"; + return false; + } + + } + catch( std::runtime_error& e ) + { + m_lastError = e.what(); + return false; + } } - if( !execute( "CREATE DATABASE " + m_database ) ) - return false; + if( !dbCreated ) + if( !execute( "CREATE DATABASE " + m_database ) ) + return false; if( !selectSchema() ) {