diff options
-rw-r--r-- | mg_db.c | 30 | ||||
-rw-r--r-- | mg_db.h | 7 | ||||
-rw-r--r-- | mg_db_gd_mysql.c | 27 | ||||
-rw-r--r-- | mg_db_gd_mysql.h | 2 | ||||
-rw-r--r-- | mg_db_gd_pg.c | 34 | ||||
-rw-r--r-- | mg_db_gd_pg.h | 2 | ||||
-rw-r--r-- | mg_db_gd_sqlite.c | 35 | ||||
-rw-r--r-- | mg_db_gd_sqlite.h | 2 |
8 files changed, 54 insertions, 85 deletions
@@ -299,6 +299,36 @@ optimize (string & spar) } bool +mgDb::Connect () +{ + if (m_database_found) + return true; + if (!ServerConnect()) + return false; + if (time(0)<m_create_time+10) + return false; + m_create_time=time(0); + m_database_found=ConnectDatabase(); + if (!m_database_found) + mgWarning("database not found"); + if (the_setup.IsMugglei()) + { + if (the_setup.CreateMode) + m_database_found = Create(); + } + else + { + if (!m_database_found) + { + extern bool create_question(); + if (create_question()) + m_database_found = Create(); + } + } + return m_database_found; +} + +bool mgDb::SyncStart() { if (!Connect()) @@ -171,9 +171,9 @@ class mgDb { */ unsigned long exec_count(const string sql); virtual bool ServerConnect() { return true; } - virtual bool Connect() = 0; + bool Connect(); + virtual bool ConnectDatabase() = 0; bool HasFolderFields() const { return m_hasfolderfields;} - virtual bool Create() = 0; virtual int AddToCollection( const string Name,const vector<mgItem*>&items,mgParts* what=0); virtual int RemoveFromCollection( const string Name,const vector<mgItem*>&items,mgParts* what=0); virtual bool DeleteCollection( const string Name); @@ -200,12 +200,12 @@ class mgDb { int m_cols; virtual void SyncEnd() {} bool SyncFile(const char *filename); - bool m_database_found; bool m_hasfolderfields; bool m_separate_thread; time_t m_connect_time; time_t m_create_time; string get_col0(const string sql); + virtual bool Create() = 0; void FillTables(); virtual void StartTransaction() {}; virtual void Commit() {}; @@ -225,6 +225,7 @@ class mgDb { const mgSQLString& c_artist); map<string,string> m_Genres; map<string,string> m_GenreIds; + bool m_database_found; }; diff --git a/mg_db_gd_mysql.c b/mg_db_gd_mysql.c index e6a4ff8..8acda12 100644 --- a/mg_db_gd_mysql.c +++ b/mg_db_gd_mysql.c @@ -421,7 +421,7 @@ mgDbGd::Create() if (!ServerConnect()) return false; // create database and tables - mgDebug(1,"Dropping and recreating database %s",the_setup.DbName); + mgWarning("Dropping and recreating database %s",the_setup.DbName); char buffer[500]; sprintf(buffer,"DROP DATABASE IF EXISTS %s",the_setup.DbName); if (strlen(buffer)>400) @@ -454,8 +454,8 @@ mgDbGd::Create() return false; } } - m_database_found=true; FillTables(); + mgWarning("new database successfully created"); return true; } @@ -517,28 +517,9 @@ UsingEmbeddedMySQL() } bool -mgDbGd::Connect () +mgDbGd::ConnectDatabase () { - if (m_database_found) - return true; - if (!ServerConnect()) - return false; - if (time(0)<m_create_time+10) - return false; - m_create_time=time(0); - m_database_found = mysql_select_db(m_db,the_setup.DbName)==0; - if (m_database_found) - return true; - extern bool create_question(); - if (!create_question()) - { - mgWarning("Database not created"); - return false; - } - m_database_found = Create(); - if (!m_database_found) - mgWarning("Cannot create database:%s",mysql_error(m_db)); - return m_database_found; + return mysql_select_db(m_db,the_setup.DbName)==0; } bool diff --git a/mg_db_gd_mysql.h b/mg_db_gd_mysql.h index d5516c2..803320d 100644 --- a/mg_db_gd_mysql.h +++ b/mg_db_gd_mysql.h @@ -25,7 +25,7 @@ class mgDbGd : public mgDb { mgDbGd (bool SeparateThread=false); ~mgDbGd(); bool ServerConnect(); - bool Connect(); + bool ConnectDatabase(); bool Create(); int AddToCollection( const string Name,const vector<mgItem*>&items,mgParts* what); int RemoveFromCollection( const string Name,const vector<mgItem*>&items,mgParts* what); diff --git a/mg_db_gd_pg.c b/mg_db_gd_pg.c index a8c88d9..d17282d 100644 --- a/mg_db_gd_pg.c +++ b/mg_db_gd_pg.c @@ -22,6 +22,7 @@ #include "mg_setup.h" #include "mg_item_gd.h" #include "mg_db_gd_pg.h" +#include <libpq-fe.h> #include <pg_config.h> @@ -253,14 +254,6 @@ mgDbGd::Commit() bool mgDbGd::Create() { - if (!Connect()) - return false; - return myCreate(); -} - -bool -mgDbGd::myCreate() -{ // create database and tables int len = sizeof( db_cmds ) / sizeof( char* ); for( int i=0; i < len; i ++ ) @@ -269,8 +262,8 @@ mgDbGd::myCreate() if (!q.ErrorMessage().empty()) return false; } - m_database_found=true; FillTables(); + mgWarning("new database successfully created"); return true; } @@ -282,10 +275,8 @@ mgDbGd::ServerConnect () bool -mgDbGd::Connect () +mgDbGd::ConnectDatabase () { - if (m_database_found) - return true; char conninfo[500]; char port[20]; char host[200]; @@ -312,23 +303,8 @@ mgDbGd::Connect () mgWarning("Failed to connect to postgres server using %s:%s",conninfo,PQerrorMessage(m_db)); return false; } - m_database_found = true; // otherwise we get into a recursion - m_database_found = exec_count("SELECT COUNT(*) FROM information_schema.tables WHERE table_name='album'"); - if (m_database_found) - return true; - if (time(0)<m_create_time+10) - return false; - m_create_time=time(0); - extern bool create_question(); - if (!create_question()) - { - mgWarning("Database not created"); - return false; - } - m_database_found = myCreate(); - if (!m_database_found) - mgWarning("Cannot create database:%s",PQerrorMessage(m_db)); - return m_database_found; + return atol (get_col0 ("SELECT COUNT(*) FROM information_schema.tables WHERE table_name='album'").c_str ())==1; + // do not use exec_count because it calls Connect() } bool diff --git a/mg_db_gd_pg.h b/mg_db_gd_pg.h index 73996db..7cf3221 100644 --- a/mg_db_gd_pg.h +++ b/mg_db_gd_pg.h @@ -48,7 +48,7 @@ class mgDbGd : public mgDb { mgDbGd (bool SeparateThread=false); ~mgDbGd(); bool ServerConnect(); - bool Connect(); + bool ConnectDatabase(); bool Create(); bool NeedGenre2(); diff --git a/mg_db_gd_sqlite.c b/mg_db_gd_sqlite.c index d83c6d8..c62c737 100644 --- a/mg_db_gd_sqlite.c +++ b/mg_db_gd_sqlite.c @@ -243,8 +243,8 @@ mgDbGd::Create() return false; } } - m_database_found=true; FillTables(); + mgWarning("new database successfully created"); return true; } @@ -290,28 +290,20 @@ mgSubstring(sqlite3_context *context, int argc, sqlite3_value **argv) } bool -mgDbGd::Connect () +mgDbGd::ConnectDatabase () { - if (m_database_found) - return true; - if (time(0)<m_create_time+10) - return false; - m_create_time=time(0); - struct stat stbuf; // TODO das hier in die Parentklasse? + struct stat stbuf; if (stat(the_setup.DbDatadir,&stbuf)) mkdir(the_setup.DbDatadir,0755); char *s=sqlite3_mprintf("%s/%s.sqlite",the_setup.DbDatadir,the_setup.DbName); mgDebug(1,"%X opening data base %s",m_db,s); int rc = sqlite3_open(s,&m_db); - m_database_found = rc==SQLITE_OK; - if (!m_database_found) - { + if (rc!=SQLITE_OK) mgWarning("Cannot open/create SQLite database %s:%d/%s", s,rc,sqlite3_errmsg(m_db)); - sqlite3_free(s); + sqlite3_free(s); + if (rc!=SQLITE_OK) return false; - } - sqlite3_free(s); rc = sqlite3_create_function(m_db,"mgDirectory",1,SQLITE_UTF8, 0,&mgDirectory,0,0); if (rc!=SQLITE_OK) @@ -334,19 +326,8 @@ mgDbGd::Connect () return false; } if (!FieldExists("tracks","id")) - m_database_found=false; - if (m_database_found) - return true; - extern bool create_question(); - if (!create_question()) - { - mgWarning("Database not created"); - return false; - } - m_database_found = Create(); - if (!m_database_found) - mgWarning("Cannot create database:%s",sqlite3_errmsg); - return m_database_found; + return false; + return true; } bool diff --git a/mg_db_gd_sqlite.h b/mg_db_gd_sqlite.h index 81d8516..a21ac01 100644 --- a/mg_db_gd_sqlite.h +++ b/mg_db_gd_sqlite.h @@ -46,7 +46,7 @@ class mgDbGd : public mgDb { public: mgDbGd (bool SeparateThread=false); ~mgDbGd(); - bool Connect(); + bool ConnectDatabase(); bool Create(); bool NeedGenre2(); |