summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mg_db.c19
-rw-r--r--mg_db.h16
-rw-r--r--mg_db_gd_mysql.c4
-rw-r--r--mg_db_gd_mysql.h2
-rw-r--r--mg_db_gd_pg.h3
-rw-r--r--mg_db_gd_sqlite.h3
6 files changed, 40 insertions, 7 deletions
diff --git a/mg_db.c b/mg_db.c
index c881510..863718e 100644
--- a/mg_db.c
+++ b/mg_db.c
@@ -38,6 +38,25 @@ static map <mgKeyTypes, map<string,string> > map_ids;
mgDbServer* DbServer;
+mgDbServer::mgDbServer()
+{
+ printf("mgDbServer\n");
+#ifdef HAVE_SQLITE
+ m_server = new mgDbServerSQLite;
+#elif HAVE_PG
+ m_server = new mgDbServerPG;
+#else
+ m_server = new mgDbServerMySQL;
+#endif
+}
+
+mgDbServer::~mgDbServer()
+{
+ printf("~mgDbServer\n");
+ delete m_server;
+ m_server = 0;
+}
+
mgSQLString::~mgSQLString()
{
delete m_str;
diff --git a/mg_db.h b/mg_db.h
index 73ea605..934d372 100644
--- a/mg_db.h
+++ b/mg_db.h
@@ -300,14 +300,24 @@ class mgKeyMaps {
extern mgKeyMaps KeyMaps;
-class mgDbServer {
+class mgDbServerImp {
public:
- mgDbServer() {};
- mgDb* EscapeDb() const { return m_escape_db; }
+ mgDbServerImp() {m_escape_db = 0;}
+ virtual ~mgDbServerImp() {delete m_escape_db;}
+ mgDb* EscapeDb() const { return m_escape_db;}
protected:
mgDb* m_escape_db;
};
+class mgDbServer {
+ private:
+ mgDbServerImp *m_server;
+ public:
+ mgDbServer();
+ ~mgDbServer();
+ mgDb* EscapeDb() { return m_server->EscapeDb(); }
+};
+
extern mgDbServer* DbServer;
#endif
diff --git a/mg_db_gd_mysql.c b/mg_db_gd_mysql.c
index 4543d9d..2393441 100644
--- a/mg_db_gd_mysql.c
+++ b/mg_db_gd_mysql.c
@@ -226,8 +226,6 @@ mgDbServerMySQL::mgDbServerMySQL()
mgDbServerMySQL::~mgDbServerMySQL()
{
- delete m_escape_db;
- m_escape_db=0;
#ifndef HAVE_ONLY_SERVER
mgDebug(3,"calling mysql_server_end");
mysql_server_end();
@@ -468,7 +466,7 @@ mgDbGd::ServerConnect ()
return false;
m_connect_time=time(0);
if (!DbServer)
- DbServer = new mgDbServerMySQL;
+ DbServer = new mgDbServer;
m_db = mysql_init (0);
if (!m_db)
return false;
diff --git a/mg_db_gd_mysql.h b/mg_db_gd_mysql.h
index ba8f08c..d5516c2 100644
--- a/mg_db_gd_mysql.h
+++ b/mg_db_gd_mysql.h
@@ -54,7 +54,7 @@ class mgDbGd : public mgDb {
};
-class mgDbServerMySQL : public mgDbServer {
+class mgDbServerMySQL : public mgDbServerImp {
public:
mgDbServerMySQL();
~mgDbServerMySQL();
diff --git a/mg_db_gd_pg.h b/mg_db_gd_pg.h
index 0eb3f0e..73996db 100644
--- a/mg_db_gd_pg.h
+++ b/mg_db_gd_pg.h
@@ -20,6 +20,9 @@ using namespace std;
#include "mg_db.h"
+class mgDbServerPG : public mgDbServerImp {
+};
+
class mgSQLStringPG : public mgSQLStringImp {
public:
mgSQLStringPG(const char* s);
diff --git a/mg_db_gd_sqlite.h b/mg_db_gd_sqlite.h
index 17de670..81d8516 100644
--- a/mg_db_gd_sqlite.h
+++ b/mg_db_gd_sqlite.h
@@ -20,6 +20,9 @@ using namespace std;
#include "mg_db.h"
+class mgDbServerSQLite : public mgDbServerImp {
+};
+
class mgSQLStringSQLite : public mgSQLStringImp {
public:
mgSQLStringSQLite(const char* s);