diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/database/Database/DatabaseEnvFwd.h | 12 | ||||
-rw-r--r-- | src/server/database/Database/DatabaseWorkerPool.cpp | 2 | ||||
-rw-r--r-- | src/server/database/Database/DatabaseWorkerPool.h | 2 | ||||
-rw-r--r-- | src/server/database/Database/QueryHolder.cpp | 10 | ||||
-rw-r--r-- | src/server/database/Database/QueryHolder.h | 24 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
10 files changed, 44 insertions, 23 deletions
diff --git a/src/server/database/Database/DatabaseEnvFwd.h b/src/server/database/Database/DatabaseEnvFwd.h index 61dad270e99..df607b29349 100644 --- a/src/server/database/Database/DatabaseEnvFwd.h +++ b/src/server/database/Database/DatabaseEnvFwd.h @@ -63,9 +63,17 @@ using HotfixDatabaseTransaction = SQLTransaction<HotfixDatabaseConnection>; using LoginDatabaseTransaction = SQLTransaction<LoginDatabaseConnection>; using WorldDatabaseTransaction = SQLTransaction<WorldDatabaseConnection>; +class SQLQueryHolderBase; +typedef std::future<SQLQueryHolderBase*> QueryResultHolderFuture; +typedef std::promise<SQLQueryHolderBase*> QueryResultHolderPromise; + +template<typename T> class SQLQueryHolder; -typedef std::future<SQLQueryHolder*> QueryResultHolderFuture; -typedef std::promise<SQLQueryHolder*> QueryResultHolderPromise; + +using CharacterDatabaseQueryHolder = SQLQueryHolder<CharacterDatabaseConnection>; +using HotfixDatabaseQueryHolder = SQLQueryHolder<HotfixDatabaseConnection>; +using LoginDatabaseQueryHolder = SQLQueryHolder<LoginDatabaseConnection>; +using WorldDatabaseQueryHolder = SQLQueryHolder<WorldDatabaseConnection>; // mysql typedef struct st_mysql MYSQL; diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index d6ce7dd2e33..77beac8f277 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -201,7 +201,7 @@ QueryCallback DatabaseWorkerPool<T>::AsyncQuery(PreparedStatement<T>* stmt) } template <class T> -QueryResultHolderFuture DatabaseWorkerPool<T>::DelayQueryHolder(SQLQueryHolder* holder) +QueryResultHolderFuture DatabaseWorkerPool<T>::DelayQueryHolder(SQLQueryHolder<T>* holder) { SQLQueryHolderTask* task = new SQLQueryHolderTask(holder); // Store future result before enqueueing - task might get already processed and deleted before returning from this method diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 548315e9f26..a679dca14b8 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -160,7 +160,7 @@ class DatabaseWorkerPool //! return object as soon as the query is executed. //! The return value is then processed in ProcessQueryCallback methods. //! Any prepared statements added to this holder need to be prepared with the CONNECTION_ASYNC flag. - QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder); + QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder<T>* holder); /** Transaction context methods. diff --git a/src/server/database/Database/QueryHolder.cpp b/src/server/database/Database/QueryHolder.cpp index ff228e1a7d2..954be3000f5 100644 --- a/src/server/database/Database/QueryHolder.cpp +++ b/src/server/database/Database/QueryHolder.cpp @@ -21,7 +21,7 @@ #include "Log.h" #include "QueryResult.h" -bool SQLQueryHolder::SetPreparedQuery(size_t index, PreparedStatementBase* stmt) +bool SQLQueryHolderBase::SetPreparedQueryImpl(size_t index, PreparedStatementBase* stmt) { if (m_queries.size() <= index) { @@ -33,7 +33,7 @@ bool SQLQueryHolder::SetPreparedQuery(size_t index, PreparedStatementBase* stmt) return true; } -PreparedQueryResult SQLQueryHolder::GetPreparedResult(size_t index) +PreparedQueryResult SQLQueryHolderBase::GetPreparedResult(size_t index) { // Don't call to this function if the index is of a prepared statement if (index < m_queries.size()) @@ -42,7 +42,7 @@ PreparedQueryResult SQLQueryHolder::GetPreparedResult(size_t index) return PreparedQueryResult(nullptr); } -void SQLQueryHolder::SetPreparedResult(size_t index, PreparedResultSet* result) +void SQLQueryHolderBase::SetPreparedResult(size_t index, PreparedResultSet* result) { if (result && !result->GetRowCount()) { @@ -55,7 +55,7 @@ void SQLQueryHolder::SetPreparedResult(size_t index, PreparedResultSet* result) m_queries[index].second = PreparedQueryResult(result); } -SQLQueryHolder::~SQLQueryHolder() +SQLQueryHolderBase::~SQLQueryHolderBase() { for (size_t i = 0; i < m_queries.size(); i++) { @@ -65,7 +65,7 @@ SQLQueryHolder::~SQLQueryHolder() } } -void SQLQueryHolder::SetSize(size_t size) +void SQLQueryHolderBase::SetSize(size_t size) { /// to optimize push_back, reserve the number of queries about to be executed m_queries.resize(size); diff --git a/src/server/database/Database/QueryHolder.h b/src/server/database/Database/QueryHolder.h index 2eefc9e2f96..3da8918d329 100644 --- a/src/server/database/Database/QueryHolder.h +++ b/src/server/database/Database/QueryHolder.h @@ -20,29 +20,41 @@ #include "SQLOperation.h" -class TC_DATABASE_API SQLQueryHolder +class TC_DATABASE_API SQLQueryHolderBase { friend class SQLQueryHolderTask; private: std::vector<std::pair<PreparedStatementBase*, PreparedQueryResult>> m_queries; public: - SQLQueryHolder() { } - virtual ~SQLQueryHolder(); - bool SetPreparedQuery(size_t index, PreparedStatementBase* stmt); + SQLQueryHolderBase() { } + virtual ~SQLQueryHolderBase(); void SetSize(size_t size); PreparedQueryResult GetPreparedResult(size_t index); void SetPreparedResult(size_t index, PreparedResultSet* result); + + protected: + bool SetPreparedQueryImpl(size_t index, PreparedStatementBase* stmt); +}; + +template<typename T> +class SQLQueryHolder : public SQLQueryHolderBase +{ +public: + bool SetPreparedQuery(size_t index, PreparedStatement<T>* stmt) + { + return SetPreparedQueryImpl(index, stmt); + } }; class TC_DATABASE_API SQLQueryHolderTask : public SQLOperation { private: - SQLQueryHolder* m_holder; + SQLQueryHolderBase* m_holder; QueryResultHolderPromise m_result; bool m_executed; public: - SQLQueryHolderTask(SQLQueryHolder* holder) + SQLQueryHolderTask(SQLQueryHolderBase* holder) : m_holder(holder), m_executed(false) { } ~SQLQueryHolderTask(); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 994e54b49e0..4712097e650 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17540,7 +17540,7 @@ bool Player::IsLoading() const return GetSession()->PlayerLoading(); } -bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) +bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder* holder) { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 //"SELECT guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 93e33a350d6..ea3dc0021ca 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1432,7 +1432,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> /*** LOAD SYSTEM ***/ /*********************************************************/ - bool LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder); + bool LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder* holder); bool IsLoading() const override; static uint32 GetUInt32ValueFromArray(Tokenizer const& data, uint16 index); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index c2cd72a17dd..cc8cd627804 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -63,7 +63,7 @@ #include "Util.h" #include "World.h" -class LoginQueryHolder : public SQLQueryHolder +class LoginQueryHolder : public CharacterDatabaseQueryHolder { private: uint32 m_accountId; diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 28e7541bdf6..d77089d8f4f 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -882,7 +882,8 @@ void WorldSession::ProcessQueryCallbacks() if (_realmAccountLoginCallback.valid() && _realmAccountLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready && _accountLoginCallback.valid() && _accountLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready) - InitializeSessionCallback(_realmAccountLoginCallback.get(), _accountLoginCallback.get()); + InitializeSessionCallback(static_cast<LoginDatabaseQueryHolder*>(_realmAccountLoginCallback.get()), + static_cast<CharacterDatabaseQueryHolder*>(_accountLoginCallback.get())); //! HandlePlayerLoginOpcode if (_charLoginCallback.valid() && _charLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready) @@ -930,7 +931,7 @@ QueryCallback WorldSession::LoadPermissionsAsync() return _RBACData->LoadFromDBAsync(); } -class AccountInfoQueryHolderPerRealm : public SQLQueryHolder +class AccountInfoQueryHolderPerRealm : public CharacterDatabaseQueryHolder { public: enum @@ -959,7 +960,7 @@ public: } }; -class AccountInfoQueryHolder : public SQLQueryHolder +class AccountInfoQueryHolder : public LoginDatabaseQueryHolder { public: enum @@ -1041,7 +1042,7 @@ void WorldSession::InitializeSession() _accountLoginCallback = LoginDatabase.DelayQueryHolder(holder); } -void WorldSession::InitializeSessionCallback(SQLQueryHolder* realmHolder, SQLQueryHolder* holder) +void WorldSession::InitializeSessionCallback(LoginDatabaseQueryHolder* realmHolder, CharacterDatabaseQueryHolder* holder) { LoadAccountData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::GLOBAL_ACCOUNT_DATA), GLOBAL_CACHE_MASK); LoadTutorialsData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::TUTORIALS)); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 81ec27a579e..5607e6c375b 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -918,7 +918,7 @@ class TC_GAME_API WorldSession void SendAvailableHotfixes(int32 version); void InitializeSession(); - void InitializeSessionCallback(SQLQueryHolder* realmHolder, SQLQueryHolder* holder); + void InitializeSessionCallback(LoginDatabaseQueryHolder* realmHolder, CharacterDatabaseQueryHolder* holder); rbac::RBACData* GetRBACData(); bool HasPermission(uint32 permissionId); |