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 | 6 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
10 files changed, 42 insertions, 22 deletions
diff --git a/src/server/database/Database/DatabaseEnvFwd.h b/src/server/database/Database/DatabaseEnvFwd.h index f6f7653c3f9..b743c88506d 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 struct MySQLHandle; diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index ac1cc3c71dc..75bda12ffbf 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -222,7 +222,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 25cd87bf6cd..8824dc38d85 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 e9012cc9a90..dacd12913da 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 (std::pair<PreparedStatementBase*, PreparedQueryResult>& query : m_queries) { @@ -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 f7a21a97e70..fe4a0e78331 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 85443e6efaa..48ce208ddea 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17121,7 +17121,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 //QueryResult* result = CharacterDatabase.PQuery("SELECT guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, bankSlots, restState, playerFlags, " diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d9f0bcc5f2b..684657327fd 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1315,7 +1315,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; void Initialize(ObjectGuid::LowType guid); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 963fc2e5477..c836979109b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -50,7 +50,7 @@ #include "QueryHolder.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 625e2d0ea76..213e23bbd33 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1193,7 +1193,7 @@ void WorldSession::ProcessQueryCallbacks() _queryProcessor.ProcessReadyQueries(); if (_realmAccountLoginCallback.valid() && _realmAccountLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready) - InitializeSessionCallback(_realmAccountLoginCallback.get()); + InitializeSessionCallback(static_cast<CharacterDatabaseQueryHolder*>(_realmAccountLoginCallback.get())); //! HandlePlayerLoginOpcode if (_charLoginCallback.valid() && _charLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready) @@ -1236,7 +1236,7 @@ QueryCallback WorldSession::LoadPermissionsAsync() return _RBACData->LoadFromDBAsync(); } -class AccountInfoQueryHolderPerRealm : public SQLQueryHolder +class AccountInfoQueryHolderPerRealm : public CharacterDatabaseQueryHolder { public: enum @@ -1278,7 +1278,7 @@ void WorldSession::InitializeSession() _realmAccountLoginCallback = CharacterDatabase.DelayQueryHolder(realmHolder); } -void WorldSession::InitializeSessionCallback(SQLQueryHolder* realmHolder) +void WorldSession::InitializeSessionCallback(CharacterDatabaseQueryHolder* realmHolder) { 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 aa8641a02d5..5e60925a8e0 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -370,7 +370,7 @@ class TC_GAME_API WorldSession void SendClientCacheVersion(uint32 version); void InitializeSession(); - void InitializeSessionCallback(SQLQueryHolder* realmHolder); + void InitializeSessionCallback(CharacterDatabaseQueryHolder* realmHolder); rbac::RBACData* GetRBACData(); bool HasPermission(uint32 permissionId); |