diff --git a/src/ChatTransmitterDatabaseConnection.cpp b/src/ChatTransmitterDatabaseConnection.cpp index d778f4d..6099d7b 100644 --- a/src/ChatTransmitterDatabaseConnection.cpp +++ b/src/ChatTransmitterDatabaseConnection.cpp @@ -5,24 +5,18 @@ class MySQLPreparedStatement {}; ChatTransmitterDatabaseConnection::ChatTransmitterDatabaseConnection(MySQLConnectionInfo& connInfo) - : MySQLConnection(connInfo) + : MySQLConnection(connInfo, nullptr, false) { } -ChatTransmitterDatabaseConnection::ChatTransmitterDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) - : MySQLConnection(q, connInfo) +ChatTransmitterDatabaseConnection::ChatTransmitterDatabaseConnection(MySQLConnectionInfo& connInfo, ProducerConsumerQueue* dbQueue) + : MySQLConnection(connInfo, dbQueue, false) { } -ChatTransmitterDatabaseConnection::~ChatTransmitterDatabaseConnection() -{ -} - -void ChatTransmitterDatabaseConnection::DoPrepareStatements() -{ -} +ChatTransmitterDatabaseConnection::~ChatTransmitterDatabaseConnection() = default; -bool ChatTransmitterDatabaseConnection::_HandleMySQLErrno(uint32 errNo, uint8 attempts) +bool ChatTransmitterDatabaseConnection::HandleMySQLError(uint32 errNo, uint8 attempts) { switch (errNo) { @@ -31,17 +25,17 @@ bool ChatTransmitterDatabaseConnection::_HandleMySQLErrno(uint32 errNo, uint8 at case ER_PARSE_ERROR: return false; default: - return MySQLConnection::_HandleMySQLErrno(errNo, attempts); + return MySQLConnection::HandleMySQLError(errNo, attempts); } } std::string ChatTransmitterDatabaseConnection::GetLastErrorString() { - const char* err = mysql_error(reinterpret_cast(m_Mysql)); + const char* err = mysql_error(reinterpret_cast(_mysqlHandle)); return std::string(err); } uint64 ChatTransmitterDatabaseConnection::GetAffectedRows() { - return mysql_affected_rows(reinterpret_cast(m_Mysql)); + return mysql_affected_rows(reinterpret_cast(_mysqlHandle)); } diff --git a/src/ChatTransmitterDatabaseConnection.h b/src/ChatTransmitterDatabaseConnection.h index 300ffa1..0da0833 100644 --- a/src/ChatTransmitterDatabaseConnection.h +++ b/src/ChatTransmitterDatabaseConnection.h @@ -6,21 +6,16 @@ class ChatTransmitterDatabaseConnection : public MySQLConnection { public: - enum Statements : uint32 - { }; - - ChatTransmitterDatabaseConnection(MySQLConnectionInfo& connInfo); - ChatTransmitterDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo); + explicit ChatTransmitterDatabaseConnection(MySQLConnectionInfo& connInfo); + ChatTransmitterDatabaseConnection(MySQLConnectionInfo& connInfo, ProducerConsumerQueue* dbQueue); ~ChatTransmitterDatabaseConnection() override; - void DoPrepareStatements() override; - std::string GetLastErrorString(); uint64 GetAffectedRows(); protected: - bool _HandleMySQLErrno(uint32 errNo, uint8 attempts = 5) override; + bool HandleMySQLError(uint32 errNo, uint8 attempts = 5) override; }; #endif diff --git a/src/DatabaseManager.cpp b/src/DatabaseManager.cpp index a00d883..daeae73 100644 --- a/src/DatabaseManager.cpp +++ b/src/DatabaseManager.cpp @@ -1,9 +1,14 @@ +/* + * + * */ + #include "Config.h" #include "Common.h" #include "DatabaseEnv.h" #include "Time/GameTime.h" #include "DatabaseManager.h" #include "ChatTransmitter.h" +#include "DatabaseAsyncOperation.h" #include "Requests/RequestQueryResult.h" namespace ModChatTransmitter @@ -84,7 +89,7 @@ namespace ModChatTransmitter return; } - ResultSet* result = db->Query(query); + auto result = db->Query(query); if (!result) { if (db->GetLastError()) @@ -164,11 +169,11 @@ namespace ModChatTransmitter workQueue.Cancel(); } - void DatabaseManager::InitializeDatabase(const MySQLConnectionInfo* srcConnInfo, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database) + void DatabaseManager::InitializeDatabase(const MySQLConnectionInfo* srcConnInfo, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database) { *connInfo = new MySQLConnectionInfo(*srcConnInfo); - *sqlQueue = new ProducerConsumerQueue(); - *database = new ChatTransmitterDatabaseConnection(*sqlQueue, **connInfo); + *sqlQueue = new ProducerConsumerQueue(); + *database = new ChatTransmitterDatabaseConnection(**connInfo, *sqlQueue); uint32 res = (*database)->Open(); if (res) @@ -178,14 +183,14 @@ namespace ModChatTransmitter } } - void DatabaseManager::InitializeDatabase(const std::string& connectionString, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database) + void DatabaseManager::InitializeDatabase(const std::string& connectionString, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database) { - MySQLConnectionInfo* srcConnInfo = new MySQLConnectionInfo(connectionString); + auto srcConnInfo = new MySQLConnectionInfo(connectionString); InitializeDatabase(srcConnInfo, connInfo, sqlQueue, database); delete srcConnInfo; } - void DatabaseManager::CleanupDatabase(MySQLConnectionInfo* connInfo, ProducerConsumerQueue* sqlQueue, ChatTransmitterDatabaseConnection** database) + void DatabaseManager::CleanupDatabase(MySQLConnectionInfo* connInfo, ProducerConsumerQueue* sqlQueue, ChatTransmitterDatabaseConnection** database) { (*database)->Close(); sqlQueue->Cancel(); diff --git a/src/DatabaseManager.h b/src/DatabaseManager.h index c17462f..00802a9 100644 --- a/src/DatabaseManager.h +++ b/src/DatabaseManager.h @@ -4,6 +4,9 @@ #include "PCQueue.h" #include "Requests/RequestQueryResult.h" #include "ChatTransmitterDatabaseConnection.h" +#include + +class AsyncOperation; namespace ModChatTransmitter { @@ -26,9 +29,9 @@ namespace ModChatTransmitter private: void HandleQuery(const std::string& id, const std::string& query, QueryDatabase dbType); - void InitializeDatabase(const std::string& connectionString, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database); - void InitializeDatabase(const MySQLConnectionInfo* srcConnInfo, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database); - void CleanupDatabase(MySQLConnectionInfo* connInfo, ProducerConsumerQueue* sqlQueue, ChatTransmitterDatabaseConnection** database); + void InitializeDatabase(const std::string& connectionString, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database); + void InitializeDatabase(const MySQLConnectionInfo* srcConnInfo, MySQLConnectionInfo** connInfo, ProducerConsumerQueue** sqlQueue, ChatTransmitterDatabaseConnection** database); + void CleanupDatabase(MySQLConnectionInfo* connInfo, ProducerConsumerQueue* sqlQueue, ChatTransmitterDatabaseConnection** database); bool IsValidUtf8(const Binary& data); void Cleanup(); @@ -38,9 +41,9 @@ namespace ModChatTransmitter std::string query; QueryDatabase dbType; - WorkItem(const std::string& id, const std::string& query, QueryDatabase dbType) - : id(id), - query(query), + WorkItem(std::string id, std::string query, QueryDatabase dbType) + : id(std::move(id)), + query(std::move(query)), dbType(dbType) { } }; @@ -52,22 +55,22 @@ namespace ModChatTransmitter long long nextDbPingTime; MySQLConnectionInfo* authConnInfo; - ProducerConsumerQueue* authSqlQueue; + ProducerConsumerQueue* authSqlQueue; ChatTransmitterDatabaseConnection* authDatabase; MySQLConnectionInfo* charsConnInfo; - ProducerConsumerQueue* charsSqlQueue; + ProducerConsumerQueue* charsSqlQueue; ChatTransmitterDatabaseConnection* charsDatabase; MySQLConnectionInfo* worldConnInfo; - ProducerConsumerQueue* worldSqlQueue; + ProducerConsumerQueue* worldSqlQueue; ChatTransmitterDatabaseConnection* worldDatabase; MySQLConnectionInfo* elunaConnInfo; - ProducerConsumerQueue* elunaSqlQueue; + ProducerConsumerQueue* elunaSqlQueue; ChatTransmitterDatabaseConnection* elunaDatabase; - std::atomic_bool stop; + std::atomic stop; }; }