diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-11-19 23:28:52 -0300 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2018-01-21 22:01:15 +0100 |
commit | ad8d47b137a98e1e9a96692f3cee50d759bd6adc (patch) | |
tree | 27636e8680ed6c2072d0b4202236c56fa8a2f61c /src/server/game/Handlers/PetitionsHandler.cpp | |
parent | af4538c5fc218d2349a8e10f97681cb77199b2c6 (diff) |
Core/Guild: avoid data integrity problems wrapping delete+insert statements in a transaction
(cherry picked from commit 25281ecb3198a543ddb18aab41b8a206512bdd0c)
Diffstat (limited to 'src/server/game/Handlers/PetitionsHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/PetitionsHandler.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 736d6138cf4..922bc519e13 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -536,15 +536,21 @@ void WorldSession::HandleTurnInPetition(WorldPackets::Petition::TurnInPetition& Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_COMMAND_SUCCESS, name); - // Add members from signatures - for (uint8 i = 0; i < signatures; ++i) { - Field* fields = result->Fetch(); - guild->AddMember(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64())); + SQLTransaction trans = CharacterDatabase.BeginTransaction(); - // Checking the return value just to be double safe - if (!result->NextRow()) - break; + // Add members from signatures + for (uint8 i = 0; i < signatures; ++i) + { + Field* fields = result->Fetch(); + guild->AddMember(trans, ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64())); + + // Checking the return value just to be double safe + if (!result->NextRow()) + break; + } + + CharacterDatabase.CommitTransaction(trans); } SQLTransaction trans = CharacterDatabase.BeginTransaction(); |