Core/DBLayer: Convert callback queries to prepared statements #2
This commit is contained in:
@@ -531,24 +531,23 @@ void WorldSession::HandleAddFriendOpcode(WorldPacket & recv_data)
|
||||
if (!normalizePlayerName(friendName))
|
||||
return;
|
||||
|
||||
CharacterDatabase.EscapeString(friendName); // prevent SQL injection - normal name must not be changed by this call
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: %s asked to add friend : '%s'", GetPlayer()->GetName(), friendName.c_str());
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: %s asked to add friend : '%s'",
|
||||
GetPlayer()->GetName(), friendName.c_str());
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_GUID_RACE_ACC_BY_NAME);
|
||||
|
||||
stmt->setString(0, friendName);
|
||||
|
||||
_addFriendCallback.SetParam(friendNote);
|
||||
_addFriendCallback.SetFutureResult(
|
||||
CharacterDatabase.AsyncPQuery("SELECT guid, race, account FROM characters WHERE name = '%s'", friendName.c_str())
|
||||
);
|
||||
_addFriendCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
|
||||
}
|
||||
|
||||
void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult result, std::string friendNote)
|
||||
void WorldSession::HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std::string friendNote)
|
||||
{
|
||||
if (!GetPlayer())
|
||||
return;
|
||||
|
||||
uint64 friendGuid;
|
||||
uint32 friendAcctid;
|
||||
uint32 friendAccountId;
|
||||
uint32 team;
|
||||
FriendsResult friendResult;
|
||||
|
||||
@@ -557,11 +556,13 @@ void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult result, std::string
|
||||
|
||||
if (result)
|
||||
{
|
||||
friendGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
|
||||
team = Player::TeamForRace((*result)[1].GetUInt8());
|
||||
friendAcctid = (*result)[2].GetUInt32();
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
if (!AccountMgr::IsPlayerAccount(GetSecurity()) || sWorld->getBoolConfig(CONFIG_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAcctid, realmID)))
|
||||
friendGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
|
||||
team = Player::TeamForRace(fields[1].GetUInt8());
|
||||
friendAccountId = fields[2].GetUInt32();
|
||||
|
||||
if (!AccountMgr::IsPlayerAccount(GetSecurity()) || sWorld->getBoolConfig(CONFIG_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAccountId, realmID)))
|
||||
{
|
||||
if (friendGuid)
|
||||
{
|
||||
|
||||
@@ -1040,8 +1040,8 @@ void WorldSession::ProcessQueryCallbacks()
|
||||
if (_addFriendCallback.IsReady())
|
||||
{
|
||||
std::string param = _addFriendCallback.GetParam();
|
||||
_addFriendCallback.GetResult(result);
|
||||
HandleAddFriendOpcodeCallBack(result, param);
|
||||
_addFriendCallback.GetResult(result2);
|
||||
HandleAddFriendOpcodeCallBack(result2, param);
|
||||
_addFriendCallback.FreeResult();
|
||||
}
|
||||
|
||||
|
||||
@@ -469,7 +469,7 @@ class WorldSession
|
||||
void HandleEmoteOpcode(WorldPacket& recvPacket);
|
||||
void HandleContactListOpcode(WorldPacket& recvPacket);
|
||||
void HandleAddFriendOpcode(WorldPacket& recvPacket);
|
||||
void HandleAddFriendOpcodeCallBack(QueryResult result, std::string friendNote);
|
||||
void HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std::string friendNote);
|
||||
void HandleDelFriendOpcode(WorldPacket& recvPacket);
|
||||
void HandleAddIgnoreOpcode(WorldPacket& recvPacket);
|
||||
void HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result);
|
||||
@@ -900,7 +900,7 @@ class WorldSession
|
||||
PreparedQueryResultFuture _addIgnoreCallback;
|
||||
PreparedQueryResultFuture _stablePetCallback;
|
||||
QueryCallback<PreparedQueryResult, std::string> _charRenameCallback;
|
||||
QueryCallback<QueryResult, std::string> _addFriendCallback;
|
||||
QueryCallback<PreparedQueryResult, std::string> _addFriendCallback;
|
||||
QueryCallback<QueryResult, uint32> _unstablePetCallback;
|
||||
QueryCallback<QueryResult, uint32> _stableSwapCallback;
|
||||
QueryCallback<QueryResult, uint64> _sendStabledPetCallback;
|
||||
|
||||
@@ -40,6 +40,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
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_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);
|
||||
|
||||
// Start LoginQueryHolder content
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
|
||||
|
||||
@@ -60,6 +60,7 @@ enum CharacterDatabaseStatements
|
||||
CHAR_GET_ENUM_DECLINED_NAME,
|
||||
CHAR_GET_PET_SLOTS,
|
||||
CHAR_GET_FREE_NAME,
|
||||
CHAR_GET_GUID_RACE_ACC_BY_NAME,
|
||||
CHAR_LOAD_PLAYER,
|
||||
CHAR_LOAD_PLAYER_GROUP,
|
||||
CHAR_LOAD_PLAYER_BOUNDINSTANCES,
|
||||
|
||||
Reference in New Issue
Block a user