--HG--
branch : trunk
This commit is contained in:
QAston
2009-06-27 18:00:15 +02:00
6 changed files with 16 additions and 21 deletions
+1 -1
View File
@@ -49,7 +49,7 @@ class TRINITY_DLL_SPEC Database
virtual ~Database(); virtual ~Database();
virtual bool Initialize(const char *infoString); virtual bool Initialize(const char *infoString);
virtual void InitDelayThread(const char *infoString) = 0; virtual void InitDelayThread() = 0;
virtual void HaltDelayThread() = 0; virtual void HaltDelayThread() = 0;
virtual QueryResult* Query(const char *sql) = 0; virtual QueryResult* Query(const char *sql) = 0;
+4 -5
View File
@@ -70,7 +70,7 @@ DatabaseMysql::~DatabaseMysql()
mysql_library_end(); mysql_library_end();
} }
bool DatabaseMysql::Initialize(const char *infoString, bool initDelayThread) bool DatabaseMysql::Initialize(const char *infoString)
{ {
if(!Database::Initialize(infoString)) if(!Database::Initialize(infoString))
@@ -85,8 +85,7 @@ bool DatabaseMysql::Initialize(const char *infoString, bool initDelayThread)
return false; return false;
} }
if(initDelayThread) InitDelayThread();
InitDelayThread(infoString);
Tokens tokens = StrSplit(infoString, ";"); Tokens tokens = StrSplit(infoString, ";");
@@ -436,12 +435,12 @@ unsigned long DatabaseMysql::escape_string(char *to, const char *from, unsigned
return(mysql_real_escape_string(mMysql, to, from, length)); return(mysql_real_escape_string(mMysql, to, from, length));
} }
void DatabaseMysql::InitDelayThread(const char* infoString) void DatabaseMysql::InitDelayThread()
{ {
assert(!m_delayThread); assert(!m_delayThread);
//New delay thread for delay execute //New delay thread for delay execute
m_threadBody = new MySQLDelayThread(this,infoString); m_threadBody = new MySQLDelayThread(this);
m_delayThread = new ACE_Based::Thread(*m_threadBody); m_delayThread = new ACE_Based::Thread(*m_threadBody);
} }
+2 -2
View File
@@ -46,8 +46,8 @@ class TRINITY_DLL_SPEC DatabaseMysql : public Database
//! Initializes Mysql and connects to a server. //! Initializes Mysql and connects to a server.
/*! infoString should be formated like hostname;username;password;database. */ /*! infoString should be formated like hostname;username;password;database. */
bool Initialize(const char *infoString, bool initDelayThread = true); bool Initialize(const char *infoString);
void InitDelayThread(const char* infoString); void InitDelayThread();
void HaltDelayThread(); void HaltDelayThread();
QueryResult* Query(const char *sql); QueryResult* Query(const char *sql);
QueryNamedResult* QueryNamed(const char *sql); QueryNamedResult* QueryNamed(const char *sql);
+1 -1
View File
@@ -26,7 +26,7 @@
class MySQLDelayThread : public SqlDelayThread class MySQLDelayThread : public SqlDelayThread
{ {
public: public:
MySQLDelayThread(Database* db,const char* infoString) : SqlDelayThread(db, infoString) {} MySQLDelayThread(Database* db) : SqlDelayThread(db) {}
void Stop() { SqlDelayThread::Stop(); } void Stop() { SqlDelayThread::Stop(); }
}; };
#endif //__MYSQLDELAYTHREAD_H #endif //__MYSQLDELAYTHREAD_H
+6 -10
View File
@@ -22,10 +22,8 @@
#include "Database/SqlOperations.h" #include "Database/SqlOperations.h"
#include "DatabaseEnv.h" #include "DatabaseEnv.h"
SqlDelayThread::SqlDelayThread(Database* db, const char* infoString) :m_running(true) SqlDelayThread::SqlDelayThread(Database* db) : m_dbEngine(db), m_running(true)
{ {
m_dbEngine = new DatabaseType;
((DatabaseType*)m_dbEngine)->Initialize(infoString, false);
} }
void SqlDelayThread::run() void SqlDelayThread::run()
@@ -37,17 +35,16 @@ void SqlDelayThread::run()
while (m_running) while (m_running)
{ {
try // if the running state gets turned off while sleeping
// empty the queue before exiting
ACE_Based::Thread::Sleep(10);
while (!m_sqlQueue.empty())
{ {
s = m_sqlQueue.next(); s = m_sqlQueue.next();
}
catch(...)
{continue;}
if(!s)
continue;
s->Execute(m_dbEngine); s->Execute(m_dbEngine);
delete s; delete s;
} }
}
#ifndef DO_POSTGRESQL #ifndef DO_POSTGRESQL
mysql_thread_end(); mysql_thread_end();
@@ -57,6 +54,5 @@ void SqlDelayThread::run()
void SqlDelayThread::Stop() void SqlDelayThread::Stop()
{ {
m_running = false; m_running = false;
m_sqlQueue.cancel();
} }
+1 -1
View File
@@ -40,7 +40,7 @@ class SqlDelayThread : public ACE_Based::Runnable
SqlDelayThread(); SqlDelayThread();
public: public:
SqlDelayThread(Database* db,const char* infoString); SqlDelayThread(Database* db);
///< Put sql statement to delay queue ///< Put sql statement to delay queue
bool Delay(SqlOperation* sql) { m_sqlQueue.add(sql); return true; } bool Delay(SqlOperation* sql) { m_sqlQueue.add(sql); return true; }