Core/DBLayer:

- Example implementation of prepared statement in ObjectMgr::SaveCreatureRespawntime
- #include "MYSQLThreading.h" -> #include "MySQLThreading.h" (*really* fixes Linux build)

--HG--
branch : trunk
This commit is contained in:
Machiavelli
2010-09-03 00:44:27 +02:00
parent 1e8a294659
commit 2c1c391597
5 changed files with 24 additions and 5 deletions
+12 -2
View File
@@ -7221,9 +7221,19 @@ void ObjectMgr::SaveCreatureRespawnTime(uint32 loguid, uint32 instance, time_t t
mCreatureRespawnTimes[MAKE_PAIR64(loguid,instance)] = t; mCreatureRespawnTimes[MAKE_PAIR64(loguid,instance)] = t;
} }
WorldDatabase.PExecute("DELETE FROM creature_respawn WHERE guid = '%u' AND instance = '%u'", loguid, instance); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CRESPAWNTIME);
stmt->setUInt32(0, loguid);
stmt->setUInt32(1, instance);
WorldDatabase.Execute(stmt);
if (t) if (t)
WorldDatabase.PExecute("INSERT INTO creature_respawn VALUES ('%u', '" UI64FMTD "', '%u')", loguid, uint64(t), instance); {
stmt = WorldDatabase.GetPreparedStatement(WORLD_ADD_CRESPAWNTIME);
stmt->setUInt32(0, loguid);
stmt->setUInt64(1, uint64(t));
stmt->setUInt32(2, instance);
WorldDatabase.Execute(stmt);
}
} }
void ObjectMgr::DeleteCreatureData(uint32 guid) void ObjectMgr::DeleteCreatureData(uint32 guid)
@@ -20,11 +20,18 @@
bool WorldDatabaseConnection::Open(const std::string& infoString) bool WorldDatabaseConnection::Open(const std::string& infoString)
{ {
if (!MySQLConnection::Open(infoString))
return false;
m_stmts.resize(MAX_WORLDDATABASE_STATEMENTS);
/* /*
################################## ##################################
LOAD YOUR PREPARED STATEMENTS HERE LOAD YOUR PREPARED STATEMENTS HERE
################################## ##################################
*/ */
PrepareStatement(WORLD_DEL_CRESPAWNTIME, "DELETE FROM creature_respawn WHERE guid = ? AND instance = ?");
PrepareStatement(WORLD_ADD_CRESPAWNTIME, "INSERT INTO creature_respawn VALUES (?, ?, ?)");
return MySQLConnection::Open(infoString); return true;
} }
@@ -37,6 +37,8 @@ typedef DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabaseWorkerPool;
enum WorldDatabaseStatements enum WorldDatabaseStatements
{ {
WORLD_DEL_CRESPAWNTIME,
WORLD_ADD_CRESPAWNTIME,
MAX_WORLDDATABASE_STATEMENTS, MAX_WORLDDATABASE_STATEMENTS,
}; };
@@ -25,7 +25,7 @@
#include <mysql.h> #include <mysql.h>
#include "MySQLConnection.h" #include "MySQLConnection.h"
#include "MYSQLThreading.h" #include "MySQLThreading.h"
#include "QueryResult.h" #include "QueryResult.h"
#include "SQLOperation.h" #include "SQLOperation.h"
#include "PreparedStatement.h" #include "PreparedStatement.h"
+1 -1
View File
@@ -50,13 +50,13 @@ class MySQLConnection
MYSQL* GetHandle() { return m_Mysql; } MYSQL* GetHandle() { return m_Mysql; }
MySQLPreparedStatement* GetPreparedStatement(uint32 index); MySQLPreparedStatement* GetPreparedStatement(uint32 index);
void PrepareStatement(uint32 index, const char* sql); void PrepareStatement(uint32 index, const char* sql);
std::vector<MySQLPreparedStatement*> m_stmts; //! PreparedStatements storage
private: private:
ACE_Activation_Queue* m_queue; //! Queue shared with other asynchroneous connections. ACE_Activation_Queue* m_queue; //! Queue shared with other asynchroneous connections.
DatabaseWorker* m_worker; //! Core worker task. DatabaseWorker* m_worker; //! Core worker task.
MYSQL * m_Mysql; //! MySQL Handle. MYSQL * m_Mysql; //! MySQL Handle.
ACE_Thread_Mutex m_Mutex; ACE_Thread_Mutex m_Mutex;
std::vector<MySQLPreparedStatement*> m_stmts; //! PreparedStatements storage
}; };
#endif #endif