diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index f8b840ea2..b397b0142 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -616,6 +616,10 @@ void CharacterDatabaseConnection::DoPrepareStatements() "ON DUPLICATE KEY UPDATE state = VALUES(state)", CONNECTION_ASYNC); PrepareStatement(CHAR_DELETE_INSTANCE_SAVED_DATA, "DELETE FROM instance_saved_go_state_data WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SANITIZE_INSTANCE_SAVED_DATA, "DELETE FROM instance_saved_go_state_data WHERE id NOT IN (SELECT instance.id FROM instance)", CONNECTION_ASYNC); + + // world_state + PrepareStatement(CHAR_SEL_WORLD_STATE, "SELECT Id, Data FROM world_state", CONNECTION_SYNCH); + PrepareStatement(CHAR_REP_WORLD_STATE, "REPLACE INTO world_state (Id, Data) VALUES(?, ?)", CONNECTION_ASYNC); } CharacterDatabaseConnection::CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index d0f5d11a1..e7e05e473 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -528,6 +528,9 @@ enum CharacterDatabaseStatements : uint32 CHAR_DELETE_INSTANCE_SAVED_DATA, CHAR_SANITIZE_INSTANCE_SAVED_DATA, + CHAR_SEL_WORLD_STATE, + CHAR_REP_WORLD_STATE, + MAX_CHARACTERDATABASE_STATEMENTS }; diff --git a/src/server/game/World/WorldState.cpp b/src/server/game/World/WorldState.cpp index cbdf4a91e..0ca7ea0c0 100644 --- a/src/server/game/World/WorldState.cpp +++ b/src/server/game/World/WorldState.cpp @@ -47,7 +47,9 @@ WorldState::~WorldState() void WorldState::Load() { - QueryResult result = CharacterDatabase.Query("SELECT Id, Data FROM world_state"); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_WORLD_STATE); + PreparedQueryResult result = CharacterDatabase.Query(stmt); + if (result) { do @@ -205,8 +207,10 @@ void WorldState::Save(WorldStateSaveIds saveId) void WorldState::SaveHelper(std::string& stringToSave, WorldStateSaveIds saveId) { - CharacterDatabase.Execute("DELETE FROM world_state WHERE Id='{}'", saveId); - CharacterDatabase.Execute("INSERT INTO world_state(Id,Data) VALUES('{}','{}')", saveId, stringToSave.data()); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_WORLD_STATE); + stmt->SetData(0, saveId); + stmt->SetData(1, stringToSave); + CharacterDatabase.Execute(stmt); } bool WorldState::IsConditionFulfilled(uint32 conditionId, uint32 state) const