diff options
Diffstat (limited to 'src/server/shared/Database')
-rw-r--r-- | src/server/shared/Database/CMakeLists.txt | 31 | ||||
-rw-r--r-- | src/server/shared/Database/Database.cpp | 15 | ||||
-rw-r--r-- | src/server/shared/Database/Database.h | 9 | ||||
-rw-r--r-- | src/server/shared/Database/DatabaseEnv.h | 4 | ||||
-rw-r--r-- | src/server/shared/Database/PreparedStatements.cpp | 93 | ||||
-rw-r--r-- | src/server/shared/Database/PreparedStatements.h | 30 | ||||
-rw-r--r-- | src/server/shared/Database/QueryResult.h | 2 | ||||
-rw-r--r-- | src/server/shared/Database/SQLStorageImpl.h | 6 | ||||
-rw-r--r-- | src/server/shared/Database/SqlDelayThread.h | 2 | ||||
-rw-r--r-- | src/server/shared/Database/SqlOperations.h | 4 |
10 files changed, 143 insertions, 53 deletions
diff --git a/src/server/shared/Database/CMakeLists.txt b/src/server/shared/Database/CMakeLists.txt deleted file mode 100644 index e30c8ae3ca2..00000000000 --- a/src/server/shared/Database/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -SET(trinitydatabase_STAT_SRCS - DBCFileLoader.cpp - DBCFileLoader.h - DBCStore.h - Database.cpp - Database.h - DatabaseEnv.h - DatabaseImpl.h - Field.cpp - Field.h - QueryResult.cpp - QueryResult.h - SQLStorage.cpp - SQLStorage.h - SqlDelayThread.cpp - SqlDelayThread.h - SqlOperations.cpp - SqlOperations.h -) - -include_directories( - ${ACE_INCLUDE_DIR} - ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/src/server/shared/Database - ${CMAKE_SOURCE_DIR}/src/server/framework - ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Object - ${MYSQL_INCLUDE_DIR} -) - -add_library(trinitydatabase STATIC ${trinitydatabase_STAT_SRCS}) diff --git a/src/server/shared/Database/Database.cpp b/src/server/shared/Database/Database.cpp index 7646a451eb4..1fb2f831a9f 100644 --- a/src/server/shared/Database/Database.cpp +++ b/src/server/shared/Database/Database.cpp @@ -19,18 +19,17 @@ */ #include "DatabaseEnv.h" -#include "Config/ConfigEnv.h" +#include "Configuration/ConfigEnv.h" #include "Common.h" -#include "UpdateFields.h" +#include "Updates/UpdateFields.h" -#include "Util.h" -#include "Policies/SingletonImp.h" -#include "Platform/Define.h" -#include "Threading.h" +#include "Utilities/Util.h" +#include "Define.h" +#include "Threading/Threading.h" #include "Database/SqlDelayThread.h" #include "Database/SqlOperations.h" -#include "Timer.h" +#include "Utilities/Timer.h" #include <ctime> @@ -113,7 +112,7 @@ bool Database::Initialize(const char *infoString) database = *iter++; mysql_options(mysqlInit, MYSQL_SET_CHARSET_NAME, "utf8"); - #ifdef WIN32 + #ifdef _WIN32 if (host==".") // named pipe use option (Windows) { unsigned int opt = MYSQL_PROTOCOL_PIPE; diff --git a/src/server/shared/Database/Database.h b/src/server/shared/Database/Database.h index 4ad5d29c993..762abfd2ede 100644 --- a/src/server/shared/Database/Database.h +++ b/src/server/shared/Database/Database.h @@ -21,14 +21,13 @@ #ifndef DATABASE_H #define DATABASE_H -#include "Threading.h" -#include "Utilities/UnorderedMap.h" +#include "Threading/Threading.h" +#include "Dynamic/UnorderedMap.h" #include "Database/SqlDelayThread.h" -#include "Policies/Singleton.h" #include "ace/Thread_Mutex.h" #include "ace/Guard_T.h" -#ifdef WIN32 +#ifdef _WIN32 #define FD_SETSIZE 1024 #include <winsock2.h> #include <mysql/mysql.h> @@ -117,7 +116,7 @@ class Database bool _UpdateDataBlobValue(const uint32 guid, const uint32 field, const int32 value); bool _SetDataBlobValue(const uint32 guid, const uint32 field, const uint32 value); - // Writes SQL commands to a LOG file (see Trinityd.conf "LogSQL") + // Writes SQL commands to a LOG file (see worldserver.conf "LogSQL") bool PExecuteLog(const char *format,...) ATTR_PRINTF(2,3); bool BeginTransaction(); diff --git a/src/server/shared/Database/DatabaseEnv.h b/src/server/shared/Database/DatabaseEnv.h index 69236b076e9..15c1b1c599e 100644 --- a/src/server/shared/Database/DatabaseEnv.h +++ b/src/server/shared/Database/DatabaseEnv.h @@ -22,8 +22,8 @@ #define DATABASEENV_H #include "Common.h" -#include "Log.h" -#include "Errors.h" +#include "Logging/Log.h" +#include "Debugging/Errors.h" #include "Database/Field.h" #include "Database/QueryResult.h" diff --git a/src/server/shared/Database/PreparedStatements.cpp b/src/server/shared/Database/PreparedStatements.cpp new file mode 100644 index 00000000000..40a910acf9e --- /dev/null +++ b/src/server/shared/Database/PreparedStatements.cpp @@ -0,0 +1,93 @@ +#include "PreparedStatements.h" + +void PreparedStatementHolder::_prepareStatement(const char* name, const char* sql, Database *db, uint32 &count) +{ + const char prefix[] = "PREPARE "; + size_t querySize = 8 + strlen(name) + 6 + strlen(sql) + 2 + 1; + char* query = new char[querySize]; + strcpy(query, prefix); + strcat(query, name); + strcat(query, " FROM "); + strcat(query, "'"); + strcat(query, sql); + strcat(query, "'"); + + DEBUG_LOG("Preparing statement: %s", query); + db->Execute(query); + + delete[] query; + ++count; +} + +void PreparedStatementHolder::LoadAuthserver(Database *db, uint32 &count) +{ + _prepareStatement("auth_ping", "SELECT 1 FROM realmlist LIMIT 1", db, count); +}; + +void PreparedStatementHolder::Execute(Database *db, const char *name) +{ + const char prefix[] = "EXECUTE "; + size_t querySize = 8 + strlen(name) + 1; + char* query = new char[querySize]; + strcpy(query, prefix); + strcat(query, name); + + DEBUG_LOG("Prepared statement: %s", query); + db->Execute(query); + delete[] query; +} + +void PreparedStatementHolder::PExecute(Database *db, const char *name, const char* args) +{ + // NOTE: if args == NULL, we're crashing here. No need to waste performance on checking; + // devs must make sure they use PExecute for args and Execute for no args. + + const char prefix[] = "EXECUTE "; + size_t querySize = 8 + strlen(name) + 7 + strlen(args) + 1; + char* query = new char[querySize]; + strcpy(query, prefix); + strcat(query, name); + strcat(query, " USING "); + strcat(query, args); + + DEBUG_LOG("Prepared statement (parsed args): %s", query); + db->Execute(query); + delete[] query; +} + +QueryResult_AutoPtr PreparedStatementHolder::Query(Database *db, const char *name) +{ + QueryResult_AutoPtr _return = QueryResult_AutoPtr(NULL); + + const char prefix[] = "EXECUTE "; + size_t querySize = 8 + strlen(name) + 1; + char* query = new char[querySize]; + strcpy(query, prefix); + strcat(query, name); + + DEBUG_LOG("Prepared statement with resultset: %s", query); + _return = db->Query(query); + delete[] query; + return _return; +} + +QueryResult_AutoPtr PreparedStatementHolder::PQuery(Database *db, const char *name, const char *args) +{ + // NOTE: if args == NULL, we're crashing here. No need to waste performance on checking; + // devs must make sure they use PQuery for args and Query for no args. + + QueryResult_AutoPtr _return = QueryResult_AutoPtr(NULL); + + const char prefix[] = "EXECUTE "; + size_t querySize = 8 + strlen(name) + 7 + strlen(args) + 1; + char* query = new char[querySize]; + strcpy(query, prefix); + strcat(query, name); + strcat(query, " USING "); + strcat(query, args); + + DEBUG_LOG("Prepared statement with resultset (parsed args): %s", query); + _return = db->Query(query); + delete[] query; + return _return; +}
\ No newline at end of file diff --git a/src/server/shared/Database/PreparedStatements.h b/src/server/shared/Database/PreparedStatements.h new file mode 100644 index 00000000000..c19119dcb3d --- /dev/null +++ b/src/server/shared/Database/PreparedStatements.h @@ -0,0 +1,30 @@ +#ifndef sPreparedStatement + +#include "ace/Singleton.h" +#include "Database/DatabaseEnv.h" + +class PreparedStatementHolder +{ + public: + ///- Load prepare statements on database $db and increase $count for every statement + void LoadCharacters(Database *db, uint32 &count); + void LoadAuthserver(Database *db, uint32 &count); + void LoadWorldserver(Database *db, uint32 &count); + + ///- Executes prepared statement that doesn't require feedback with name $name on database $db + void Execute(Database *db, const char* name); + ///- Executes prepared statement that doesn't require feedback with name $name and args $args + ///- on database $db + void PExecute(Database *db, const char* name, const char* args); + + ///- Executes a prepared statement without args on db $db with name $name and puts the result set in a pointer. + QueryResult_AutoPtr Query(Database* db, const char* name); + ///- Executes a prepared statement with args $args on db $db with name $name and put the result set in a pointer. + QueryResult_AutoPtr PQuery(Database* db, const char* name, const char* args); + + private: + void _prepareStatement(const char* name, const char* sql, Database *db, uint32 &count); + +}; +#define sPreparedStatement (*ACE_Singleton<PreparedStatementHolder, ACE_Null_Mutex>::instance()) +#endif
\ No newline at end of file diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h index 4eec9915362..5562a9abfa4 100644 --- a/src/server/shared/Database/QueryResult.h +++ b/src/server/shared/Database/QueryResult.h @@ -26,7 +26,7 @@ #include "Field.h" -#ifdef WIN32 +#ifdef _WIN32 #define FD_SETSIZE 1024 #include <winsock2.h> #include <mysql/mysql.h> diff --git a/src/server/shared/Database/SQLStorageImpl.h b/src/server/shared/Database/SQLStorageImpl.h index c74be48c34c..b3d06484e2e 100644 --- a/src/server/shared/Database/SQLStorageImpl.h +++ b/src/server/shared/Database/SQLStorageImpl.h @@ -16,9 +16,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "ProgressBar.h" -#include "Log.h" -#include "DBCFileLoader.h" +#include "Utilities/ProgressBar.h" +#include "Logging/Log.h" +#include "DataStores/DBCFileLoader.h" template<class T> template<class S, class D> diff --git a/src/server/shared/Database/SqlDelayThread.h b/src/server/shared/Database/SqlDelayThread.h index d603813c8fa..4ef9c67aa5b 100644 --- a/src/server/shared/Database/SqlDelayThread.h +++ b/src/server/shared/Database/SqlDelayThread.h @@ -23,7 +23,7 @@ #include "ace/Thread_Mutex.h" #include "ace/Activation_Queue.h" -#include "Threading.h" +#include "Threading/Threading.h" class Database; class SqlOperation; diff --git a/src/server/shared/Database/SqlOperations.h b/src/server/shared/Database/SqlOperations.h index f2e09c0c921..eb28a2c0790 100644 --- a/src/server/shared/Database/SqlOperations.h +++ b/src/server/shared/Database/SqlOperations.h @@ -25,9 +25,9 @@ #include "ace/Thread_Mutex.h" #include "ace/Method_Request.h" -#include "LockedQueue.h" +#include "Threading/LockedQueue.h" #include <queue> -#include "Utilities/Callback.h" +#include "Threading/Callback.h" #include "QueryResult.h" /// ---- BASE --- |