Core/DBLayer: Convert callback queries to prepared statements No. 3
This commit is contained in:
@@ -519,14 +519,17 @@ void WorldSession::HandleListStabledPetsOpcode(WorldPacket & recv_data)
|
|||||||
|
|
||||||
void WorldSession::SendStablePet(uint64 guid)
|
void WorldSession::SendStablePet(uint64 guid)
|
||||||
{
|
{
|
||||||
|
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_PET_SLOTS_DETAIL);
|
||||||
|
|
||||||
|
stmt->setUInt32(0, _player->GetGUIDLow());
|
||||||
|
stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT);
|
||||||
|
stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT);
|
||||||
|
|
||||||
_sendStabledPetCallback.SetParam(guid);
|
_sendStabledPetCallback.SetParam(guid);
|
||||||
_sendStabledPetCallback.SetFutureResult(
|
_sendStabledPetCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
|
||||||
CharacterDatabase.AsyncPQuery("SELECT owner, id, entry, level, name FROM character_pet WHERE owner = '%u' AND slot >= '%u' AND slot <= '%u' ORDER BY slot",
|
|
||||||
_player->GetGUIDLow(), PET_SAVE_FIRST_STABLE_SLOT, PET_SAVE_LAST_STABLE_SLOT)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::SendStablePetCallback(QueryResult result, uint64 guid)
|
void WorldSession::SendStablePetCallback(PreparedQueryResult result, uint64 guid)
|
||||||
{
|
{
|
||||||
if (!GetPlayer())
|
if (!GetPlayer())
|
||||||
return;
|
return;
|
||||||
@@ -679,14 +682,18 @@ void WorldSession::HandleUnstablePet(WorldPacket & recv_data)
|
|||||||
if (GetPlayer()->HasUnitState(UNIT_STAT_DIED))
|
if (GetPlayer()->HasUnitState(UNIT_STAT_DIED))
|
||||||
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
|
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
|
||||||
|
|
||||||
|
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_PET_ENTRY);
|
||||||
|
|
||||||
|
stmt->setUInt32(0, _player->GetGUIDLow());
|
||||||
|
stmt->setUInt32(1, petnumber);
|
||||||
|
stmt->setUInt8(2, PET_SAVE_FIRST_STABLE_SLOT);
|
||||||
|
stmt->setUInt8(3, PET_SAVE_LAST_STABLE_SLOT);
|
||||||
|
|
||||||
_unstablePetCallback.SetParam(petnumber);
|
_unstablePetCallback.SetParam(petnumber);
|
||||||
_unstablePetCallback.SetFutureResult(
|
_unstablePetCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
|
||||||
CharacterDatabase.AsyncPQuery("SELECT entry FROM character_pet WHERE owner = '%u' AND id = '%u' AND slot >='%u' AND slot <= '%u'",
|
|
||||||
_player->GetGUIDLow(), petnumber, PET_SAVE_FIRST_STABLE_SLOT, PET_SAVE_LAST_STABLE_SLOT)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleUnstablePetCallback(QueryResult result, uint32 petnumber)
|
void WorldSession::HandleUnstablePetCallback(PreparedQueryResult result, uint32 petnumber)
|
||||||
{
|
{
|
||||||
if (!GetPlayer())
|
if (!GetPlayer())
|
||||||
return;
|
return;
|
||||||
@@ -780,9 +787,9 @@ void WorldSession::HandleStableSwapPet(WorldPacket & recv_data)
|
|||||||
{
|
{
|
||||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recv CMSG_STABLE_SWAP_PET.");
|
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recv CMSG_STABLE_SWAP_PET.");
|
||||||
uint64 npcGUID;
|
uint64 npcGUID;
|
||||||
uint32 pet_number;
|
uint32 petId;
|
||||||
|
|
||||||
recv_data >> npcGUID >> pet_number;
|
recv_data >> npcGUID >> petId;
|
||||||
|
|
||||||
if (!CheckStableMaster(npcGUID))
|
if (!CheckStableMaster(npcGUID))
|
||||||
{
|
{
|
||||||
@@ -802,15 +809,18 @@ void WorldSession::HandleStableSwapPet(WorldPacket & recv_data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// find swapped pet slot in stable
|
// Find swapped pet slot in stable
|
||||||
_stableSwapCallback.SetParam(pet_number);
|
|
||||||
_stableSwapCallback.SetFutureResult(
|
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_PET_SLOT_BY_ID);
|
||||||
CharacterDatabase.AsyncPQuery("SELECT slot, entry FROM character_pet WHERE owner = '%u' AND id = '%u'",
|
|
||||||
_player->GetGUIDLow(), pet_number)
|
stmt->setUInt32(0, _player->GetGUIDLow());
|
||||||
);
|
stmt->setUInt32(1, petId);
|
||||||
|
|
||||||
|
_stableSwapCallback.SetParam(petId);
|
||||||
|
_stableSwapCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleStableSwapPetCallback(QueryResult result, uint32 petnumber)
|
void WorldSession::HandleStableSwapPetCallback(PreparedQueryResult result, uint32 petId)
|
||||||
{
|
{
|
||||||
if (!GetPlayer())
|
if (!GetPlayer())
|
||||||
return;
|
return;
|
||||||
@@ -823,16 +833,16 @@ void WorldSession::HandleStableSwapPetCallback(QueryResult result, uint32 petnum
|
|||||||
|
|
||||||
Field* fields = result->Fetch();
|
Field* fields = result->Fetch();
|
||||||
|
|
||||||
uint32 slot = fields[0].GetUInt8();
|
uint32 slot = fields[0].GetUInt8();
|
||||||
uint32 creature_id = fields[1].GetUInt32();
|
uint32 petEntry = fields[1].GetUInt32();
|
||||||
|
|
||||||
if (!creature_id)
|
if (!petEntry)
|
||||||
{
|
{
|
||||||
SendStableResult(STABLE_ERR_STABLE);
|
SendStableResult(STABLE_ERR_STABLE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(creature_id);
|
CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(petEntry);
|
||||||
if (!creatureInfo || !creatureInfo->isTameable(_player->CanTameExoticPets()))
|
if (!creatureInfo || !creatureInfo->isTameable(_player->CanTameExoticPets()))
|
||||||
{
|
{
|
||||||
// if problem in exotic pet
|
// if problem in exotic pet
|
||||||
@@ -850,7 +860,7 @@ void WorldSession::HandleStableSwapPetCallback(QueryResult result, uint32 petnum
|
|||||||
|
|
||||||
// summon unstabled pet
|
// summon unstabled pet
|
||||||
Pet* newpet = new Pet(_player);
|
Pet* newpet = new Pet(_player);
|
||||||
if (!newpet->LoadPetFromDB(_player, creature_id, petnumber))
|
if (!newpet->LoadPetFromDB(_player, petEntry, petId))
|
||||||
{
|
{
|
||||||
delete newpet;
|
delete newpet;
|
||||||
SendStableResult(STABLE_ERR_STABLE);
|
SendStableResult(STABLE_ERR_STABLE);
|
||||||
|
|||||||
@@ -1008,22 +1008,20 @@ void WorldSession::InitializeQueryCallbackParameters()
|
|||||||
|
|
||||||
void WorldSession::ProcessQueryCallbacks()
|
void WorldSession::ProcessQueryCallbacks()
|
||||||
{
|
{
|
||||||
QueryResult result;
|
PreparedQueryResult result;
|
||||||
PreparedQueryResult result2;
|
|
||||||
|
|
||||||
//! HandleCharEnumOpcode
|
//! HandleCharEnumOpcode
|
||||||
if (_charEnumCallback.ready())
|
if (_charEnumCallback.ready())
|
||||||
{
|
{
|
||||||
_charEnumCallback.get(result2);
|
_charEnumCallback.get(result);
|
||||||
HandleCharEnum(result2);
|
HandleCharEnum(result);
|
||||||
_charEnumCallback.cancel();
|
_charEnumCallback.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_charCreateCallback.IsReady())
|
if (_charCreateCallback.IsReady())
|
||||||
{
|
{
|
||||||
PreparedQueryResult pResult;
|
_charCreateCallback.GetResult(result);
|
||||||
_charCreateCallback.GetResult(pResult);
|
HandleCharCreateCallback(result, _charCreateCallback.GetParam());
|
||||||
HandleCharCreateCallback(pResult, _charCreateCallback.GetParam());
|
|
||||||
// Don't call FreeResult() here, the callback handler will do that depending on the events in the callback chain
|
// Don't call FreeResult() here, the callback handler will do that depending on the events in the callback chain
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1040,8 +1038,8 @@ void WorldSession::ProcessQueryCallbacks()
|
|||||||
if (_addFriendCallback.IsReady())
|
if (_addFriendCallback.IsReady())
|
||||||
{
|
{
|
||||||
std::string param = _addFriendCallback.GetParam();
|
std::string param = _addFriendCallback.GetParam();
|
||||||
_addFriendCallback.GetResult(result2);
|
_addFriendCallback.GetResult(result);
|
||||||
HandleAddFriendOpcodeCallBack(result2, param);
|
HandleAddFriendOpcodeCallBack(result, param);
|
||||||
_addFriendCallback.FreeResult();
|
_addFriendCallback.FreeResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1049,16 +1047,16 @@ void WorldSession::ProcessQueryCallbacks()
|
|||||||
if (_charRenameCallback.IsReady())
|
if (_charRenameCallback.IsReady())
|
||||||
{
|
{
|
||||||
std::string param = _charRenameCallback.GetParam();
|
std::string param = _charRenameCallback.GetParam();
|
||||||
_charRenameCallback.GetResult(result2);
|
_charRenameCallback.GetResult(result);
|
||||||
HandleChangePlayerNameOpcodeCallBack(result2, param);
|
HandleChangePlayerNameOpcodeCallBack(result, param);
|
||||||
_charRenameCallback.FreeResult();
|
_charRenameCallback.FreeResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- HandleCharAddIgnoreOpcode
|
//- HandleCharAddIgnoreOpcode
|
||||||
if (_addIgnoreCallback.ready())
|
if (_addIgnoreCallback.ready())
|
||||||
{
|
{
|
||||||
_addIgnoreCallback.get(result2);
|
_addIgnoreCallback.get(result);
|
||||||
HandleAddIgnoreOpcodeCallBack(result2);
|
HandleAddIgnoreOpcodeCallBack(result);
|
||||||
_addIgnoreCallback.cancel();
|
_addIgnoreCallback.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1074,8 +1072,8 @@ void WorldSession::ProcessQueryCallbacks()
|
|||||||
//- HandleStablePet
|
//- HandleStablePet
|
||||||
if (_stablePetCallback.ready())
|
if (_stablePetCallback.ready())
|
||||||
{
|
{
|
||||||
_stablePetCallback.get(result2);
|
_stablePetCallback.get(result);
|
||||||
HandleStablePetCallback(result2);
|
HandleStablePetCallback(result);
|
||||||
_stablePetCallback.cancel();
|
_stablePetCallback.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ class WorldSession
|
|||||||
// Pet
|
// Pet
|
||||||
void SendPetNameQuery(uint64 guid, uint32 petnumber);
|
void SendPetNameQuery(uint64 guid, uint32 petnumber);
|
||||||
void SendStablePet(uint64 guid);
|
void SendStablePet(uint64 guid);
|
||||||
void SendStablePetCallback(QueryResult result, uint64 guid);
|
void SendStablePetCallback(PreparedQueryResult result, uint64 guid);
|
||||||
void SendStableResult(uint8 guid);
|
void SendStableResult(uint8 guid);
|
||||||
bool CheckStableMaster(uint64 guid);
|
bool CheckStableMaster(uint64 guid);
|
||||||
|
|
||||||
@@ -587,11 +587,11 @@ class WorldSession
|
|||||||
void HandleStablePet(WorldPacket& recvPacket);
|
void HandleStablePet(WorldPacket& recvPacket);
|
||||||
void HandleStablePetCallback(PreparedQueryResult result);
|
void HandleStablePetCallback(PreparedQueryResult result);
|
||||||
void HandleUnstablePet(WorldPacket& recvPacket);
|
void HandleUnstablePet(WorldPacket& recvPacket);
|
||||||
void HandleUnstablePetCallback(QueryResult result, uint32 petnumber);
|
void HandleUnstablePetCallback(PreparedQueryResult result, uint32 petnumber);
|
||||||
void HandleBuyStableSlot(WorldPacket& recvPacket);
|
void HandleBuyStableSlot(WorldPacket& recvPacket);
|
||||||
void HandleStableRevivePet(WorldPacket& recvPacket);
|
void HandleStableRevivePet(WorldPacket& recvPacket);
|
||||||
void HandleStableSwapPet(WorldPacket& recvPacket);
|
void HandleStableSwapPet(WorldPacket& recvPacket);
|
||||||
void HandleStableSwapPetCallback(QueryResult result, uint32 petnumber);
|
void HandleStableSwapPetCallback(PreparedQueryResult result, uint32 petId);
|
||||||
|
|
||||||
void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
|
void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
|
||||||
void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
|
void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
|
||||||
@@ -898,9 +898,9 @@ class WorldSession
|
|||||||
PreparedQueryResultFuture _stablePetCallback;
|
PreparedQueryResultFuture _stablePetCallback;
|
||||||
QueryCallback<PreparedQueryResult, std::string> _charRenameCallback;
|
QueryCallback<PreparedQueryResult, std::string> _charRenameCallback;
|
||||||
QueryCallback<PreparedQueryResult, std::string> _addFriendCallback;
|
QueryCallback<PreparedQueryResult, std::string> _addFriendCallback;
|
||||||
QueryCallback<QueryResult, uint32> _unstablePetCallback;
|
QueryCallback<PreparedQueryResult, uint32> _unstablePetCallback;
|
||||||
QueryCallback<QueryResult, uint32> _stableSwapCallback;
|
QueryCallback<PreparedQueryResult, uint32> _stableSwapCallback;
|
||||||
QueryCallback<QueryResult, uint64> _sendStabledPetCallback;
|
QueryCallback<PreparedQueryResult, uint64> _sendStabledPetCallback;
|
||||||
QueryCallback<PreparedQueryResult, CharacterCreateInfo*, true> _charCreateCallback;
|
QueryCallback<PreparedQueryResult, CharacterCreateInfo*, true> _charCreateCallback;
|
||||||
QueryResultHolderFuture _charLoginCallback;
|
QueryResultHolderFuture _charLoginCallback;
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
|||||||
PREPARE_STATEMENT(CHAR_GET_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.playerBytes, c.playerBytes2, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? ORDER BY c.guid", CONNECTION_ASYNC);
|
PREPARE_STATEMENT(CHAR_GET_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.playerBytes, c.playerBytes2, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? ORDER BY c.guid", CONNECTION_ASYNC);
|
||||||
PREPARE_STATEMENT(CHAR_GET_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.playerBytes, c.playerBytes2, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? ORDER BY c.guid", CONNECTION_ASYNC);
|
PREPARE_STATEMENT(CHAR_GET_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.playerBytes, c.playerBytes2, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? ORDER BY c.guid", CONNECTION_ASYNC);
|
||||||
PREPARE_STATEMENT(CHAR_GET_PET_SLOTS, "SELECT owner, slot FROM character_pet WHERE owner = ? AND slot >= ? AND slot <= ? ORDER BY slot", CONNECTION_ASYNC);
|
PREPARE_STATEMENT(CHAR_GET_PET_SLOTS, "SELECT owner, slot FROM character_pet WHERE owner = ? AND slot >= ? AND slot <= ? ORDER BY slot", CONNECTION_ASYNC);
|
||||||
|
PREPARE_STATEMENT(CHAR_GET_PET_SLOTS_DETAIL, "SELECT owner, id, entry, level, name FROM character_pet WHERE owner = ? AND slot >= ? AND slot <= ? ORDER BY slot", CONNECTION_ASYNC);
|
||||||
|
PREPARE_STATEMENT(CHAR_GET_PET_ENTRY, "SELECT entry FROM character_pet WHERE owner = ? AND id = ? AND slot >= ? AND slot <= ?", CONNECTION_ASYNC);
|
||||||
|
PREPARE_STATEMENT(CHAR_GET_PET_SLOT_BY_ID, "SELECT slot, entry FROM character_pet WHERE owner = ? AND id = ?", CONNECTION_ASYNC);
|
||||||
PREPARE_STATEMENT(CHAR_GET_FREE_NAME, "SELECT guid, name FROM characters WHERE guid = ? AND account = ? AND (at_login & ?) = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)", CONNECTION_ASYNC);
|
PREPARE_STATEMENT(CHAR_GET_FREE_NAME, "SELECT guid, name FROM characters WHERE guid = ? AND account = ? AND (at_login & ?) = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)", CONNECTION_ASYNC);
|
||||||
PREPARE_STATEMENT(CHAR_GET_GUID_RACE_ACC_BY_NAME, "SELECT guid, race, account FROM characters WHERE name = ?", CONNECTION_ASYNC);
|
PREPARE_STATEMENT(CHAR_GET_GUID_RACE_ACC_BY_NAME, "SELECT guid, race, account FROM characters WHERE name = ?", CONNECTION_ASYNC);
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ enum CharacterDatabaseStatements
|
|||||||
CHAR_GET_ENUM,
|
CHAR_GET_ENUM,
|
||||||
CHAR_GET_ENUM_DECLINED_NAME,
|
CHAR_GET_ENUM_DECLINED_NAME,
|
||||||
CHAR_GET_PET_SLOTS,
|
CHAR_GET_PET_SLOTS,
|
||||||
|
CHAR_GET_PET_SLOTS_DETAIL,
|
||||||
|
CHAR_GET_PET_ENTRY,
|
||||||
|
CHAR_GET_PET_SLOT_BY_ID,
|
||||||
CHAR_GET_FREE_NAME,
|
CHAR_GET_FREE_NAME,
|
||||||
CHAR_GET_GUID_RACE_ACC_BY_NAME,
|
CHAR_GET_GUID_RACE_ACC_BY_NAME,
|
||||||
CHAR_LOAD_PLAYER,
|
CHAR_LOAD_PLAYER,
|
||||||
|
|||||||
Reference in New Issue
Block a user