aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/authserver/Realms/RealmList.cpp23
-rw-r--r--src/server/authserver/Server/AuthSocket.cpp32
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp2
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp29
-rw-r--r--src/server/game/Addons/AddonMgr.cpp2
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp9
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp6
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp2
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp2
-rw-r--r--src/server/game/Chat/Chat.cpp4
-rw-r--r--src/server/game/Chat/Commands/Level2.cpp14
-rw-r--r--src/server/game/Chat/Commands/Level3.cpp71
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp2
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp2
-rw-r--r--src/server/game/Entities/Item/Item.cpp24
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp379
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp11
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp6
-rw-r--r--src/server/game/Events/GameEventMgr.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp85
-rw-r--r--src/server/game/Guilds/Guild.cpp16
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.cpp2
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp2
-rw-r--r--src/server/game/Pools/PoolMgr.cpp10
-rw-r--r--src/server/game/Quests/QuestDef.cpp16
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp8
-rw-r--r--src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp11
-rw-r--r--src/server/game/Server/Protocol/Handlers/MiscHandler.cpp6
-rw-r--r--src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp4
-rw-r--r--src/server/game/Server/Protocol/Handlers/QueryHandler.cpp6
-rw-r--r--src/server/game/Server/WorldSession.cpp10
-rw-r--r--src/server/game/Server/WorldSocket.cpp8
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp6
-rw-r--r--src/server/game/Tools/PlayerDump.cpp4
-rw-r--r--src/server/game/Weather/WeatherMgr.cpp2
-rw-r--r--src/server/game/World/World.cpp10
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h1
-rw-r--r--src/server/shared/Database/Field.cpp66
-rw-r--r--src/server/shared/Database/Field.h320
-rw-r--r--src/server/shared/Database/MySQLConnection.cpp70
-rw-r--r--src/server/shared/Database/MySQLConnection.h1
-rw-r--r--src/server/shared/Database/QueryHolder.cpp15
-rw-r--r--src/server/shared/Database/QueryResult.cpp304
-rwxr-xr-xsrc/server/shared/Database/QueryResult.h197
-rw-r--r--src/server/shared/Database/SQLStorageImpl.h2
-rw-r--r--src/server/worldserver/CommandLine/CliRunnable.cpp4
47 files changed, 970 insertions, 842 deletions
diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp
index 493614bc963..665fe7b6aee 100644
--- a/src/server/authserver/Realms/RealmList.cpp
+++ b/src/server/authserver/Realms/RealmList.cpp
@@ -86,21 +86,22 @@ void RealmList::UpdateRealms(bool init)
{
do
{
- uint32 realmId = result->GetUInt32(0);
- const std::string& name = result->GetString(1);
- const std::string& address = result->GetString(2);
- uint32 port = result->GetUInt32(3);
- uint8 icon = result->GetUInt8(4);
- uint8 color = result->GetUInt8(5);
- uint8 timezone = result->GetUInt8(6);
- uint8 allowedSecurityLevel = result->GetUInt8(7);
- float pop = result->GetFloat(8);
- uint32 build = result->GetUInt32(9);
+ Field* fields = result->Fetch();
+ uint32 realmId = fields[0].GetUInt32();
+ const std::string& name = fields[1].GetString();
+ const std::string& address = fields[2].GetString();
+ uint32 port = fields[3].GetUInt32();
+ uint8 icon = fields[4].GetUInt8();
+ uint8 color = fields[5].GetUInt8();
+ uint8 timezone = fields[6].GetUInt8();
+ uint8 allowedSecurityLevel = fields[7].GetUInt8();
+ float pop = fields[8].GetFloat();
+ uint32 build = fields[9].GetUInt32();
UpdateRealm(realmId, name, address, port, icon, color, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build);
if (init)
- sLog.outString("Added realm \"%s\".", result->GetString(1).c_str());
+ sLog.outString("Added realm \"%s\".", fields[1].GetCString());
}
while (result->NextRow());
}
diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp
index d908f60ef52..529cfc8ff3d 100644
--- a/src/server/authserver/Server/AuthSocket.cpp
+++ b/src/server/authserver/Server/AuthSocket.cpp
@@ -383,13 +383,15 @@ bool AuthSocket::_HandleLogonChallenge()
PreparedQueryResult res2 = LoginDatabase.Query(stmt);
if (res2)
{
+ Field* fields = res2->Fetch();
+
///- If the IP is 'locked', check that the player comes indeed from the correct IP address
bool locked = false;
- if (res2->GetUInt8(2) == 1) // if ip is locked
+ if (fields[2].GetUInt8() == 1) // if ip is locked
{
- sLog.outStaticDebug("[AuthChallenge] Account '%s' is locked to IP - '%s'", _login.c_str(), res2->GetCString(3));
+ sLog.outStaticDebug("[AuthChallenge] Account '%s' is locked to IP - '%s'", _login.c_str(), fields[3].GetCString());
sLog.outStaticDebug("[AuthChallenge] Player address is '%s'", ip_address.c_str());
- if (strcmp(res2->GetCString(3), ip_address.c_str()))
+ if (strcmp(fields[3].GetCString(), ip_address.c_str()))
{
sLog.outStaticDebug("[AuthChallenge] Account IP differs");
pkt << (uint8) WOW_FAIL_SUSPENDED;
@@ -410,11 +412,11 @@ bool AuthSocket::_HandleLogonChallenge()
///- If the account is banned, reject the logon attempt
stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCBANNED);
- stmt->setUInt32(0, res2->GetUInt32(1));
+ stmt->setUInt32(0, fields[1].GetUInt32());
PreparedQueryResult banresult = LoginDatabase.Query(stmt);
if (banresult)
{
- if (banresult->GetUInt64(0) == banresult->GetUInt64(1))
+ if ((*banresult)[0].GetUInt64() == (*banresult)[1].GetUInt64())
{
pkt << (uint8) WOW_FAIL_BANNED;
sLog.outBasic("[AuthChallenge] Banned account %s tries to login!", _login.c_str());
@@ -428,11 +430,11 @@ bool AuthSocket::_HandleLogonChallenge()
else
{
///- Get the password from the account table, upper it, and make the SRP6 calculation
- std::string rI = res2->GetString(0);
+ std::string rI = fields[0].GetString();
///- Don't calculate (v, s) if there are already some in the database
- std::string databaseV = res2->GetString(5);
- std::string databaseS = res2->GetString(6);
+ std::string databaseV = fields[5].GetString();
+ std::string databaseS = fields[6].GetString();
sLog.outDebug("database authentication values: v='%s' s='%s'", databaseV.c_str(), databaseS.c_str());
@@ -486,7 +488,7 @@ bool AuthSocket::_HandleLogonChallenge()
if (securityFlags & 0x04) // Security token input
pkt << uint8(1);
- uint8 secLevel = res2->GetUInt8(4);
+ uint8 secLevel = fields[4].GetUInt8();
_accountSecurityLevel = secLevel <= SEC_ADMINISTRATOR ? AccountTypes(secLevel) : SEC_ADMINISTRATOR;
_localizationName.resize(4);
@@ -658,6 +660,7 @@ bool AuthSocket::_HandleLogonProof()
{
char data[4]= { AUTH_LOGON_PROOF, WOW_FAIL_UNKNOWN_ACCOUNT, 3, 0};
socket().send(data, sizeof(data));
+
sLog.outBasic("[AuthChallenge] account %s tried to login with wrong password!",_login.c_str ());
uint32 MaxWrongPassCount = sConfig.GetIntDefault("WrongPass.MaxCount", 0);
@@ -673,7 +676,7 @@ bool AuthSocket::_HandleLogonProof()
if (PreparedQueryResult loginfail = LoginDatabase.Query(stmt))
{
- uint32 failed_logins = loginfail->GetUInt32(1);
+ uint32 failed_logins = (*loginfail)[1].GetUInt32();
if (failed_logins >= MaxWrongPassCount)
{
@@ -682,7 +685,7 @@ bool AuthSocket::_HandleLogonProof()
if (WrongPassBanType)
{
- uint32 acc_id = loginfail->GetUInt32(0);
+ uint32 acc_id = (*loginfail)[0].GetUInt32();
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_ACCAUTOBANNED);
stmt->setUInt32(0, acc_id);
stmt->setUInt32(1, WrongPassBanTime);
@@ -753,7 +756,7 @@ bool AuthSocket::_HandleReconnectChallenge()
return false;
}
- K.SetHexStr (result->GetCString(0));
+ K.SetHexStr ((*result)[0].GetCString());
///- Sending response
ByteBuffer pkt;
@@ -831,7 +834,8 @@ bool AuthSocket::_HandleRealmList()
return false;
}
- uint32 id = result->GetUInt32(0);
+ Field* fields = result->Fetch();
+ uint32 id = fields[0].GetUInt32();
///- Update realm list if need
sRealmList->UpdateIfNeed();
@@ -862,7 +866,7 @@ bool AuthSocket::_HandleRealmList()
stmt->setUInt32(1, id);
result = LoginDatabase.Query(stmt);
if (result)
- AmountOfCharacters = result->GetUInt8(0);
+ AmountOfCharacters = (*result)[0].GetUInt8();
else
AmountOfCharacters = 0;
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index e74349deb43..3800cf91abf 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -183,7 +183,7 @@ bool AccountMgr::GetName(uint32 acc_id, std::string &name)
QueryResult result = LoginDatabase.PQuery("SELECT username FROM account WHERE id = '%u'", acc_id);
if (result)
{
- name = (*result)[0].GetCppString();
+ name = (*result)[0].GetString();
return true;
}
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 1bd69e7333c..559b5e1797e 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -559,27 +559,30 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ
{
if (achievementResult)
{
+ Field* fields = achievementResult->Fetch();
do
{
- uint32 achievement_id = achievementResult->GetUInt32(0);
+ uint32 achievement_id = fields[0].GetUInt32();
// don't must happen: cleanup at server startup in sAchievementMgr.LoadCompletedAchievements()
if (!sAchievementStore.LookupEntry(achievement_id))
continue;
CompletedAchievementData& ca = m_completedAchievements[achievement_id];
- ca.date = time_t(achievementResult->GetUInt64(1));
+ ca.date = time_t(fields[1].GetUInt64());
ca.changed = false;
- } while (achievementResult->NextRow());
+ }
+ while (achievementResult->NextRow());
}
if (criteriaResult)
{
+ Field* fields = criteriaResult->Fetch();
do
{
- uint32 id = criteriaResult->GetUInt32(0);
- uint32 counter = criteriaResult->GetUInt32(1);
- time_t date = time_t(criteriaResult->GetUInt64(2));
+ uint32 id = fields[0].GetUInt32();
+ uint32 counter = fields[1].GetUInt32();
+ time_t date = time_t(fields[2].GetUInt64());
AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(id);
if (!criteria)
@@ -597,9 +600,9 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ
progress.counter = counter;
progress.date = date;
progress.changed = false;
- } while (criteriaResult->NextRow());
+ }
+ while (criteriaResult->NextRow());
}
-
}
void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
@@ -2129,7 +2132,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData()
}
uint32 dataType = fields[1].GetUInt32();
- const char* scriptName = fields[4].GetString();
+ const char* scriptName = fields[4].GetCString();
uint32 scriptId = 0;
if (strcmp(scriptName, "")) // not empty
{
@@ -2312,8 +2315,8 @@ void AchievementGlobalMgr::LoadRewards()
reward.titleId[1] = fields[2].GetUInt32();
reward.itemId = fields[3].GetUInt32();
reward.sender = fields[4].GetUInt32();
- reward.subject = fields[5].GetCppString();
- reward.text = fields[6].GetCppString();
+ reward.subject = fields[5].GetString();
+ reward.text = fields[6].GetString();
// must be title or mail at least
if (!reward.titleId[0] && !reward.titleId[1] && !reward.sender)
@@ -2422,10 +2425,10 @@ void AchievementGlobalMgr::LoadRewardLocales()
for (int i = 1; i < MAX_LOCALE; ++i)
{
LocaleConstant locale = (LocaleConstant) i;
- std::string str = fields[1 + 2 * (i - 1)].GetCppString();
+ std::string str = fields[1 + 2 * (i - 1)].GetString();
sObjectMgr.AddLocaleString(str, locale, data.subject);
- str = fields[1 + 2 * (i - 1) + 1].GetCppString();
+ str = fields[1 + 2 * (i - 1) + 1].GetString();
sObjectMgr.AddLocaleString(str, locale, data.text);
}
} while (result->NextRow());
diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp
index 3a4b0e062b0..478e3d9307b 100644
--- a/src/server/game/Addons/AddonMgr.cpp
+++ b/src/server/game/Addons/AddonMgr.cpp
@@ -52,7 +52,7 @@ void AddonMgr::LoadFromDB()
bar.step();
count++;
- std::string name = fields[0].GetCppString();
+ std::string name = fields[0].GetString();
uint32 crc = fields[1].GetUInt32();
SavedAddon addon(name, crc);
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 5c027e7b00b..28ceecf4684 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -324,9 +324,11 @@ void AuctionHouseMgr::LoadAuctionItems()
do
{
bar.step();
+
+ Field* fields = result->Fetch();
- uint32 item_guid = result->GetUInt32(11);
- uint32 item_template = result->GetUInt32(12);
+ uint32 item_guid = fields[11].GetUInt32();
+ uint32 item_template = fields[12].GetUInt32();
ItemPrototype const *proto = sObjectMgr.GetItemPrototype(item_template);
@@ -346,7 +348,8 @@ void AuctionHouseMgr::LoadAuctionItems()
AddAItem(item);
++count;
- } while (result->NextRow());
+ }
+ while (result->NextRow());
sLog.outString();
sLog.outString(">> Loaded %u auction items", count);
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index c1d0590eedf..3e90e3fa01a 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -128,7 +128,7 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid)
if (!result)
return false;
- plName = (*result)[0].GetCppString();
+ plName = (*result)[0].GetString();
plClass = (*result)[1].GetUInt8();
// check if player already in arenateam of that size
@@ -186,7 +186,7 @@ bool ArenaTeam::LoadArenaTeamFromDB(QueryResult arenaTeamDataResult)
Field *fields = arenaTeamDataResult->Fetch();
m_TeamId = fields[0].GetUInt32();
- m_Name = fields[1].GetCppString();
+ m_Name = fields[1].GetString();
m_CaptainGuid = MAKE_NEW_GUID(fields[2].GetUInt32(), 0, HIGHGUID_PLAYER);
m_Type = fields[3].GetUInt32();
m_BackgroundColor = fields[4].GetUInt32();
@@ -251,7 +251,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult arenaTeamMembersResult)
newmember.wins_week = fields[3].GetUInt32();
newmember.games_season = fields[4].GetUInt32();
newmember.wins_season = fields[5].GetUInt32();
- newmember.name = fields[6].GetCppString();
+ newmember.name = fields[6].GetString();
newmember.Class = fields[7].GetUInt8();
newmember.personal_rating = personalrating;
newmember.matchmaker_rating = matchmakerrating;
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 899ef6074b7..868c6b80018 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -774,7 +774,7 @@ void BattlegroundMgr::CreateInitialBattlegrounds()
}
selectionWeight = fields[9].GetUInt8();
- scriptId = sObjectMgr.GetScriptId(fields[10].GetString());
+ scriptId = sObjectMgr.GetScriptId(fields[10].GetCString());
//sLog.outDetail("Creating battleground %s, %u-%u", bl->name[sWorld.GetDBClang()], MinLvl, MaxLvl);
if (!CreateBattleground(bgTypeID, IsArena, MinPlayersPerTeam, MaxPlayersPerTeam, MinLvl, MaxLvl, bl->name[sWorld.GetDefaultDbcLocale()], bl->mapid[0], AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3], scriptId))
continue;
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index ccb797e6491..2ec6a040b91 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -62,7 +62,7 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team)
m_moderate = fields[1].GetBool();
m_public = fields[2].GetBool();
m_password = fields[3].GetString();
- const char* db_BannedList = fields[4].GetString();
+ const char* db_BannedList = fields[4].GetCString();
m_IsSaved = true;
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index fd855fc82e1..a0175b43533 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -814,9 +814,9 @@ ChatCommand * ChatHandler::getCommandTable()
do
{
Field *fields = result->Fetch();
- std::string name = fields[0].GetCppString();
+ std::string name = fields[0].GetString();
- SetDataForCommandInTable(commandTable, name.c_str(), fields[1].GetUInt16(), fields[2].GetCppString(), name);
+ SetDataForCommandInTable(commandTable, name.c_str(), fields[1].GetUInt16(), fields[2].GetString(), name);
} while (result->NextRow());
}
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index 4c58d7c4775..1916b77bb88 100644
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -2210,17 +2210,17 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
if (result)
{
Field* fields = result->Fetch();
- username = fields[0].GetCppString();
+ username = fields[0].GetString();
security = fields[1].GetUInt32();
- email = fields[2].GetCppString();
+ email = fields[2].GetString();
if (email.empty())
email = "-";
if (!m_session || m_session->GetSecurity() >= AccountTypes(security))
{
- last_ip = fields[3].GetCppString();
- last_login = fields[4].GetCppString();
+ last_ip = fields[3].GetString();
+ last_login = fields[4].GetString();
}
else
{
@@ -2528,7 +2528,7 @@ bool ChatHandler::HandleWpEventCommand(const char* args)
a4 = fields[2].GetUInt32();
a5 = fields[3].GetUInt32();
a6 = fields[4].GetUInt32();
- a7 = fields[5].GetString();
+ a7 = fields[5].GetCString();
a8 = fields[6].GetFloat();
a9 = fields[7].GetFloat();
a10 = fields[8].GetFloat();
@@ -3856,7 +3856,7 @@ bool ChatHandler::LookupPlayerSearchCommand(QueryResult result, int32 limit)
Field* fields = result->Fetch();
uint32 acc_id = fields[0].GetUInt32();
- std::string acc_name = fields[1].GetCppString();
+ std::string acc_name = fields[1].GetString();
QueryResult chars = CharacterDatabase.PQuery("SELECT guid,name FROM characters WHERE account = '%u'", acc_id);
if (chars)
@@ -3870,7 +3870,7 @@ bool ChatHandler::LookupPlayerSearchCommand(QueryResult result, int32 limit)
{
Field* charfields = chars->Fetch();
guid = charfields[0].GetUInt64();
- name = charfields[1].GetCppString();
+ name = charfields[1].GetString();
PSendSysMessage(LANG_LOOKUP_PLAYER_CHARACTER,name.c_str(),guid);
++i;
diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp
index 01f696f9b3b..7be52c0b9ff 100644
--- a/src/server/game/Chat/Commands/Level3.cpp
+++ b/src/server/game/Chat/Commands/Level3.cpp
@@ -324,21 +324,21 @@ bool ChatHandler::HandleReloadCreatureTemplateCommand(const char* args)
const_cast<CreatureInfo*>(cInfo)->Modelid3 = fields[7].GetUInt32();
const_cast<CreatureInfo*>(cInfo)->Modelid4 = fields[8].GetUInt32();
size_t len = 0;
- if (const char* temp = fields[9].GetString())
+ if (const char* temp = fields[9].GetCString())
{
delete[] cInfo->Name;
len = strlen(temp)+1;
const_cast<CreatureInfo*>(cInfo)->Name = new char[len];
strncpy(cInfo->Name, temp, len);
}
- if (const char* temp = fields[10].GetString())
+ if (const char* temp = fields[10].GetCString())
{
delete[] cInfo->SubName;
len = strlen(temp)+1;
const_cast<CreatureInfo*>(cInfo)->SubName = new char[len];
strncpy(cInfo->SubName, temp, len);
}
- if (const char* temp = fields[11].GetString())
+ if (const char* temp = fields[11].GetCString())
{
delete[] cInfo->IconName;
len = strlen(temp)+1;
@@ -397,7 +397,7 @@ bool ChatHandler::HandleReloadCreatureTemplateCommand(const char* args)
const_cast<CreatureInfo*>(cInfo)->VehicleId = fields[61].GetUInt32();
const_cast<CreatureInfo*>(cInfo)->mingold = fields[62].GetUInt32();
const_cast<CreatureInfo*>(cInfo)->maxgold = fields[63].GetUInt32();
- if (const char* temp = fields[64].GetString())
+ if (const char* temp = fields[64].GetCString())
{
delete[] cInfo->AIName;
len = strlen(temp)+1;
@@ -421,7 +421,7 @@ bool ChatHandler::HandleReloadCreatureTemplateCommand(const char* args)
const_cast<CreatureInfo*>(cInfo)->equipmentId = fields[79].GetUInt32();
const_cast<CreatureInfo*>(cInfo)->MechanicImmuneMask = fields[80].GetUInt32();
const_cast<CreatureInfo*>(cInfo)->flags_extra = fields[81].GetUInt32();
- const_cast<CreatureInfo*>(cInfo)->ScriptID = sObjectMgr.GetScriptId(fields[82].GetString());
+ const_cast<CreatureInfo*>(cInfo)->ScriptID = sObjectMgr.GetScriptId(fields[82].GetCString());
sObjectMgr.CheckCreatureTemplate(cInfo);
@@ -2649,7 +2649,7 @@ bool ChatHandler::HandleListItemCommand(const char *args)
uint32 item_slot = fields[2].GetUInt32();
uint32 owner_guid = fields[3].GetUInt32();
uint32 owner_acc = fields[4].GetUInt32();
- std::string owner_name = fields[5].GetCppString();
+ std::string owner_name = fields[5].GetString();
char const* item_pos = 0;
if (Player::IsEquipmentPos(item_bag,item_slot))
@@ -2700,9 +2700,9 @@ bool ChatHandler::HandleListItemCommand(const char *args)
uint32 item_s = fields[1].GetUInt32();
uint32 item_r = fields[2].GetUInt32();
uint32 item_s_acc = fields[3].GetUInt32();
- std::string item_s_name = fields[4].GetCppString();
+ std::string item_s_name = fields[4].GetString();
uint32 item_r_acc = fields[5].GetUInt32();
- std::string item_r_name = fields[6].GetCppString();
+ std::string item_r_name = fields[6].GetString();
char const* item_pos = "[in mail]";
@@ -2743,7 +2743,7 @@ bool ChatHandler::HandleListItemCommand(const char *args)
uint32 item_guid = fields[0].GetUInt32();
uint32 owner = fields[1].GetUInt32();
uint32 owner_acc = fields[2].GetUInt32();
- std::string owner_name = fields[3].GetCppString();
+ std::string owner_name = fields[3].GetString();
char const* item_pos = "[in auction]";
@@ -2770,7 +2770,7 @@ bool ChatHandler::HandleListItemCommand(const char *args)
Field *fields = result->Fetch();
uint32 item_guid = fields[0].GetUInt32();
uint32 guild_guid = fields[1].GetUInt32();
- std::string guild_name = fields[2].GetCppString();
+ std::string guild_name = fields[2].GetString();
char const* item_pos = "[in guild bank]";
@@ -5895,7 +5895,7 @@ bool ChatHandler::HandleBanInfoCharacterCommand(const char *args)
return false;
}
- target_guid = resultCharacter->GetUInt32(0);
+ target_guid = (*resultCharacter)[0].GetUInt32();
}
else
target_guid = target->GetGUIDLow();
@@ -5909,15 +5909,17 @@ bool ChatHandler::HandleBanInfoCharacterCommand(const char *args)
PSendSysMessage(LANG_BANINFO_BANHISTORY, name.c_str());
do
{
- time_t unbandate = time_t(result->GetUInt64(3));
+ Field* fields = result->Fetch();
+ time_t unbandate = time_t(fields[3].GetUInt64());
bool active = false;
- if (result->GetUInt8(2) && (!result->GetUInt64(1) || unbandate >= time(NULL)))
+ if (fields[2].GetUInt8() && (!fields[1].GetUInt64() || unbandate >= time(NULL)))
active = true;
- bool permanent = (result->GetUInt64(1) == uint64(0));
- std::string bantime = permanent ? GetTrinityString(LANG_BANINFO_INFINITE) : secsToTimeString(result->GetUInt64(1), true);
+ bool permanent = (fields[1].GetUInt64() == uint64(0));
+ std::string bantime = permanent ? GetTrinityString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].GetUInt64(), true);
PSendSysMessage(LANG_BANINFO_HISTORYENTRY,
- result->GetCString(0), bantime.c_str(), active ? GetTrinityString(LANG_BANINFO_YES) : GetTrinityString(LANG_BANINFO_NO), result->GetCString(4), result->GetCString(5));
- } while (result->NextRow());
+ fields[0].GetCString(), bantime.c_str(), active ? GetTrinityString(LANG_BANINFO_YES) : GetTrinityString(LANG_BANINFO_NO), fields[4].GetCString(), fields[5].GetCString());
+ }
+ while (result->NextRow());
return true;
}
@@ -6006,12 +6008,14 @@ bool ChatHandler::HandleBanListCharacterCommand(const char *args)
{
do
{
+ Field* fields = result->Fetch();
PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_GET_BANNED_NAME);
- stmt2->setUInt32(0, result->GetUInt32(0));
+ stmt2->setUInt32(0, fields[0].GetUInt32());
PreparedQueryResult banresult = CharacterDatabase.Query(stmt2);
if (banresult)
- PSendSysMessage("%s", banresult->GetCString(0));
- } while (result->NextRow());
+ PSendSysMessage("%s", (*banresult)[0].GetCString());
+ }
+ while (result->NextRow());
}
// Console wide output
else
@@ -6023,38 +6027,41 @@ bool ChatHandler::HandleBanListCharacterCommand(const char *args)
{
SendSysMessage("-------------------------------------------------------------------------------");
- std::string char_name;
+ Field* fields = result->Fetch();
- char_name = result->GetString(1);
+ std::string char_name = fields[1].GetString();
PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_GET_BANINFO_LIST);
- stmt2->setUInt32(0, result->GetUInt32(0));
+ stmt2->setUInt32(0, fields[0].GetUInt32());
PreparedQueryResult banInfo = CharacterDatabase.Query(stmt2);
if (banInfo)
{
+ Field* banFields = banInfo->Fetch();
do
{
- time_t t_ban = banInfo->GetUInt64(0);
+ time_t t_ban = banFields[0].GetUInt64();
tm* aTm_ban = localtime(&t_ban);
- if (banInfo->GetUInt64(0) == banInfo->GetUInt64(1))
+ if (banFields[0].GetUInt64() == banFields[1].GetUInt64())
{
PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
char_name.c_str(), aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
- banInfo->GetCString(2), banInfo->GetCString(3));
+ banFields[2].GetCString(), banFields[3].GetCString());
}
else
{
- time_t t_unban = banInfo->GetUInt64(1);
+ time_t t_unban = banFields[1].GetUInt64();
tm* aTm_unban = localtime(&t_unban);
PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
char_name.c_str(), aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min,
- banInfo->GetCString(2), banInfo->GetCString(3));
+ banFields[2].GetCString(), banFields[3].GetCString());
}
- } while (banInfo->NextRow());
+ }
+ while (banInfo->NextRow());
}
- } while (result->NextRow());
+ }
+ while (result->NextRow());
SendSysMessage(" =============================================================================== ");
}
@@ -6128,7 +6135,7 @@ bool ChatHandler::HandleBanListHelper(QueryResult result)
// "account" case, name can be get in same query
if (result->GetFieldCount() > 1)
- account_name = fields[1].GetCppString();
+ account_name = fields[1].GetString();
// "character" case, name need extract from another DB
else
sAccountMgr.GetName (account_id,account_name);
@@ -7537,7 +7544,7 @@ bool ChatHandler::HandleListFreezeCommand(const char * /*args*/)
do
{
Field *fields = result->Fetch();
- std::string fplayers = fields[0].GetCppString();
+ std::string fplayers = fields[0].GetString();
PSendSysMessage(LANG_COMMAND_FROZEN_PLAYERS,fplayers.c_str());
} while (result->NextRow());
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index f212789098f..41fe265161d 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -353,7 +353,7 @@ void ConditionMgr::LoadConditions(bool isReload)
cond->mConditionValue2 = fields[6].GetUInt32();
cond->mConditionValue3 = fields[7].GetUInt32();
cond->ErrorTextd = fields[8].GetUInt32();
- cond->mScriptId = sObjectMgr.GetScriptId(fields[9].GetString());
+ cond->mScriptId = sObjectMgr.GetScriptId(fields[9].GetCString());
if (iConditionTypeOrReference >= 0)
cond->mConditionType = ConditionType(iConditionTypeOrReference);
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index dff6caf5d94..4b8bf87b4cc 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -172,7 +172,7 @@ bool Corpse::LoadFromDB(uint32 guid, Field *fields)
Object::_Create(guid, 0, HIGHGUID_CORPSE);
SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32());
- _LoadIntoDataField(fields[6].GetString(), CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END);
+ _LoadIntoDataField(fields[6].GetCString(), CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END);
SetUInt32Value(CORPSE_FIELD_BYTES_1, fields[7].GetUInt32());
SetUInt32Value(CORPSE_FIELD_BYTES_2, fields[8].GetUInt32());
SetUInt32Value(CORPSE_FIELD_GUILD, fields[9].GetUInt32());
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index ccd06764bb1..e34c8dfeeeb 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -408,16 +408,18 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, PreparedQueryResult result
return false;
}
+ Field* fields = result->Fetch();
+
// set owner (not if item is only loaded for gbank/auction/mail
if (owner_guid != 0)
SetOwnerGUID(owner_guid);
bool need_save = false; // need explicit save data at load fixes
- SetUInt64Value(ITEM_FIELD_CREATOR, MAKE_NEW_GUID(result->GetUInt32(0), 0, HIGHGUID_PLAYER));
- SetUInt64Value(ITEM_FIELD_GIFTCREATOR, MAKE_NEW_GUID(result->GetUInt32(1), 0, HIGHGUID_PLAYER));
- SetCount(result->GetUInt32(2));
+ SetUInt64Value(ITEM_FIELD_CREATOR, MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER));
+ SetUInt64Value(ITEM_FIELD_GIFTCREATOR, MAKE_NEW_GUID(fields[1].GetUInt32(), 0, HIGHGUID_PLAYER));
+ SetCount(fields[2].GetUInt32());
- uint32 duration = result->GetUInt32(3);
+ uint32 duration = fields[3].GetUInt32();
SetUInt32Value(ITEM_FIELD_DURATION, duration);
// update duration if need, and remove if not need
if ((proto->Duration == 0) != (duration == 0))
@@ -426,12 +428,12 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, PreparedQueryResult result
need_save = true;
}
- Tokens tokens = StrSplit(result->GetString(4), " ");
+ Tokens tokens = StrSplit(fields[4].GetString(), " ");
if (tokens.size() == MAX_ITEM_PROTO_SPELLS)
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
SetSpellCharges(i, atoi(tokens[i].c_str()));
- SetUInt32Value(ITEM_FIELD_FLAGS, result->GetUInt32(5));
+ SetUInt32Value(ITEM_FIELD_FLAGS, fields[5].GetUInt32());
// Remove bind flag for items vs NO_BIND set
if (IsSoulBound() && proto->Bonding == NO_BIND)
{
@@ -439,13 +441,13 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, PreparedQueryResult result
need_save = true;
}
- _LoadIntoDataField(result->GetString(6).c_str(), ITEM_FIELD_ENCHANTMENT_1_1, MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET);
- SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, result->GetInt32(7));
+ _LoadIntoDataField(fields[6].GetCString(), ITEM_FIELD_ENCHANTMENT_1_1, MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET);
+ SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, fields[7].GetInt32());
// recalculate suffix factor
if (GetItemRandomPropertyId() < 0)
UpdateItemSuffixFactor();
- uint32 durability = result->GetUInt32(8);
+ uint32 durability = fields[8].GetUInt32();
SetUInt32Value(ITEM_FIELD_DURABILITY, durability);
// update max durability (and durability) if need
SetUInt32Value(ITEM_FIELD_MAXDURABILITY, proto->MaxDurability);
@@ -455,8 +457,8 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, PreparedQueryResult result
need_save = true;
}
- SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, result->GetUInt32(9));
- SetText(result->GetString(10));
+ SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, fields[9].GetUInt32());
+ SetText(fields[10].GetString());
if (need_save) // normal item changed state set not work at loading
{
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 277e7e04956..a85147ce4c5 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -299,7 +299,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
// load action bar, if data broken will fill later by default spells.
if (!is_temporary_summoned)
{
- m_charmInfo->LoadPetActionBar(fields[13].GetCppString());
+ m_charmInfo->LoadPetActionBar(fields[13].GetString());
_LoadSpells();
InitTalentForLevel(); // re-init to check talent count
@@ -331,7 +331,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
Field *fields2 = result->Fetch();
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
{
- m_declinedname->name[i] = fields2[i].GetCppString();
+ m_declinedname->name[i] = fields2[i].GetString();
}
}
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 37e55170d03..1e2cdd86295 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1652,7 +1652,7 @@ bool Player::BuildEnumData(QueryResult result, WorldPacket * p_data)
char_flags |= CHARACTER_FLAG_LOCKED_BY_BILLING;
if (sWorld.getBoolConfig(CONFIG_DECLINED_NAMES_USED))
{
- if (!fields[21].GetCppString().empty())
+ if (!fields[21].GetString().empty())
char_flags |= CHARACTER_FLAG_DECLINED;
}
else
@@ -1697,7 +1697,7 @@ bool Player::BuildEnumData(QueryResult result, WorldPacket * p_data)
*p_data << uint32(petFamily);
}
- Tokens data = StrSplit(fields[19].GetCppString(), " ");
+ Tokens data = StrSplit(fields[19].GetString(), " ");
for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; ++slot)
{
uint32 visualbase = slot * 2;
@@ -3940,13 +3940,14 @@ void Player::_LoadSpellCooldowns(PreparedQueryResult result)
do
{
- uint32 spell_id = result->GetUInt32(0);
- uint32 item_id = result->GetUInt32(1);
- time_t db_time = (time_t)result->GetUInt64(2);
+ Field* fields = result->Fetch();
+ uint32 spell_id = fields[0].GetUInt32();
+ uint32 item_id = fields[1].GetUInt32();
+ time_t db_time = (time_t)fields[2].GetUInt64();
if (!sSpellStore.LookupEntry(spell_id))
{
- sLog.outError("Player %u has unknown spell %u in `character_spell_cooldown`, skipping.",GetGUIDLow(),spell_id);
+ sLog.outError("Player %u has unknown spell %u in `character_spell_cooldown`, skipping.", GetGUIDLow(), spell_id);
continue;
}
@@ -4469,8 +4470,8 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
uint16 mailType = fields[1].GetUInt16();
uint16 mailTemplateId= fields[2].GetUInt16();
uint32 sender = fields[3].GetUInt32();
- std::string subject = fields[4].GetCppString();
- std::string body = fields[5].GetCppString();
+ std::string subject = fields[4].GetString();
+ std::string body = fields[5].GetString();
uint32 money = fields[6].GetUInt32();
bool has_items = fields[7].GetBool();
@@ -4500,8 +4501,8 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
{
do
{
- uint32 item_guidlow = resultItems->GetUInt32(11);
- uint32 item_template = resultItems->GetUInt32(12);
+ uint32 item_guidlow = (*resultItems)[11].GetUInt32();
+ uint32 item_template = (*resultItems)[12].GetUInt32();
ItemPrototype const* itemProto = sObjectMgr.GetItemPrototype(item_template);
if (!itemProto)
@@ -15768,7 +15769,7 @@ void Player::_LoadDeclinedNames(PreparedQueryResult result)
delete m_declinedname;
m_declinedname = new DeclinedName;
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
- m_declinedname->name[i] = result->GetString(i);
+ m_declinedname->name[i] = (*result)[i].GetString();
}
void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
@@ -15780,10 +15781,12 @@ void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
do
{
- uint32 arenateamid = result->GetUInt32(0);
- uint32 played_week = result->GetUInt32(1);
- uint32 played_season = result->GetUInt32(2);
- uint32 wons_season = result->GetUInt32(3);
+ Field* fields = result->Fetch();
+
+ uint32 arenateamid = fields[0].GetUInt32();
+ uint32 played_week = fields[1].GetUInt32();
+ uint32 played_season = fields[2].GetUInt32();
+ uint32 wons_season = fields[3].GetUInt32();
ArenaTeam* aTeam = sObjectMgr.GetArenaTeamById(arenateamid);
if (!aTeam)
@@ -15800,7 +15803,8 @@ void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_WEEK, played_week);
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_SEASON, played_season);
SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_WINS_SEASON, wons_season);
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
void Player::_LoadArenaStatsInfo(PreparedQueryResult result)
@@ -15818,9 +15822,11 @@ void Player::_LoadArenaStatsInfo(PreparedQueryResult result)
do
{
+ Field* fields = result->Fetch();
+
uint32 personalrating = 0;
uint32 matchmakerrating = 1500;
- if (result->GetUInt8(0) > slot)
+ if (fields[0].GetUInt8() > slot)
{
CharacterDatabase.PExecute("INSERT INTO character_arena_stats (guid, slot, personal_rating, matchmaker_rating) VALUES (%u, %u, %u, %u)", GetGUIDLow(), slot, personalrating, matchmakerrating);
SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, personalrating);
@@ -15828,11 +15834,12 @@ void Player::_LoadArenaStatsInfo(PreparedQueryResult result)
continue;
}
- personalrating = result->GetUInt32(1);
- matchmakerrating = result->GetUInt32(2);
+ personalrating = fields[1].GetUInt32();
+ matchmakerrating = fields[2].GetUInt32();
SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, personalrating);
slot++;
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
void Player::_LoadEquipmentSets(PreparedQueryResult result)
@@ -15844,16 +15851,17 @@ void Player::_LoadEquipmentSets(PreparedQueryResult result)
uint32 count = 0;
do
{
+ Field* fields = result->Fetch();
EquipmentSet eqSet;
- eqSet.Guid = result->GetUInt64(0);
- uint32 index = result->GetUInt32(1);
- eqSet.Name = result->GetString(2);
- eqSet.IconName = result->GetString(3);
+ eqSet.Guid = fields[0].GetUInt64();
+ uint32 index = fields[1].GetUInt32();
+ eqSet.Name = fields[2].GetString();
+ eqSet.IconName = fields[3].GetString();
eqSet.state = EQUIPMENT_SET_UNCHANGED;
for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
- eqSet.Items[i] = result->GetUInt32(4+i);
+ eqSet.Items[i] = fields[4+i].GetUInt32();
m_EquipmentSets[index] = eqSet;
@@ -15861,7 +15869,8 @@ void Player::_LoadEquipmentSets(PreparedQueryResult result)
if (count >= MAX_EQUIPMENT_SET_INDEX) // client limit
break;
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
void Player::_LoadBGData(PreparedQueryResult result)
@@ -15869,18 +15878,19 @@ void Player::_LoadBGData(PreparedQueryResult result)
if (!result)
return;
+ Field* fields = result->Fetch();
// Expecting only one row
/* bgInstanceID, bgTeam, x, y, z, o, map, taxi[0], taxi[1], mountSpell */
- m_bgData.bgInstanceID = result->GetUInt32(0);
- m_bgData.bgTeam = result->GetUInt32(1);
- m_bgData.joinPos = WorldLocation(result->GetUInt32(6), // Map
- result->GetFloat(2), // X
- result->GetFloat(3), // Y
- result->GetFloat(4), // Z
- result->GetFloat(5)); // Orientation
- m_bgData.taxiPath[0] = result->GetUInt32(7);
- m_bgData.taxiPath[1] = result->GetUInt32(8);
- m_bgData.mountSpell = result->GetUInt32(9);
+ m_bgData.bgInstanceID = fields[0].GetUInt32();
+ m_bgData.bgTeam = fields[1].GetUInt32();
+ m_bgData.joinPos = WorldLocation(fields[6].GetUInt32(), // Map
+ fields[2].GetFloat(), // X
+ fields[3].GetFloat(), // Y
+ fields[4].GetFloat(), // Z
+ fields[5].GetFloat()); // Orientation
+ m_bgData.taxiPath[0] = fields[7].GetUInt32();
+ m_bgData.taxiPath[1] = fields[8].GetUInt32();
+ m_bgData.mountSpell = fields[9].GetUInt32();
}
bool Player::LoadPositionFromDB(uint32& mapid, float& x,float& y,float& z,float& o, bool& in_flight, uint64 guid)
@@ -15896,7 +15906,7 @@ bool Player::LoadPositionFromDB(uint32& mapid, float& x,float& y,float& z,float&
z = fields[2].GetFloat();
o = fields[3].GetFloat();
mapid = fields[4].GetUInt32();
- in_flight = !fields[5].GetCppString().empty();
+ in_flight = !fields[5].GetString().empty();
return true;
}
@@ -15950,8 +15960,10 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
sLog.outError("Player (GUID: %u) not found in table `characters`, can't load. ",guid);
return false;
}
+
+ Field* fields = result->Fetch();
- uint32 dbAccountId = result->GetUInt32(1);
+ uint32 dbAccountId = fields[1].GetUInt32();
// check if the character's account in the db and the logged in account match.
// player should be able to load/delete character only with correct account!
@@ -15969,7 +15981,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
Object::_Create(guid, 0, HIGHGUID_PLAYER);
- m_name = result->GetString(2);
+ m_name = fields[2].GetString();
// check name limitations
if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS ||
@@ -15984,38 +15996,38 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
// overwrite some data fields
uint32 bytes0 = 0;
- bytes0 |= result->GetUInt8(3); // race
- bytes0 |= result->GetUInt8(4) << 8; // class
- bytes0 |= result->GetUInt8(5) << 16; // gender
+ bytes0 |= fields[3].GetUInt8(); // race
+ bytes0 |= fields[4].GetUInt8() << 8; // class
+ bytes0 |= fields[5].GetUInt8() << 16; // gender
SetUInt32Value(UNIT_FIELD_BYTES_0, bytes0);
- SetUInt32Value(UNIT_FIELD_LEVEL, result->GetUInt8(6));
- SetUInt32Value(PLAYER_XP, result->GetUInt32(7));
+ SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8());
+ SetUInt32Value(PLAYER_XP, fields[7].GetUInt32());
- _LoadIntoDataField(result->GetString(61).c_str(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE);
- _LoadIntoDataField(result->GetString(64).c_str(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE*2);
+ _LoadIntoDataField(fields[61].GetCString(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE);
+ _LoadIntoDataField(fields[64].GetCString(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE*2);
SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, DEFAULT_WORLD_OBJECT_SIZE);
SetFloatValue(UNIT_FIELD_COMBATREACH, 1.5f);
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f);
- uint32 money = result->GetUInt32(8);
+ uint32 money = fields[8].GetUInt32();
if (money > MAX_MONEY_AMOUNT)
money = MAX_MONEY_AMOUNT;
SetMoney(money);
- SetUInt32Value(PLAYER_BYTES, result->GetUInt32(9));
- SetUInt32Value(PLAYER_BYTES_2, result->GetUInt32(10));
- SetUInt32Value(PLAYER_BYTES_3, (result->GetUInt16(49) & 0xFFFE) | result->GetUInt8(5));
- SetUInt32Value(PLAYER_FLAGS, result->GetUInt32(11));
- SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, result->GetUInt32(48));
+ SetUInt32Value(PLAYER_BYTES, fields[9].GetUInt32());
+ SetUInt32Value(PLAYER_BYTES_2, fields[10].GetUInt32());
+ SetUInt32Value(PLAYER_BYTES_3, (fields[49].GetUInt16() & 0xFFFE) | fields[5].GetUInt8());
+ SetUInt32Value(PLAYER_FLAGS, fields[11].GetUInt32());
+ SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[48].GetUInt32());
- SetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES, result->GetUInt64(47));
+ SetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES, fields[47].GetUInt64());
- SetUInt32Value(PLAYER_AMMO_ID, result->GetUInt32(63));
+ SetUInt32Value(PLAYER_AMMO_ID, fields[63].GetUInt32());
// set which actionbars the client has active - DO NOT REMOVE EVER AGAIN (can be changed though, if it does change fieldwise)
- SetByteValue(PLAYER_FIELD_BYTES, 2, result->GetUInt8(65));
+ SetByteValue(PLAYER_FIELD_BYTES, 2, fields[65].GetUInt8());
InitDisplayIds();
@@ -16043,21 +16055,21 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
InitPrimaryProfessions(); // to max set before any spell loaded
// init saved position, and fix it later if problematic
- uint32 transGUID = uint32(result->GetUInt64(30)); // field type is uint64 but lowguid is saved
- Relocate(result->GetFloat(12), result->GetFloat(13), result->GetFloat(14), result->GetFloat(16));
- uint32 mapId = result->GetUInt32(15);
- uint32 instanceId = result->GetUInt8(58);
+ uint32 transGUID = uint32(fields[30].GetUInt64()); // field type is uint64 but lowguid is saved
+ Relocate(fields[12].GetFloat(), fields[13].GetFloat(), fields[14].GetFloat(), fields[16].GetFloat());
+ uint32 mapId = fields[15].GetUInt32();
+ uint32 instanceId = fields[58].GetUInt8();
- uint32 dungeonDiff = result->GetUInt32(38) & 0x0F;
+ uint32 dungeonDiff = fields[38].GetUInt32() & 0x0F;
if (dungeonDiff >= MAX_DUNGEON_DIFFICULTY)
dungeonDiff = DUNGEON_DIFFICULTY_NORMAL;
- uint32 raidDiff = (result->GetUInt8(38) >> 4) & 0x0F;
+ uint32 raidDiff = (fields[38].GetUInt8() >> 4) & 0x0F;
if (raidDiff >= MAX_RAID_DIFFICULTY)
raidDiff = RAID_DIFFICULTY_10MAN_NORMAL;
SetDungeonDifficulty(Difficulty(dungeonDiff)); // may be changed in _LoadGroup
SetRaidDifficulty(Difficulty(raidDiff)); // may be changed in _LoadGroup
- std::string taxi_nodes = result->GetString(37);
+ std::string taxi_nodes = fields[37].GetString();
#define RelocateToHomebind(){ mapId = m_homebindMapId; instanceId = 0; Relocate(m_homebindX, m_homebindY, m_homebindZ); }
@@ -16066,7 +16078,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
_LoadArenaTeamInfo(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADARENAINFO));
_LoadArenaStatsInfo(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADARENASTATS));
- uint32 arena_currency = result->GetUInt32(39);
+ uint32 arena_currency = fields[39].GetUInt32();
if (arena_currency > sWorld.getIntConfig(CONFIG_MAX_ARENA_POINTS))
arena_currency = sWorld.getIntConfig(CONFIG_MAX_ARENA_POINTS);
@@ -16088,12 +16100,12 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
SetArenaTeamInfoField(arena_slot, ArenaTeamInfoType(j), 0);
}
- SetHonorPoints(result->GetUInt32(40));
- SetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION, result->GetUInt32(41));
- SetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION, result->GetUInt32(42));
- SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, result->GetUInt32(43));
- SetUInt16Value(PLAYER_FIELD_KILLS, 0, result->GetUInt16(44));
- SetUInt16Value(PLAYER_FIELD_KILLS, 1, result->GetUInt16(45));
+ SetHonorPoints(fields[40].GetUInt32());
+ SetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION, fields[41].GetUInt32());
+ SetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION, fields[42].GetUInt32());
+ SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, fields[43].GetUInt32());
+ SetUInt16Value(PLAYER_FIELD_KILLS, 0, fields[44].GetUInt16());
+ SetUInt16Value(PLAYER_FIELD_KILLS, 1, fields[45].GetUInt16());
_LoadBoundInstances(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADBOUNDINSTANCES));
_LoadBGData(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADBGDATA));
@@ -16153,7 +16165,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
else if (transGUID)
{
m_movementInfo.t_guid = MAKE_NEW_GUID(transGUID, 0, HIGHGUID_MO_TRANSPORT);
- m_movementInfo.t_pos.Relocate(result->GetFloat(26), result->GetFloat(27), result->GetFloat(28), result->GetFloat(29));
+ m_movementInfo.t_pos.Relocate(fields[26].GetFloat(), fields[27].GetFloat(), fields[28].GetFloat(), fields[29].GetFloat());
if (!Trinity::IsValidMapCoord(
GetPositionX()+m_movementInfo.t_pos.m_positionX,GetPositionY()+m_movementInfo.t_pos.m_positionY,
@@ -16312,7 +16324,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
SaveRecallPosition();
time_t now = time(NULL);
- time_t logoutTime = time_t(result->GetUInt64(22));
+ time_t logoutTime = time_t(fields[22].GetUInt64());
// since last logout (in seconds)
uint32 time_diff = uint32(now - logoutTime); //uint64 is excessive for a time_diff in seconds.. uint32 allows for 136~ year difference.
@@ -16327,12 +16339,12 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
uint16 newDrunkenValue = uint16(soberFactor*(GetUInt32Value(PLAYER_BYTES_3) & 0xFFFE));
SetDrunkValue(newDrunkenValue);
- m_cinematic = result->GetUInt8(18);
- m_Played_time[PLAYED_TIME_TOTAL]= result->GetUInt32(19);
- m_Played_time[PLAYED_TIME_LEVEL]= result->GetUInt32(20);
+ m_cinematic = fields[18].GetUInt8();
+ m_Played_time[PLAYED_TIME_TOTAL]= fields[19].GetUInt32();
+ m_Played_time[PLAYED_TIME_LEVEL]= fields[20].GetUInt32();
- m_resetTalentsCost = result->GetUInt32(24);
- m_resetTalentsTime = time_t(result->GetUInt64(25));
+ m_resetTalentsCost = fields[24].GetUInt32();
+ m_resetTalentsTime = time_t(fields[25].GetUInt64());
// reserve some flags
uint32 old_safe_flags = GetUInt32Value(PLAYER_FLAGS) & (PLAYER_FLAGS_HIDE_CLOAK | PLAYER_FLAGS_HIDE_HELM);
@@ -16340,25 +16352,25 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM))
SetUInt32Value(PLAYER_FLAGS, 0 | old_safe_flags);
- m_taxi.LoadTaxiMask(result->GetString(17).c_str()); // must be before InitTaxiNodesForLevel
+ m_taxi.LoadTaxiMask(fields[17].GetCString()); // must be before InitTaxiNodesForLevel
- uint32 extraflags = result->GetUInt32(31);
+ uint32 extraflags = fields[31].GetUInt32();
- m_stableSlots = result->GetUInt8(32);
+ m_stableSlots = fields[32].GetUInt8();
if (m_stableSlots > MAX_PET_STABLES)
{
sLog.outError("Player can have not more %u stable slots, but have in DB %u",MAX_PET_STABLES,uint32(m_stableSlots));
m_stableSlots = MAX_PET_STABLES;
}
- m_atLoginFlags = result->GetUInt32(33);
+ m_atLoginFlags = fields[33].GetUInt32();
// Honor system
// Update Honor kills data
m_lastHonorUpdateTime = logoutTime;
UpdateHonorFields();
- m_deathExpireTime = (time_t)result->GetUInt64(36);
+ m_deathExpireTime = (time_t)fields[36].GetUInt64();
if (m_deathExpireTime > now+MAX_DEATH_COUNT*DEATH_EXPIRE_STEP)
m_deathExpireTime = now+MAX_DEATH_COUNT*DEATH_EXPIRE_STEP-1;
@@ -16394,7 +16406,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
InitRunes();
// rest bonus can only be calculated after InitStatsForLevel()
- m_rest_bonus = result->GetFloat(21);
+ m_rest_bonus = fields[21].GetFloat();
if (time_diff > 0)
{
@@ -16402,7 +16414,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
float bubble0 = 0.031f;
//speed collect rest bonus in offline, in logout, in tavern, city (section/in hour)
float bubble1 = 0.125f;
- float bubble = result->GetUInt32(23) > 0
+ float bubble = fields[23].GetUInt32() > 0
? bubble1*sWorld.getRate(RATE_REST_OFFLINE_IN_TAVERN_OR_CITY)
: bubble0*sWorld.getRate(RATE_REST_OFFLINE_IN_WILDERNESS);
@@ -16418,8 +16430,8 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
//mails are loaded only when needed ;-) - when player in game click on mailbox.
//_LoadMail();
- m_specsCount = result->GetUInt8(59);
- m_activeSpec = result->GetUInt8(60);
+ m_specsCount = fields[59].GetUInt8();
+ m_activeSpec = fields[60].GetUInt8();
// sanity check
if (m_specsCount > MAX_TALENT_SPECS || m_activeSpec > MAX_TALENT_SPEC || m_specsCount < MIN_TALENT_SPECS)
@@ -16465,7 +16477,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
// check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES
// note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded
- uint32 curTitle = result->GetUInt32(46);
+ uint32 curTitle = fields[46].GetUInt32();
if (curTitle && !HasTitle(curTitle))
curTitle = 0;
@@ -16488,11 +16500,11 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
UpdateAllStats();
// restore remembered power/health values (but not more max values)
- uint32 savedHealth = result->GetUInt32(50);
+ uint32 savedHealth = fields[50].GetUInt32();
SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth);
for (uint8 i = 0; i < MAX_POWERS; ++i)
{
- uint32 savedPower = result->GetUInt32(51+i);
+ uint32 savedPower = fields[51+i].GetUInt32();
SetPower(Powers(i),savedPower > GetMaxPower(Powers(i)) ? GetMaxPower(Powers(i)) : savedPower);
}
@@ -16621,10 +16633,11 @@ void Player::_LoadActions(PreparedQueryResult result)
{
do
{
- uint8 button = result->GetUInt8(0);
- uint32 action = result->GetUInt32(1);
- uint8 type = result->GetUInt8(2);
- uint8 spec = result->GetUInt8(3);
+ Field* fields = result->Fetch();
+ uint8 button = fields[0].GetUInt8();
+ uint32 action = fields[1].GetUInt32();
+ uint8 type = fields[2].GetUInt8();
+ uint8 spec = fields[3].GetUInt8();
if (spec >= MAX_TALENT_SPECS)
continue;
@@ -16638,7 +16651,8 @@ void Player::_LoadActions(PreparedQueryResult result)
// Will deleted in DB at next save (it can create data until save but marked as deleted)
m_actionButtons[spec][button].uState = ACTIONBUTTON_DELETED;
}
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
}
@@ -16652,22 +16666,23 @@ void Player::_LoadAuras(PreparedQueryResult result, uint32 timediff)
{
do
{
+ Field* fields = result->Fetch();
int32 damage[3];
int32 baseDamage[3];
- uint64 caster_guid = result->GetUInt64(0);
- uint32 spellid = result->GetUInt32(1);
- uint8 effmask = result->GetUInt8(2);
- uint8 recalculatemask = result->GetUInt8(3);
- uint8 stackcount = result->GetUInt8(4);
- damage[0] = result->GetInt32(5);
- damage[1] = result->GetInt32(6);
- damage[2] = result->GetInt32(7);
- baseDamage[0] = result->GetInt32(8);
- baseDamage[1] = result->GetInt32(9);
- baseDamage[2] = result->GetInt32(10);
- int32 maxduration = result->GetInt32(11);
- int32 remaintime = result->GetInt32(12);
- uint8 remaincharges = result->GetUInt8(13);
+ uint64 caster_guid = fields[0].GetUInt64();
+ uint32 spellid = fields[1].GetUInt32();
+ uint8 effmask = fields[2].GetUInt8();
+ uint8 recalculatemask = fields[3].GetUInt8();
+ uint8 stackcount = fields[4].GetUInt8();
+ damage[0] = fields[5].GetInt32();
+ damage[1] = fields[6].GetInt32();
+ damage[2] = fields[7].GetInt32();
+ baseDamage[0] = fields[8].GetInt32();
+ baseDamage[1] = fields[9].GetInt32();
+ baseDamage[2] = fields[10].GetInt32();
+ int32 maxduration = fields[11].GetInt32();
+ int32 remaintime = fields[12].GetInt32();
+ uint8 remaincharges = fields[13].GetUInt8();
SpellEntry const* spellproto = sSpellStore.LookupEntry(spellid);
if (!spellproto)
@@ -16777,10 +16792,12 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timediff)
m_itemUpdateQueueBlocked = true;
do
{
- uint32 bag_guid = result->GetUInt32(11);
- uint8 slot = result->GetUInt8(12);
- uint32 item_guid = result->GetUInt32(13);
- uint32 item_id = result->GetUInt32(14);
+ Field* fields = result->Fetch();
+
+ uint32 bag_guid = fields[11].GetUInt32();
+ uint8 slot = fields[12].GetUInt8();
+ uint32 item_guid = fields[13].GetUInt32();
+ uint32 item_id = fields[14].GetUInt32();
ItemPrototype const * proto = sObjectMgr.GetItemPrototype(item_id);
@@ -16852,9 +16869,10 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timediff)
}
else
{
- item->SetRefundRecipient(result2->GetUInt32(0));
- item->SetPaidMoney(result2->GetUInt32(1));
- item->SetPaidExtendedCost(result2->GetUInt32(2));
+ Field* fields2 = result2->Fetch();
+ item->SetRefundRecipient(fields2[0].GetUInt32());
+ item->SetPaidMoney(fields2[1].GetUInt32());
+ item->SetPaidExtendedCost(fields2[2].GetUInt32());
AddRefundReference(item->GetGUIDLow());
}
}
@@ -16871,7 +16889,8 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timediff)
}
else
{
- std::string strGUID = result2->GetString(0);
+ Field* fields2 = result2->Fetch();
+ std::string strGUID = fields[2].GetString();
Tokens GUIDlist = StrSplit(strGUID, " ");
AllowedLooterSet looters;
for (Tokens::iterator itr = GUIDlist.begin(); itr != GUIDlist.end(); ++itr)
@@ -16994,8 +17013,10 @@ void Player::_LoadMailedItems(Mail *mail)
SQLTransaction trans = CharacterDatabase.BeginTransaction();
do
{
- uint32 item_guid_low = result->GetUInt32(11);
- uint32 item_template = result->GetUInt32(12);
+ Field* fields = result->Fetch();
+
+ uint32 item_guid_low = fields[11].GetUInt32();
+ uint32 item_template = fields[12].GetUInt32();
mail->AddItem(item_guid_low, item_template);
@@ -17013,7 +17034,7 @@ void Player::_LoadMailedItems(Mail *mail)
Item *item = NewItemOrBag(proto);
- if (!item->LoadFromDB(item_guid_low, MAKE_NEW_GUID(result->GetUInt32(13), 0, HIGHGUID_PLAYER), result, item_template))
+ if (!item->LoadFromDB(item_guid_low, MAKE_NEW_GUID(fields[13].GetUInt32(), 0, HIGHGUID_PLAYER), result, item_template))
{
sLog.outError("Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, item_guid_low);
CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", item_guid_low);
@@ -17023,7 +17044,8 @@ void Player::_LoadMailedItems(Mail *mail)
}
AddMItem(item);
- } while (result->NextRow());
+ }
+ while (result->NextRow());
CharacterDatabase.CommitTransaction(trans);
}
@@ -17033,12 +17055,12 @@ void Player::_LoadMailInit(PreparedQueryResult resultUnread, PreparedQueryResult
//set a count of unread mails
//QueryResult *resultMails = CharacterDatabase.PQuery("SELECT COUNT(id) FROM mail WHERE receiver = '%u' AND (checked & 1)=0 AND deliver_time <= '" UI64FMTD "'", GUID_LOPART(playerGuid),(uint64)cTime);
if (resultUnread)
- unReadMails = resultUnread->GetUInt8(0);
+ unReadMails = (*resultUnread)[0].GetUInt8();
// store nearest delivery time (it > 0 and if it < current then at next player update SendNewMaill will be called)
//resultMails = CharacterDatabase.PQuery("SELECT MIN(deliver_time) FROM mail WHERE receiver = '%u' AND (checked & 1)=0", GUID_LOPART(playerGuid));
if (resultDelivery)
- m_nextMailDelivereTime = (time_t)resultDelivery->GetUInt64(0);
+ m_nextMailDelivereTime = (time_t)(*resultDelivery)[0].GetUInt64();
}
void Player::_LoadMail()
@@ -17056,8 +17078,8 @@ void Player::_LoadMail()
m->messageType = fields[1].GetUInt8();
m->sender = fields[2].GetUInt32();
m->receiver = fields[3].GetUInt32();
- m->subject = fields[4].GetCppString();
- m->body = fields[5].GetCppString();
+ m->subject = fields[4].GetString();
+ m->body = fields[5].GetString();
bool has_items = fields[6].GetBool();
m->expire_time = (time_t)fields[7].GetUInt64();
m->deliver_time = (time_t)fields[8].GetUInt64();
@@ -17109,7 +17131,9 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
{
do
{
- uint32 quest_id = result->GetUInt32(0);
+ Field* fields = result->Fetch();
+
+ uint32 quest_id = fields[0].GetUInt32();
// used to be new, no delete?
Quest const* pQuest = sObjectMgr.GetQuestTemplate(quest_id);
if (pQuest)
@@ -17117,7 +17141,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
// find or create
QuestStatusData& questStatusData = mQuestStatus[quest_id];
- uint32 qstatus = result->GetUInt32(1);
+ uint32 qstatus = fields[1].GetUInt32();
if (qstatus < MAX_QUEST_STATUS)
questStatusData.m_status = QuestStatus(qstatus);
else
@@ -17126,10 +17150,10 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
sLog.outError("Player %s have invalid quest %d status (%d), replaced by QUEST_STATUS_NONE(0).",GetName(),quest_id,qstatus);
}
- questStatusData.m_rewarded = (result->GetUInt8(2) > 0);
- questStatusData.m_explored = (result->GetUInt8(3) > 0);
+ questStatusData.m_rewarded = (fields[2].GetUInt8() > 0);
+ questStatusData.m_explored = (fields[3].GetUInt8() > 0);
- time_t quest_time = time_t(result->GetUInt64(4));
+ time_t quest_time = time_t(fields[4].GetUInt64());
if (pQuest->HasFlag(QUEST_TRINITY_FLAGS_TIMED) && !GetQuestRewardStatus(quest_id) && questStatusData.m_status != QUEST_STATUS_NONE)
{
@@ -17143,14 +17167,14 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
else
quest_time = 0;
- questStatusData.m_creatureOrGOcount[0] = result->GetUInt32(5);
- questStatusData.m_creatureOrGOcount[1] = result->GetUInt32(6);
- questStatusData.m_creatureOrGOcount[2] = result->GetUInt32(7);
- questStatusData.m_creatureOrGOcount[3] = result->GetUInt32(8);
- questStatusData.m_itemcount[0] = result->GetUInt32(9);
- questStatusData.m_itemcount[1] = result->GetUInt32(10);
- questStatusData.m_itemcount[2] = result->GetUInt32(11);
- questStatusData.m_itemcount[3] = result->GetUInt32(12);
+ questStatusData.m_creatureOrGOcount[0] = fields[5].GetUInt32();
+ questStatusData.m_creatureOrGOcount[1] = fields[6].GetUInt32();
+ questStatusData.m_creatureOrGOcount[2] = fields[7].GetUInt32();
+ questStatusData.m_creatureOrGOcount[3] = fields[8].GetUInt32();
+ questStatusData.m_itemcount[0] = fields[9].GetUInt32();
+ questStatusData.m_itemcount[1] = fields[10].GetUInt32();
+ questStatusData.m_itemcount[2] = fields[11].GetUInt32();
+ questStatusData.m_itemcount[3] = fields[12].GetUInt32();
questStatusData.uState = QUEST_UNCHANGED;
@@ -17222,10 +17246,12 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result)
break;
}
- uint32 quest_id = result->GetUInt32(0);
+ Field* fields = result->Fetch();
+
+ uint32 quest_id = fields[0].GetUInt32();
// save _any_ from daily quest times (it must be after last reset anyway)
- m_lastDailyQuestTime = (time_t)result->GetUInt64(1);
+ m_lastDailyQuestTime = (time_t)fields[1].GetUInt64();
Quest const* pQuest = sObjectMgr.GetQuestTemplate(quest_id);
if (!pQuest)
@@ -17235,7 +17261,8 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result)
++quest_daily_idx;
sLog.outDebug("Daily quest (%u) cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
m_DailyQuestChanged = false;
@@ -17249,14 +17276,15 @@ void Player::_LoadWeeklyQuestStatus(PreparedQueryResult result)
{
do
{
- uint32 quest_id = result->GetUInt32(0);
+ uint32 quest_id = (*result)[0].GetUInt32();
Quest const* pQuest = sObjectMgr.GetQuestTemplate(quest_id);
if (!pQuest)
continue;
m_weeklyquests.insert(quest_id);
sLog.outDebug("Weekly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
m_WeeklyQuestChanged = false;
@@ -17269,7 +17297,7 @@ void Player::_LoadSpells(PreparedQueryResult result)
if (result)
{
do
- addSpell(result->GetUInt32(0), result->GetBool(1), false, false, result->GetBool(2));
+ addSpell((*result)[0].GetUInt32(), (*result)[1].GetBool(), false, false, (*result)[2].GetBool());
while (result->NextRow());
}
}
@@ -17279,7 +17307,7 @@ void Player::_LoadGroup(PreparedQueryResult result)
//QueryResult *result = CharacterDatabase.PQuery("SELECT guid FROM group_member WHERE memberGuid=%u", GetGUIDLow());
if (result)
{
- if (Group* group = sObjectMgr.GetGroupByGUID(result->GetUInt32(0)))
+ if (Group* group = sObjectMgr.GetGroupByGUID((*result)[0].GetUInt32()))
{
uint8 subgroup = group->GetMemberGroup(GetGUID());
SetGroup(group, subgroup);
@@ -17305,12 +17333,14 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
{
do
{
- bool perm = result->GetBool(1);
- uint32 mapId = result->GetUInt32(2);
- uint32 instanceId = result->GetUInt32(0);
- uint8 difficulty = result->GetUInt8(3);
+ Field* fields = result->Fetch();
+
+ bool perm = fields[1].GetBool();
+ uint32 mapId = fields[2].GetUInt32();
+ uint32 instanceId = fields[0].GetUInt32();
+ uint8 difficulty = fields[3].GetUInt8();
- time_t resetTime = (time_t)result->GetUInt64(4);
+ time_t resetTime = (time_t)fields[4].GetUInt64();
// the resettime for normal instances is only saved when the InstanceSave is unloaded
// so the value read from the DB may be wrong here but only if the InstanceSave is loaded
// and in that case it is not used
@@ -17338,7 +17368,6 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
continue;
}
-
if (!perm && group)
{
sLog.outError("_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d,%d,%d", GetName(), GetGUIDLow(), GUID_LOPART(group->GetGUID()), mapId, instanceId, difficulty);
@@ -17349,7 +17378,8 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
// since non permanent binds are always solo bind, they can always be reset
if (InstanceSave *save = sInstanceSaveMgr.AddInstanceSave(mapId, instanceId, Difficulty(difficulty), resetTime, !perm, true))
BindToInstance(save, perm, true);
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
}
@@ -17656,11 +17686,13 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
//QueryResult *result = CharacterDatabase.PQuery("SELECT map,zone,position_x,position_y,position_z FROM character_homebind WHERE guid = '%u'", GUID_LOPART(playerGuid));
if (result)
{
- m_homebindMapId = result->GetUInt32(0);
- m_homebindAreaId = result->GetUInt16(1);
- m_homebindX = result->GetFloat(2);
- m_homebindY = result->GetFloat(3);
- m_homebindZ = result->GetFloat(4);
+ Field* fields = result->Fetch();
+
+ m_homebindMapId = fields[0].GetUInt32();
+ m_homebindAreaId = fields[1].GetUInt16();
+ m_homebindX = fields[2].GetFloat();
+ m_homebindY = fields[3].GetFloat();
+ m_homebindZ = fields[4].GetFloat();
MapEntry const* bindMapEntry = sMapStore.LookupEntry(m_homebindMapId);
@@ -22927,9 +22959,10 @@ void Player::_LoadSkills(PreparedQueryResult result)
{
do
{
- uint16 skill = result->GetUInt16(0);
- uint16 value = result->GetUInt16(1);
- uint16 max = result->GetUInt16(2);
+ Field* fields = result->Fetch();
+ uint16 skill = fields[0].GetUInt16();
+ uint16 value = fields[1].GetUInt16();
+ uint16 max = fields[2].GetUInt16();
SkillLineEntry const *pSkill = sSkillLineStore.LookupEntry(skill);
if (!pSkill)
@@ -22977,7 +23010,8 @@ void Player::_LoadSkills(PreparedQueryResult result)
sLog.outError("Character %u has more than %u skills.", GetGUIDLow(), PLAYER_MAX_SKILLS);
break;
}
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
for (; count < PLAYER_MAX_SKILLS; ++count)
@@ -23061,7 +23095,7 @@ uint8 Player::CanEquipUniqueItem(Item* pItem, uint8 eslot, uint32 limit_count) c
uint32 gem_limit_count = !pItem->IsEquipped() && pGem->ItemLimitCategory
? pItem->GetGemCountWithLimitCategory(pGem->ItemLimitCategory) : 1;
- if (uint8 res = CanEquipUniqueItem(pGem, eslot,gem_limit_count))
+ if (uint8 res = CanEquipUniqueItem(pGem, eslot, gem_limit_count))
return res;
}
@@ -23074,7 +23108,7 @@ uint8 Player::CanEquipUniqueItem(ItemPrototype const* itemProto, uint8 except_sl
if (itemProto->Flags & ITEM_PROTO_FLAG_UNIQUE_EQUIPPED)
{
// there is an equip limit on this item
- if (HasItemOrGemWithIdEquipped(itemProto->ItemId,1,except_slot))
+ if (HasItemOrGemWithIdEquipped(itemProto->ItemId, 1, except_slot))
return EQUIP_ERR_ITEM_UNIQUE_EQUIPABLE;
}
@@ -23092,7 +23126,7 @@ uint8 Player::CanEquipUniqueItem(ItemPrototype const* itemProto, uint8 except_sl
// there is an equip limit on this item
if (HasItemOrGemWithLimitCategoryEquipped(itemProto->ItemLimitCategory, limitEntry->maxCount - limit_count + 1, except_slot))
- return EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED;
+ return EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED;
}
return EQUIP_ERR_OK;
@@ -23833,17 +23867,20 @@ void Player::_LoadGlyphs(PreparedQueryResult result)
do
{
- uint8 spec = result->GetUInt8(0);
+ Field* fields = result->Fetch();
+
+ uint8 spec = fields[0].GetUInt8();
if (spec >= m_specsCount)
continue;
- m_Glyphs[spec][0] = result->GetUInt32(1);
- m_Glyphs[spec][1] = result->GetUInt32(2);
- m_Glyphs[spec][2] = result->GetUInt32(3);
- m_Glyphs[spec][3] = result->GetUInt32(4);
- m_Glyphs[spec][4] = result->GetUInt32(5);
- m_Glyphs[spec][5] = result->GetUInt32(6);
- } while (result->NextRow());
+ m_Glyphs[spec][0] = fields[1].GetUInt32();
+ m_Glyphs[spec][1] = fields[2].GetUInt32();
+ m_Glyphs[spec][2] = fields[3].GetUInt32();
+ m_Glyphs[spec][3] = fields[4].GetUInt32();
+ m_Glyphs[spec][4] = fields[5].GetUInt32();
+ m_Glyphs[spec][5] = fields[6].GetUInt32();
+ }
+ while (result->NextRow());
}
void Player::_SaveGlyphs(SQLTransaction& trans)
@@ -23862,7 +23899,7 @@ void Player::_LoadTalents(PreparedQueryResult result)
if (result)
{
do
- AddTalent(result->GetUInt32(0), result->GetUInt32(1), false);
+ AddTalent((*result)[0].GetUInt32(), (*result)[1].GetUInt32(), false);
while (result->NextRow());
}
}
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 36c750377c9..e80fa300ca5 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -303,16 +303,19 @@ PlayerSocial *SocialMgr::LoadFromDB(PreparedQueryResult result, uint32 guid)
do
{
- friend_guid = result->GetUInt32(0);
- flags = result->GetUInt32(1);
- note = result->GetString(2);
+ Field* fields = result->Fetch();
+
+ friend_guid = fields[0].GetUInt32();
+ flags = fields[1].GetUInt32();
+ note = fields[2].GetString();
social->m_playerSocialMap[friend_guid] = FriendInfo(flags, note);
// client's friends list and ignore list limit
if (social->m_playerSocialMap.size() >= (SOCIALMGR_FRIEND_LIMIT + SOCIALMGR_IGNORE_LIMIT))
break;
- } while (result->NextRow());
+ }
+ while (result->NextRow());
return social;
}
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 595ee8dea8e..af5ff1bf3e2 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -54,9 +54,9 @@ void MapManager::LoadTransports()
Field *fields = result->Fetch();
uint32 lowguid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
- std::string name = fields[2].GetCppString();
+ std::string name = fields[2].GetString();
uint32 period = fields[3].GetUInt32();
- uint32 scriptId = sObjectMgr.GetScriptId(fields[4].GetString());
+ uint32 scriptId = sObjectMgr.GetScriptId(fields[4].GetCString());
Transport *t = new Transport(period, scriptId);
@@ -133,7 +133,7 @@ void MapManager::LoadTransports()
uint32 guid = fields[0].GetUInt32();
uint32 entry = fields[1].GetUInt32();
- std::string name = fields[2].GetCppString();
+ std::string name = fields[2].GetString();
sLog.outErrorDb("Transport %u '%s' have record (GUID: %u) in `gameobject`. Transports DON'T must have any records in `gameobject` or its behavior will be unpredictable/bugged.",entry,name.c_str(),guid);
}
while (result->NextRow());
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index ae71dce5ee0..0f6e88e8f47 100644
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -266,7 +266,7 @@ void GameEventMgr::LoadFromDB()
}
}
- pGameEvent.description = fields[6].GetCppString();
+ pGameEvent.description = fields[6].GetString();
} while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 4d2eac5b898..a015b05360b 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -445,10 +445,10 @@ void ObjectMgr::LoadCreatureLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
LocaleConstant locale = (LocaleConstant) i;
- std::string str = fields[1 + 2 * (i - 1)].GetCppString();
+ std::string str = fields[1 + 2 * (i - 1)].GetString();
AddLocaleString(str, locale, data.Name);
- str = fields[1 + 2 * (i - 1) + 1].GetCppString();
+ str = fields[1 + 2 * (i - 1) + 1].GetString();
AddLocaleString(str, locale, data.SubName);
}
} while (result->NextRow());
@@ -486,10 +486,10 @@ void ObjectMgr::LoadGossipMenuItemsLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
LocaleConstant locale = (LocaleConstant) i;
- std::string str = fields[2 + 2 * (i - 1)].GetCppString();
+ std::string str = fields[2 + 2 * (i - 1)].GetString();
AddLocaleString(str, locale, data.OptionText);
- str = fields[2 + 2 * (i - 1) + 1].GetCppString();
+ str = fields[2 + 2 * (i - 1) + 1].GetString();
AddLocaleString(str, locale, data.BoxText);
}
} while (result->NextRow());
@@ -520,7 +520,7 @@ void ObjectMgr::LoadPointOfInterestLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
- std::string str = fields[i].GetCppString();
+ std::string str = fields[i].GetString();
AddLocaleString(str, LocaleConstant(i), data.IconName);
}
} while (result->NextRow());
@@ -1878,7 +1878,7 @@ bool ObjectMgr::GetPlayerNameByGUID(const uint64 &guid, std::string &name) const
if (result)
{
- name = (*result)[0].GetCppString();
+ name = (*result)[0].GetString();
return true;
}
@@ -1957,10 +1957,10 @@ void ObjectMgr::LoadItemLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
LocaleConstant locale = (LocaleConstant) i;
- std::string str = fields[1 + 2 * (i - 1)].GetCppString();
+ std::string str = fields[1 + 2 * (i - 1)].GetString();
AddLocaleString(str, locale, data.Name);
- str = fields[1 + 2 * (i - 1) + 1].GetCppString();
+ str = fields[1 + 2 * (i - 1) + 1].GetString();
AddLocaleString(str, locale, data.Description);
}
} while (result->NextRow());
@@ -2452,7 +2452,7 @@ void ObjectMgr::LoadItemSetNameLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
- std::string str = fields[i].GetCppString();
+ std::string str = fields[i].GetString();
AddLocaleString(str, LocaleConstant(i), data.Name);
}
} while (result->NextRow());
@@ -2498,7 +2498,7 @@ void ObjectMgr::LoadItemSetNames()
}
ItemSetNameEntry &data = mItemSetNameMap[entry];
- data.name = fields[1].GetCppString();
+ data.name = fields[1].GetString();
uint32 invType = fields[2].GetUInt32();
if (invType >= MAX_INVTYPE)
@@ -3677,9 +3677,9 @@ void ObjectMgr::LoadGuildBanks(std::vector<Guild*>& GuildVector, QueryResult& re
{
GuildBankTab *NewTab = new GuildBankTab;
- NewTab->Name = fields[1].GetCppString();
- NewTab->Icon = fields[2].GetCppString();
- NewTab->Text = fields[3].GetCppString();
+ NewTab->Name = fields[1].GetString();
+ NewTab->Icon = fields[2].GetString();
+ NewTab->Text = fields[3].GetString();
GuildVector[guildid]->m_TabListMap[TabId] = NewTab;
}
@@ -3691,11 +3691,12 @@ void ObjectMgr::LoadGuildBanks(std::vector<Guild*>& GuildVector, QueryResult& re
{
do
{
- uint8 TabId = itemResult->GetUInt8(11);
- uint8 SlotId = itemResult->GetUInt8(12);
- uint32 ItemGuid = itemResult->GetUInt32(13);
- uint32 ItemId = itemResult->GetUInt32(14);
- uint32 guildid = itemResult->GetUInt32(15);
+ Field *fields = itemResult->Fetch();
+ uint8 TabId = fields[11].GetUInt8();
+ uint8 SlotId = fields[12].GetUInt8();
+ uint32 ItemGuid = fields[13].GetUInt32();
+ uint32 ItemId = fields[14].GetUInt32();
+ uint32 guildid = fields[15].GetUInt32();
if (guildid >= GuildVector.size() || GuildVector[guildid] == NULL)
return;
@@ -4651,30 +4652,30 @@ void ObjectMgr::LoadQuestLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
LocaleConstant locale = (LocaleConstant) i;
- std::string str = fields[1 + 11 * (i - 1)].GetCppString();
+ std::string str = fields[1 + 11 * (i - 1)].GetString();
AddLocaleString(str, locale, data.Title);
- str = fields[1 + 11 * (i - 1) + 1].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 1].GetString();
AddLocaleString(str, locale, data.Details);
- str = fields[1 + 11 * (i - 1) + 2].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 2].GetString();
AddLocaleString(str, locale, data.Objectives);
- str = fields[1 + 11 * (i - 1) + 3].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 3].GetString();
AddLocaleString(str, locale, data.OfferRewardText);
- str = fields[1 + 11 * (i - 1) + 4].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 4].GetString();
AddLocaleString(str, locale, data.RequestItemsText);
- str = fields[1 + 11 * (i - 1) + 5].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 5].GetString();
AddLocaleString(str, locale, data.EndText);
- str = fields[1 + 11 * (i - 1) + 6].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 6].GetString();
AddLocaleString(str, locale, data.CompletedText);
for (uint8 k = 0; k < 4; ++k)
{
- str = fields[1 + 11 * (i - 1) + 7 + k].GetCppString();
+ str = fields[1 + 11 * (i - 1) + 7 + k].GetString();
AddLocaleString(str, locale, data.ObjectiveText[k]);
}
}
@@ -5162,7 +5163,7 @@ void ObjectMgr::LoadSpellScriptNames()
Field *fields = result->Fetch();
int32 spellId = fields[0].GetInt32();
- const char *scriptName = fields[1].GetString();
+ const char *scriptName = fields[1].GetCString();
bool allRanks = false;
if (spellId <=0)
@@ -5328,7 +5329,7 @@ void ObjectMgr::LoadPageTextLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
- std::string str = fields[i].GetCppString();
+ std::string str = fields[i].GetString();
AddLocaleString(str, LocaleConstant(i), data.Text);
}
@@ -5419,8 +5420,8 @@ void ObjectMgr::LoadGossipText()
for (int i=0; i< 8; i++)
{
- gText.Options[i].Text_0 = fields[cic++].GetCppString();
- gText.Options[i].Text_1 = fields[cic++].GetCppString();
+ gText.Options[i].Text_0 = fields[cic++].GetString();
+ gText.Options[i].Text_1 = fields[cic++].GetString();
gText.Options[i].Language = fields[cic++].GetUInt32();
gText.Options[i].Probability = fields[cic++].GetFloat();
@@ -5471,10 +5472,10 @@ void ObjectMgr::LoadNpcTextLocales()
LocaleConstant locale = (LocaleConstant) i;
for (uint8 j = 0; j < 8; ++j)
{
- std::string str0 = fields[1 + 8 * 2 * (i - 1) + 2 * j].GetCppString();
+ std::string str0 = fields[1 + 8 * 2 * (i - 1) + 2 * j].GetString();
AddLocaleString(str0, locale, data.Text_0[j]);
- std::string str1 = fields[1 + 8 * 2 * (i - 1) + 2 * j + 1].GetCppString();
+ std::string str1 = fields[1 + 8 * 2 * (i - 1) + 2 * j + 1].GetString();
AddLocaleString(str1, locale, data.Text_1[j]);
}
}
@@ -5714,7 +5715,7 @@ void ObjectMgr::LoadAreaTriggerScripts()
Field *fields = result->Fetch();
uint32 Trigger_ID = fields[0].GetUInt32();
- const char *scriptName = fields[1].GetString();
+ const char *scriptName = fields[1].GetCString();
AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID);
if (!atEntry)
@@ -6209,7 +6210,7 @@ void ObjectMgr::LoadAccessRequirements()
ar.quest_A = fields[6].GetUInt32();
ar.quest_H = fields[7].GetUInt32();
ar.achievement = fields[8].GetUInt32();
- ar.questFailedText = fields[9].GetCppString();
+ ar.questFailedText = fields[9].GetString();
if (ar.item)
{
@@ -6529,13 +6530,13 @@ void ObjectMgr::LoadGameObjectLocales()
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
- std::string str = fields[i].GetCppString();
+ std::string str = fields[i].GetString();
AddLocaleString(str, LocaleConstant(i), data.Name);
}
for (uint8 i = 1; i < MAX_LOCALE; ++i)
{
- std::string str = fields[i + (MAX_LOCALE - 1)].GetCppString();
+ std::string str = fields[i + (MAX_LOCALE - 1)].GetString();
AddLocaleString(str, LocaleConstant(i), data.CastBarCaption);
}
@@ -7229,7 +7230,7 @@ void ObjectMgr::LoadPointsOfInterest()
POI.icon = fields[3].GetUInt32();
POI.flags = fields[4].GetUInt32();
POI.data = fields[5].GetUInt32();
- POI.icon_name = fields[6].GetCppString();
+ POI.icon_name = fields[6].GetString();
if (!Trinity::IsValidMapCoord(POI.x,POI.y))
{
@@ -7676,7 +7677,7 @@ void ObjectMgr::LoadReservedPlayersNames()
{
bar.step();
fields = result->Fetch();
- std::string name= fields[0].GetCppString();
+ std::string name= fields[0].GetString();
std::wstring wstr;
if (!Utf8toWStr (name,wstr))
@@ -7981,7 +7982,7 @@ bool ObjectMgr::LoadTrinityStrings(char const* table, int32 min_value, int32 max
for (uint8 i = 0; i < MAX_LOCALE; ++i)
{
- std::string str = fields[i + 1].GetCppString();
+ std::string str = fields[i + 1].GetString();
AddLocaleString(str, LocaleConstant(i), data.Content);
}
} while (result->NextRow());
@@ -8150,7 +8151,7 @@ void ObjectMgr::LoadGameTele()
gt.position_z = fields[3].GetFloat();
gt.orientation = fields[4].GetFloat();
gt.mapId = fields[5].GetUInt32();
- gt.name = fields[6].GetCppString();
+ gt.name = fields[6].GetString();
if (!MapManager::IsValidMapCoord(gt.mapId,gt.position_x,gt.position_y,gt.position_z,gt.orientation))
{
@@ -8697,7 +8698,7 @@ void ObjectMgr::LoadGossipMenuItems()
gMenuItem.menu_id = fields[0].GetUInt32();
gMenuItem.id = fields[1].GetUInt32();
gMenuItem.option_icon = fields[2].GetUInt8();
- gMenuItem.option_text = fields[3].GetCppString();
+ gMenuItem.option_text = fields[3].GetString();
gMenuItem.option_id = fields[4].GetUInt32();
gMenuItem.npc_option_npcflag = fields[5].GetUInt32();
gMenuItem.action_menu_id = fields[6].GetUInt32();
@@ -8705,7 +8706,7 @@ void ObjectMgr::LoadGossipMenuItems()
gMenuItem.action_script_id = fields[8].GetUInt32();
gMenuItem.box_coded = fields[9].GetUInt8() != 0;
gMenuItem.box_money = fields[10].GetUInt32();
- gMenuItem.box_text = fields[11].GetCppString();
+ gMenuItem.box_text = fields[11].GetString();
if (gMenuItem.option_icon >= GOSSIP_ICON_MAX)
{
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 127f3cd604b..9ee04a53483 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -152,7 +152,7 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
return false; // player doesn't exist
Field *fields = result->Fetch();
- newmember.Name = fields[0].GetCppString();
+ newmember.Name = fields[0].GetString();
newmember.ZoneId = fields[1].GetUInt32();
newmember.Level = fields[2].GetUInt8();
newmember.Class = fields[3].GetUInt8();
@@ -226,15 +226,15 @@ bool Guild::LoadGuildFromDB(QueryResult guildDataResult)
Field *fields = guildDataResult->Fetch();
m_Id = fields[0].GetUInt32();
- m_Name = fields[1].GetCppString();
+ m_Name = fields[1].GetString();
m_LeaderGuid = MAKE_NEW_GUID(fields[2].GetUInt32(), 0, HIGHGUID_PLAYER);
m_EmblemStyle = fields[3].GetUInt32();
m_EmblemColor = fields[4].GetUInt32();
m_BorderStyle = fields[5].GetUInt32();
m_BorderColor = fields[6].GetUInt32();
m_BackgroundColor = fields[7].GetUInt32();
- GINFO = fields[8].GetCppString();
- MOTD = fields[9].GetCppString();
+ GINFO = fields[8].GetString();
+ MOTD = fields[9].GetString();
m_CreatedDate = fields[10].GetUInt64();
m_GuildBankMoney = fields[11].GetUInt64();
@@ -311,7 +311,7 @@ bool Guild::LoadRanksFromDB(QueryResult guildRanksResult)
//we loaded all ranks for this guild already, break cycle
break;
uint32 rankID = fields[1].GetUInt32();
- std::string rankName = fields[2].GetCppString();
+ std::string rankName = fields[2].GetString();
uint32 rankRights = fields[3].GetUInt32();
uint32 rankMoney = fields[4].GetUInt32();
@@ -385,8 +385,8 @@ bool Guild::LoadMembersFromDB(QueryResult guildMembersResult)
if (newmember.RankId >= m_Ranks.size())
newmember.RankId = GetLowestRank();
- newmember.Pnote = fields[3].GetCppString();
- newmember.OFFnote = fields[4].GetCppString();
+ newmember.Pnote = fields[3].GetString();
+ newmember.OFFnote = fields[4].GetString();
newmember.BankResetTimeMoney = fields[5].GetUInt32();
newmember.BankRemMoney = fields[6].GetUInt32();
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; ++i)
@@ -395,7 +395,7 @@ bool Guild::LoadMembersFromDB(QueryResult guildMembersResult)
newmember.BankRemSlotsTab[i] = fields[8+(2*i)].GetUInt32();
}
- newmember.Name = fields[19].GetCppString();
+ newmember.Name = fields[19].GetString();
newmember.Level = fields[20].GetUInt8();
newmember.Class = fields[21].GetUInt8();
newmember.ZoneId = fields[22].GetUInt32();
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
index de1c301423d..b9b988f7a3d 100644
--- a/src/server/game/Instances/InstanceSaveMgr.cpp
+++ b/src/server/game/Instances/InstanceSaveMgr.cpp
@@ -239,7 +239,7 @@ void InstanceSaveManager::_DelHelper(const char *fields, const char *table, cons
std::ostringstream ss;
for (size_t i = 0; i < fieldTokens.size(); i++)
{
- std::string fieldValue = fields[i].GetCppString();
+ std::string fieldValue = fields[i].GetString();
CharacterDatabase.escape_string(fieldValue);
ss << (i != 0 ? " AND " : "") << fieldTokens[i] << " = '" << fieldValue << "'";
}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
index fe33622b9d2..66217bbfb53 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
@@ -111,7 +111,7 @@ void OutdoorPvPMgr::LoadTemplates()
OutdoorPvPData* data = new OutdoorPvPData();
OutdoorPvPTypes realTypeId = OutdoorPvPTypes(typeId);
data->TypeId = realTypeId;
- data->ScriptId = sObjectMgr.GetScriptId(fields[1].GetString());
+ data->ScriptId = sObjectMgr.GetScriptId(fields[1].GetCString());
m_OutdoorPvPDatas[realTypeId] = data;
++count;
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp
index 9eb21c63e56..9944c360bc4 100644
--- a/src/server/game/Pools/PoolMgr.cpp
+++ b/src/server/game/Pools/PoolMgr.cpp
@@ -852,8 +852,10 @@ void PoolMgr::LoadQuestPools()
{
bar.step();
- uint32 entry = result->GetUInt32(0);
- uint32 pool_id = result->GetUInt32(1);
+ Field* fields = result->Fetch();
+
+ uint32 entry = fields[0].GetUInt32();
+ uint32 pool_id = fields[1].GetUInt32();
Quest const* pQuest = sObjectMgr.GetQuestTemplate(entry);
if (!pQuest)
@@ -905,7 +907,9 @@ void PoolMgr::LoadQuestPools()
SearchPair p(entry, pool_id);
mQuestSearchMap.insert(p);
- } while (result->NextRow());
+ }
+ while (result->NextRow());
+
sLog.outString();
sLog.outString(">> Loaded %u quests in pools", count);
}
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 54ed32e4d58..0b88a0ebdaa 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -58,16 +58,16 @@ Quest::Quest(Field * questRecord)
SrcItemId = questRecord[31].GetUInt32();
SrcItemCount = questRecord[32].GetUInt32();
SrcSpell = questRecord[33].GetUInt32();
- Title = questRecord[34].GetCppString();
- Details = questRecord[35].GetCppString();
- Objectives = questRecord[36].GetCppString();
- OfferRewardText = questRecord[37].GetCppString();
- RequestItemsText = questRecord[38].GetCppString();
- EndText = questRecord[39].GetCppString();
- CompletedText = questRecord[40].GetCppString();
+ Title = questRecord[34].GetString();
+ Details = questRecord[35].GetString();
+ Objectives = questRecord[36].GetString();
+ OfferRewardText = questRecord[37].GetString();
+ RequestItemsText = questRecord[38].GetString();
+ EndText = questRecord[39].GetString();
+ CompletedText = questRecord[40].GetString();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ObjectiveText[i] = questRecord[41+i].GetCppString();
+ ObjectiveText[i] = questRecord[41+i].GetString();
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
ReqItemId[i] = questRecord[45+i].GetUInt32();
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index 7e91191f413..1e2d167f103 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -463,13 +463,15 @@ void ReputationMgr::LoadFromDB(PreparedQueryResult result)
{
do
{
- FactionEntry const *factionEntry = sFactionStore.LookupEntry(result->GetUInt32(0));
+ Field* fields = result->Fetch();
+
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(fields[0].GetUInt32());
if (factionEntry && (factionEntry->reputationListID >= 0))
{
FactionState* faction = &m_factions[factionEntry->reputationListID];
// update standing to current
- faction->Standing = int32(result->GetUInt32(1));
+ faction->Standing = int32(fields[1].GetUInt32());
// update counters
int32 BaseRep = GetBaseReputation(factionEntry);
@@ -477,7 +479,7 @@ void ReputationMgr::LoadFromDB(PreparedQueryResult result)
ReputationRank new_rank = ReputationToRank(BaseRep + faction->Standing);
UpdateRankCounters(old_rank, new_rank);
- uint32 dbFactionFlags = result->GetUInt32(2);
+ uint32 dbFactionFlags = fields[2].GetUInt32();
if (dbFactionFlags & FACTION_FLAG_VISIBLE)
SetVisible(faction); // have internal checks for forced invisibility
diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp
index c62e8d6a833..c9831f926d9 100644
--- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp
@@ -607,7 +607,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket & recv_data)
{
Field *fields = result->Fetch();
accountId = fields[0].GetUInt32();
- name = fields[1].GetCppString();
+ name = fields[1].GetString();
}
// prevent deleting other players' characters using cheating tools
@@ -741,8 +741,9 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
//QueryResult *result = CharacterDatabase.PQuery("SELECT guildid,rank FROM guild_member WHERE guid = '%u'",pCurrChar->GetGUIDLow());
if (PreparedQueryResult resultGuild = holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADGUILD))
{
- pCurrChar->SetInGuild(resultGuild->GetUInt32(0));
- pCurrChar->SetRank(resultGuild->GetUInt8(1));
+ Field* fields = resultGuild->Fetch();
+ pCurrChar->SetInGuild(fields[0].GetUInt32());
+ pCurrChar->SetRank(fields[1].GetUInt8());
}
else if (pCurrChar->GetGuildId()) // clear guild related fields in case wrong data about non existed membership
{
@@ -1067,7 +1068,7 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(QueryResult result, std:
uint32 guidLow = result->Fetch()[0].GetUInt32();
uint64 guid = MAKE_NEW_GUID(guidLow, 0, HIGHGUID_PLAYER);
- std::string oldname = result->Fetch()[1].GetCppString();
+ std::string oldname = result->Fetch()[1].GetString();
CharacterDatabase.PExecute("UPDATE characters set name = '%s', at_login = at_login & ~ %u WHERE guid ='%u'", newname.c_str(), uint32(AT_LOGIN_RENAME), guidLow);
CharacterDatabase.PExecute("DELETE FROM character_declinedname WHERE guid ='%u'", guidLow);
@@ -1318,7 +1319,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
CharacterDatabase.escape_string(newname);
if (QueryResult result = CharacterDatabase.PQuery("SELECT name FROM characters WHERE guid ='%u'", GUID_LOPART(guid)))
{
- std::string oldname = result->Fetch()[0].GetCppString();
+ std::string oldname = result->Fetch()[0].GetString();
std::string IP_str = GetRemoteAddress();
sLog.outChar("Account: %d (IP: %s), Character[%s] (guid:%u) Customized to: %s", GetAccountId(), IP_str.c_str(), oldname.c_str(), GUID_LOPART(guid), newname.c_str());
}
diff --git a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
index 0ed2a90b25c..935fe523621 100644
--- a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
@@ -1331,13 +1331,13 @@ void WorldSession::HandleWhoisOpcode(WorldPacket& recv_data)
}
Field *fields = result->Fetch();
- std::string acc = fields[0].GetCppString();
+ std::string acc = fields[0].GetString();
if (acc.empty())
acc = "Unknown";
- std::string email = fields[1].GetCppString();
+ std::string email = fields[1].GetString();
if (email.empty())
email = "Unknown";
- std::string lastip = fields[2].GetCppString();
+ std::string lastip = fields[2].GetString();
if (lastip.empty())
lastip = "Unknown";
diff --git a/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
index 482ea587d8d..4b57d6d2292 100644
--- a/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
@@ -334,7 +334,7 @@ void WorldSession::SendPetitionQueryOpcode(uint64 petitionguid)
{
Field* fields = result->Fetch();
ownerguid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
- name = fields[1].GetCppString();
+ name = fields[1].GetString();
signs = fields[2].GetUInt8();
type = fields[3].GetUInt32();
}
@@ -725,7 +725,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
{
Field *fields = result->Fetch();
ownerguidlo = fields[0].GetUInt32();
- name = fields[1].GetCppString();
+ name = fields[1].GetString();
type = fields[2].GetUInt32();
}
else
diff --git a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
index f8e9342b49d..85aa0e55e64 100644
--- a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
@@ -89,7 +89,7 @@ void WorldSession::SendNameQueryOpcodeFromDBCallBack(QueryResult result)
Field *fields = result->Fetch();
uint32 guid = fields[0].GetUInt32();
- std::string name = fields[1].GetCppString();
+ std::string name = fields[1].GetString();
uint8 pRace = 0, pGender = 0, pClass = 0;
if (name == "")
name = GetTrinityString(LANG_NON_EXIST_CHARACTER);
@@ -110,11 +110,11 @@ void WorldSession::SendNameQueryOpcodeFromDBCallBack(QueryResult result)
data << uint8(pClass); // class
// if the first declined name field (5) is empty, the rest must be too
- if (sWorld.getBoolConfig(CONFIG_DECLINED_NAMES_USED) && fields[5].GetCppString() != "")
+ if (sWorld.getBoolConfig(CONFIG_DECLINED_NAMES_USED) && fields[5].GetString() != "")
{
data << uint8(1); // is declined
for (int i = 5; i < MAX_DECLINED_NAME_CASES+5; ++i)
- data << fields[i].GetCppString();
+ data << fields[i].GetString();
}
else
data << uint8(0); // is not declined
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 1f278fd63fd..cdd8470854d 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -600,7 +600,8 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask)
do
{
- uint32 type = result->GetUInt32(0);
+ Field* fields = result->Fetch();
+ uint32 type = fields[0].GetUInt32();
if (type >= NUM_ACCOUNT_DATA_TYPES)
{
sLog.outError("Table `%s` have invalid account data type (%u), ignore.",
@@ -615,10 +616,11 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask)
continue;
}
- m_accountData[type].Time = result->GetUInt32(1);
- m_accountData[type].Data = result->GetString(2);
+ m_accountData[type].Time = fields[1].GetUInt32();
+ m_accountData[type].Data = fields[2].GetString();
- } while (result->NextRow());
+ }
+ while (result->NextRow());
}
void WorldSession::SetAccountData(AccountDataType type, time_t time_, std::string data)
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 90a969bc99d..e43ab13d2c0 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -851,8 +851,8 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
N.SetHexStr ("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
g.SetDword (7);
- v.SetHexStr(fields[4].GetString());
- s.SetHexStr (fields[5].GetString());
+ v.SetHexStr(fields[4].GetCString());
+ s.SetHexStr (fields[5].GetCString());
const char* sStr = s.AsHexStr(); //Must be freed by OPENSSL_free()
const char* vStr = v.AsHexStr(); //Must be freed by OPENSSL_free()
@@ -867,7 +867,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
///- Re-check ip locking (same check as in realmd).
if (fields[3].GetUInt8() == 1) // if ip is locked
{
- if (strcmp (fields[2].GetString(), GetRemoteAddress().c_str()))
+ if (strcmp (fields[2].GetCString(), GetRemoteAddress().c_str()))
{
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
packet << uint8 (AUTH_FAILED);
@@ -884,7 +884,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
security = SEC_ADMINISTRATOR;
*/
- K.SetHexStr (fields[1].GetString());
+ K.SetHexStr (fields[1].GetCString());
time_t mutetime = time_t (fields[7].GetUInt64());
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index 63023bb7cfe..9be0e2425e5 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -72,8 +72,8 @@ void TicketMgr::LoadGMTickets()
ticket = new GM_Ticket;
ticket->guid = fields[0].GetUInt64();
ticket->playerGuid = fields[1].GetUInt64();
- ticket->name = fields[2].GetCppString();
- ticket->message = fields[3].GetCppString();
+ ticket->name = fields[2].GetString();
+ ticket->message = fields[3].GetString();
ticket->createtime = fields[4].GetUInt64();
ticket->map = fields[5].GetUInt32();
ticket->pos_x = fields[6].GetFloat();
@@ -85,7 +85,7 @@ void TicketMgr::LoadGMTickets()
m_openTickets++;
ticket->assignedToGM = fields[11].GetUInt64();
- ticket->comment = fields[12].GetCppString();
+ ticket->comment = fields[12].GetString();
ticket->completed = fields[13].GetBool();
ticket->escalated = fields[14].GetUInt8();
ticket->viewed = fields[15].GetBool();
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index e49cb2e9fe5..96c6cd87338 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -207,7 +207,7 @@ std::string CreateDumpString(char const* tableName, QueryResult result)
if (i == 0) ss << "'";
else ss << ", '";
- std::string s = fields[i].GetCppString();
+ std::string s = fields[i].GetString();
CharacterDatabase.escape_string(s);
ss << s;
@@ -257,7 +257,7 @@ void StoreGUID(QueryResult result,uint32 field,std::set<uint32>& guids)
void StoreGUID(QueryResult result,uint32 data,uint32 field, std::set<uint32>& guids)
{
Field* fields = result->Fetch();
- std::string dataStr = fields[data].GetCppString();
+ std::string dataStr = fields[data].GetString();
uint32 guid = atoi(gettoknth(dataStr, field).c_str());
if (guid)
guids.insert(guid);
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 9e462b8a544..ff961153038 100644
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -130,7 +130,7 @@ void WeatherMgr::LoadWeatherData()
}
}
- wzc.ScriptId = sObjectMgr.GetScriptId(fields[13].GetString());
+ wzc.ScriptId = sObjectMgr.GetScriptId(fields[13].GetCString());
++count;
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 4a31abf94dc..dc8797b717c 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1845,7 +1845,7 @@ void World::LoadAutobroadcasts()
Field *fields = result->Fetch();
- std::string message = fields[0].GetCppString();
+ std::string message = fields[0].GetString();
m_Autobroadcasts.push_back(message);
@@ -2319,7 +2319,7 @@ BanReturn World::BanCharacter(std::string name, std::string duration, std::strin
if (!resultCharacter)
return BAN_NOTFOUND; // Nobody to ban
- guid = resultCharacter->GetUInt32(0);
+ guid = (*resultCharacter)[0].GetUInt32();
}
else
guid = pBanned->GetGUIDLow();
@@ -2353,7 +2353,7 @@ bool World::RemoveBanCharacter(std::string name)
if (!resultCharacter)
return false;
- guid = resultCharacter->GetUInt32(0);
+ guid = (*resultCharacter)[0].GetUInt32();
}
else
guid = pBanned->GetGUIDLow();
@@ -2728,8 +2728,8 @@ void World::LoadDBVersion()
{
Field* fields = result->Fetch();
- m_DBVersion = fields[0].GetCppString();
- m_CreatureEventAIVersion = fields[1].GetCppString();
+ m_DBVersion = fields[0].GetString();
+ m_CreatureEventAIVersion = fields[1].GetString();
// will be overwrite by config values if different and non-0
m_int_configs[CONFIG_CLIENTCACHE_VERSION] = fields[2].GetUInt32();
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index 2d55a6f1b6b..b2afdbd3bad 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -301,7 +301,6 @@ class DatabaseWorkerPool
if (!ret || !ret->GetRowCount())
return PreparedQueryResult(NULL);
- ret->NextRow();
return PreparedQueryResult(ret);
}
diff --git a/src/server/shared/Database/Field.cpp b/src/server/shared/Database/Field.cpp
index ac83bf055fb..9ef23f3ad17 100644
--- a/src/server/shared/Database/Field.cpp
+++ b/src/server/shared/Database/Field.cpp
@@ -1,6 +1,4 @@
/*
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
* Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
@@ -20,58 +18,42 @@
#include "Field.h"
-Field::Field() :
-mValue(NULL), mType(DB_TYPE_UNKNOWN)
+Field::Field()
{
+ data.value = NULL;
+ data.type = MYSQL_TYPE_NULL;
+ data.length = 0;
}
-Field::Field(Field &f)
+Field::~Field()
{
- const char *value;
-
- value = f.GetString();
-
- if (value)
- {
- mValue = new char[strlen(value) + 1];
- if (mValue)
- strcpy(mValue, value);
- }
- else
- mValue = NULL;
-
- mType = f.GetType();
+ CleanUp();
}
-Field::Field(const char *value, enum Field::DataTypes type) :
-mType(type)
+void Field::SetByteValue(void* newValue, const size_t newSize, enum_field_types newType, uint32 length)
{
- if (value)
+ // This value stores raw bytes that have to be explicitly casted later
+ if (newValue)
{
- mValue = new char[strlen(value) + 1];
- if (mValue)
- strcpy(mValue, value);
+ data.value = new char [newSize];
+ memcpy(data.value, newValue, newSize);
+ data.length = length;
}
- else
- mValue = NULL;
+ data.type = newType;
+ data.raw = true;
}
-Field::~Field()
-{
- if (mValue)
- delete [] mValue;
-}
-
-void Field::SetValue(const char *value)
+void Field::SetStructuredValue(char* newValue, enum_field_types newType, const size_t newSize)
{
- if (mValue)
- delete [] mValue;
-
- if (value)
+ // This value stores somewhat structured data that needs function style casting
+ if (newValue)
{
- mValue = new char[strlen(value) + 1];
- strcpy(mValue, value);
+ size_t size = strlen(newValue);
+ data.value = new char [size+1];
+ strcpy(data.value, newValue);
+ data.length = size;
}
- else
- mValue = NULL;
+
+ data.type = newType;
+ data.raw = false;
}
diff --git a/src/server/shared/Database/Field.h b/src/server/shared/Database/Field.h
index 2885d9eff8b..0870f1c8562 100644
--- a/src/server/shared/Database/Field.h
+++ b/src/server/shared/Database/Field.h
@@ -1,6 +1,4 @@
/*
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
* Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
@@ -18,74 +16,308 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#if !defined(FIELD_H)
-#define FIELD_H
-#include <iostream>
+#ifndef _FIELD_H
+#define _FIELD_H
+
#include "Common.h"
+#include "Log.h"
+
+#include <mysql.h>
class Field
{
+ friend class ResultSet;
+ friend class PreparedResultSet;
+
public:
+
+ bool GetBool() const // Wrapper, actually gets integer
+ {
+ return GetUInt8() == 1 ? true : false;
+ }
- enum DataTypes
+ uint8 GetUInt8() const
{
- DB_TYPE_UNKNOWN = 0x00,
- DB_TYPE_STRING = 0x01,
- DB_TYPE_INTEGER = 0x02,
- DB_TYPE_FLOAT = 0x03,
- DB_TYPE_BOOL = 0x04
- };
+ if (!data.value)
+ return 0;
- Field();
- Field(Field &f);
- Field(const char *value, enum DataTypes type);
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetUInt8() on non-numeric field.");
+ return 0;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<uint8*>(data.value);
+ return static_cast<uint8>(atol((char*)data.value));
+ }
- ~Field();
+ int8 GetInt8() const
+ {
+ if (!data.value)
+ return 0;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GeInt8() on non-numeric field.");
+ return 0;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<int8*>(data.value);
+ return static_cast<int8>(atol((char*)data.value));
+ }
+
+ uint16 GetUInt16() const
+ {
+ if (!data.value)
+ return 0;
- enum DataTypes GetType() const { return mType; }
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetUInt16() on non-numeric field.");
+ return 0;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<uint16*>(data.value);
+ return static_cast<uint16>(atol((char*)data.value));
+ }
- const char *GetString() const { return mValue; }
- std::string GetCppString() const
+ int16 GetInt16() const
{
- return mValue ? mValue : ""; // std::string s = 0 have undefine result in C++
+ if (!data.value)
+ return 0;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetInt16() on non-numeric field.");
+ return 0;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<int16*>(data.value);
+ return static_cast<int16>(atol((char*)data.value));
}
- float GetFloat() const { return mValue ? static_cast<float>(atof(mValue)) : 0.0f; }
- bool GetBool() const { return mValue ? atoi(mValue) > 0 : false; }
- int32 GetInt32() const { return mValue ? static_cast<int32>(atol(mValue)) : int32(0); }
- uint8 GetUInt8() const { return mValue ? static_cast<uint8>(atol(mValue)) : uint8(0); }
- uint16 GetUInt16() const { return mValue ? static_cast<uint16>(atol(mValue)) : uint16(0); }
- int16 GetInt16() const { return mValue ? static_cast<int16>(atol(mValue)) : int16(0); }
- uint32 GetUInt32() const { return mValue ? static_cast<uint32>(atol(mValue)) : uint32(0); }
- uint64 GetUInt64() const
+
+ uint32 GetUInt32() const
{
- if(mValue)
+ if (!data.value)
+ return 0;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
{
- uint64 value;
- sscanf(mValue,UI64FMTD,&value);
- return value;
+ sLog.outSQLDriver("Error: GetUInt32() on non-numeric field.");
+ return 0;
}
- else
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<uint32*>(data.value);
+ return static_cast<uint32>(atol((char*)data.value));
+ }
+
+ int32 GetInt32() const
+ {
+ if (!data.value)
+ return 0;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetInt32() on non-numeric field.");
return 0;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<int32*>(data.value);
+ return static_cast<int32>(atol((char*)data.value));
}
- uint64 GetInt64() const
+
+ uint64 GetUInt64() const
{
- if(mValue)
+ if (!data.value)
+ return 0;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
{
- int64 value;
- sscanf(mValue,SI64FMTD,&value);
- return value;
+ sLog.outSQLDriver("Error: GetUInt64() on non-numeric field.");
+ return 0;
}
- else
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<uint64*>(data.value);
+ return static_cast<uint64>(atol((char*)data.value));
+ }
+
+ int64 GetInt64() const
+ {
+ if (!data.value)
+ return 0;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetInt64() on non-numeric field.");
return 0;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<int64*>(data.value);
+ return static_cast<int64>(atol((char*)data.value));
+ }
+
+ float GetFloat() const
+ {
+ if (!data.value)
+ return 0.0f;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetFloat() on non-numeric field.");
+ return 0.0f;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<float*>(data.value);
+ return static_cast<float>(atof((char*)data.value));
+ }
+
+ double GetDouble() const
+ {
+ if (!data.value)
+ return 0.0f;
+
+ #ifdef TRINITY_DEBUG
+ if (!IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetDouble() on non-numeric field.");
+ return 0.0f;
+ }
+ #endif
+ if (data.raw)
+ return *reinterpret_cast<double*>(data.value);
+ return static_cast<double>(atof((char*)data.value));
+ }
+
+ const char* GetCString() const
+ {
+ if (!data.value)
+ return NULL;
+
+ #ifdef TRINITY_DEBUG
+ if (IsNumeric())
+ {
+ sLog.outSQLDriver("Error: GetCString() on numeric field.");
+ return NULL;
+ }
+ #endif
+ return static_cast<const char*>(data.value);
+ }
+
+ std::string GetString() const
+ {
+ if (!data.value)
+ return "";
+
+ if (data.raw)
+ {
+ const char* string = GetCString();
+ if (!string)
+ string = "";
+ return std::string(string, data.length);
+ }
+ return std::string((char*)data.value);
+ }
+
+ protected:
+ Field();
+ ~Field();
+
+ struct
+ {
+ enum_field_types type; // Field type
+ void* value; // Actual data in memory
+ bool raw; // Raw bytes? (Prepared statement or adhoc)
+ uint32 length; // Length (prepared strings only)
+ } data;
+
+ void SetByteValue(void* newValue, const size_t newSize, enum_field_types newType, uint32 length);
+ void SetStructuredValue(char* newValue, enum_field_types newType, const size_t newSize);
+
+ void CleanUp()
+ {
+ delete[] (data.value);
+ data.value = NULL;
}
- void SetType(enum DataTypes type) { mType = type; }
+ static size_t SizeForType(MYSQL_FIELD* field)
+ {
+ switch (field->type)
+ {
+ case MYSQL_TYPE_NULL:
+ return 0;
+ case MYSQL_TYPE_TINY:
+ return 1;
+ case MYSQL_TYPE_YEAR:
+ case MYSQL_TYPE_SHORT:
+ return 2;
+ case MYSQL_TYPE_INT24:
+ case MYSQL_TYPE_LONG:
+ case MYSQL_TYPE_FLOAT:
+ return 4;
+ case MYSQL_TYPE_DOUBLE:
+ case MYSQL_TYPE_LONGLONG:
+ case MYSQL_TYPE_BIT:
+ return 8;
+
+ case MYSQL_TYPE_TIMESTAMP:
+ case MYSQL_TYPE_DATE:
+ case MYSQL_TYPE_TIME:
+ case MYSQL_TYPE_DATETIME:
+ return sizeof(MYSQL_TIME);
+
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_STRING:
+ case MYSQL_TYPE_VAR_STRING:
+ return field->max_length + 1;
- void SetValue(const char *value);
+ case MYSQL_TYPE_DECIMAL:
+ case MYSQL_TYPE_NEWDECIMAL:
+ return 64;
- private:
- char *mValue;
- enum DataTypes mType;
+ case MYSQL_TYPE_GEOMETRY:
+ /*
+ Following types are not sent over the wire:
+ MYSQL_TYPE_ENUM:
+ MYSQL_TYPE_SET:
+ */
+ default:
+ sLog.outSQLDriver("SQL::SizeForType(): invalid field type %u", uint32(field->type));
+ return 0;
+ }
+ }
+
+ bool IsNumeric() const
+ {
+ return (data.type == MYSQL_TYPE_TINY ||
+ data.type == MYSQL_TYPE_SHORT ||
+ data.type == MYSQL_TYPE_INT24 ||
+ data.type == MYSQL_TYPE_LONG ||
+ data.type == MYSQL_TYPE_FLOAT ||
+ data.type == MYSQL_TYPE_DOUBLE ||
+ data.type == MYSQL_TYPE_LONGLONG );
+ }
};
+
#endif
diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp
index 54bf97ce601..f3fa2f352da 100644
--- a/src/server/shared/Database/MySQLConnection.cpp
+++ b/src/server/shared/Database/MySQLConnection.cpp
@@ -222,14 +222,63 @@ bool MySQLConnection::Execute(PreparedStatement* stmt)
m_mStmt->ClearParameters();
return false;
}
- else
+
+ #ifdef SQLQUERY_LOG
+ sLog.outSQLDriver("[%u ms] Prepared SQL: %u", getMSTimeDiff(_s, getMSTime()), index);
+ #endif
+ m_mStmt->ClearParameters();
+ return true;
+ }
+}
+
+bool MySQLConnection::_Query(PreparedStatement* stmt, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount)
+{
+ if (!m_Mysql)
+ return false;
+
+ uint32 index = stmt->m_index;
+ {
+ // guarded block for thread-safe mySQL request
+ ACE_Guard<ACE_Thread_Mutex> query_connection_guard(m_Mutex);
+
+ MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index);
+ ASSERT(m_mStmt); // Can only be null if preparation failed, server side error or bad query
+ m_mStmt->m_stmt = stmt; // Cross reference them for debug output
+ stmt->m_stmt = m_mStmt; // TODO: Cleaner way
+
+ stmt->BindParameters();
+
+ MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT();
+ MYSQL_BIND* msql_BIND = m_mStmt->GetBind();
+
+ #ifdef SQLQUERY_LOG
+ uint32 _s = getMSTime();
+ #endif
+ if (mysql_stmt_bind_param(msql_STMT, msql_BIND))
{
- #ifdef SQLQUERY_LOG
- sLog.outSQLDriver("[%u ms] Prepared SQL: %u", getMSTimeDiff(_s, getMSTime()), index);
- #endif
+ sLog.outSQLDriver("[ERROR]: PreparedStatement (id: %u) error binding params: %s", index, mysql_stmt_error(msql_STMT));
+ m_mStmt->ClearParameters();
+ return false;
+ }
+
+ if (mysql_stmt_execute(msql_STMT))
+ {
+ sLog.outSQLDriver("[ERROR]: PreparedStatement (id: %u) error executing: %s", index, mysql_stmt_error(msql_STMT));
m_mStmt->ClearParameters();
- return true;
+ return false;
}
+
+ #ifdef SQLQUERY_LOG
+ sLog.outSQLDriver("[%u ms] Prepared SQL: %u", getMSTimeDiff(_s, getMSTime()), index);
+ #endif
+ m_mStmt->ClearParameters();
+
+ *pResult = mysql_stmt_result_metadata(msql_STMT);
+ *pRowCount = /*mysql_affected_rows(m_Mysql); //* or*/ mysql_stmt_num_rows(msql_STMT);
+ *pFieldCount = mysql_stmt_field_count(msql_STMT);
+
+ return true;
+
}
}
@@ -336,10 +385,17 @@ void MySQLConnection::PrepareStatement(uint32 index, const char* sql)
PreparedResultSet* MySQLConnection::Query(PreparedStatement* stmt)
{
- this->Execute(stmt);
+ MYSQL_RES *result = NULL;
+ MYSQL_FIELD *fields = NULL;
+ uint64 rowCount = 0;
+ uint32 fieldCount = 0;
+
+ if (!_Query(stmt, &result, &fields, &rowCount, &fieldCount))
+ return NULL;
+
if (mysql_more_results(m_Mysql))
{
mysql_next_result(m_Mysql);
}
- return new PreparedResultSet(stmt->m_stmt->GetSTMT());
+ return new PreparedResultSet(stmt->m_stmt->GetSTMT(), result, fields, rowCount, fieldCount);
}
diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h
index b707f8a4675..09c30e7073e 100644
--- a/src/server/shared/Database/MySQLConnection.h
+++ b/src/server/shared/Database/MySQLConnection.h
@@ -43,6 +43,7 @@ class MySQLConnection
ResultSet* Query(const char* sql);
PreparedResultSet* Query(PreparedStatement* stmt);
bool _Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount);
+ bool _Query(PreparedStatement* stmt, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount);
void BeginTransaction();
void RollbackTransaction();
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index 26ccce3853c..6c152f478f8 100644
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -89,13 +89,6 @@ QueryResult SQLQueryHolder::GetResult(size_t index)
// Don't call to this function if the index is of an ad-hoc statement
if (index < m_queries.size())
{
- /// the query strings are freed on the first GetResult or in the destructor
- if (SQLElementData* data = &m_queries[index].first)
- {
- free((void*)(const_cast<char*>(data->element.query)));
- data->element.query = NULL;
- }
-
ResultSet* result = m_queries[index].second.qresult;
if (!result || !result->GetRowCount())
return QueryResult(NULL);
@@ -112,18 +105,10 @@ PreparedQueryResult SQLQueryHolder::GetPreparedResult(size_t index)
// Don't call to this function if the index is of a prepared statement
if (index < m_queries.size())
{
- /// the query strings are freed on the first GetResult or in the destructor
- if (SQLElementData* data = &m_queries[index].first)
- {
- delete data->element.stmt;
- data->element.stmt = NULL;
- }
-
PreparedResultSet* result = m_queries[index].second.presult;
if (!result || !result->GetRowCount())
return PreparedQueryResult(NULL);
- result->NextRow();
return PreparedQueryResult(result);
}
else
diff --git a/src/server/shared/Database/QueryResult.cpp b/src/server/shared/Database/QueryResult.cpp
index 283734b80b7..b6a4e8477c9 100644
--- a/src/server/shared/Database/QueryResult.cpp
+++ b/src/server/shared/Database/QueryResult.cpp
@@ -21,106 +21,29 @@
#include "DatabaseEnv.h"
#include "Log.h"
-ResultSet::ResultSet(MYSQL_RES *result, MYSQL_FIELD *fields, uint64 rowCount, uint32 fieldCount)
-: mFieldCount(fieldCount)
-, mRowCount(rowCount)
-, mResult(result)
+ResultSet::ResultSet(MYSQL_RES *result, MYSQL_FIELD *fields, uint64 rowCount, uint32 fieldCount) :
+m_result(result),
+m_fields(fields),
+m_rowCount(rowCount),
+m_fieldCount(fieldCount)
+{
+ m_currentRow = new Field[m_fieldCount];
+ ASSERT(m_currentRow);
+}
+
+PreparedResultSet::PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES *result, MYSQL_FIELD *fields, uint64 rowCount, uint32 fieldCount) :
+m_rBind(NULL),
+m_stmt(stmt),
+m_res(result),
+m_isNull(NULL),
+m_length(NULL),
+m_rowCount(rowCount),
+m_fieldCount(fieldCount),
+m_rowPosition(0)
{
- mCurrentRow = new Field[mFieldCount];
- ASSERT(mCurrentRow);
-
- for (uint32 i = 0; i < mFieldCount; i++)
- mCurrentRow[i].SetType(ConvertNativeType(fields[i].type));
-}
-
-ResultSet::~ResultSet()
-{
- EndQuery();
-}
-
-bool ResultSet::NextRow()
-{
- MYSQL_ROW row;
-
- if (!mResult)
- return false;
-
- row = mysql_fetch_row(mResult);
- if (!row)
- {
- EndQuery();
- return false;
- }
-
- for (uint32 i = 0; i < mFieldCount; i++)
- mCurrentRow[i].SetValue(row[i]);
-
- return true;
-}
-
-void ResultSet::EndQuery()
-{
- if (mCurrentRow)
- {
- delete [] mCurrentRow;
- mCurrentRow = 0;
- }
-
- if (mResult)
- {
- mysql_free_result(mResult);
- mResult = 0;
- }
-}
-
-enum Field::DataTypes ResultSet::ConvertNativeType(enum_field_types mysqlType) const
-{
- switch (mysqlType)
- {
- case FIELD_TYPE_TIMESTAMP:
- case FIELD_TYPE_DATE:
- case FIELD_TYPE_TIME:
- case FIELD_TYPE_DATETIME:
- case FIELD_TYPE_YEAR:
- case FIELD_TYPE_STRING:
- case FIELD_TYPE_VAR_STRING:
- case FIELD_TYPE_BLOB:
- case FIELD_TYPE_SET:
- case FIELD_TYPE_NULL:
- return Field::DB_TYPE_STRING;
- case FIELD_TYPE_TINY:
-
- case FIELD_TYPE_SHORT:
- case FIELD_TYPE_LONG:
- case FIELD_TYPE_INT24:
- case FIELD_TYPE_LONGLONG:
- case FIELD_TYPE_ENUM:
- return Field::DB_TYPE_INTEGER;
- case FIELD_TYPE_DECIMAL:
- case FIELD_TYPE_FLOAT:
- case FIELD_TYPE_DOUBLE:
- return Field::DB_TYPE_FLOAT;
- default:
- return Field::DB_TYPE_UNKNOWN;
- }
-}
-
-void ResultBind::BindResult(uint64& num_rows)
-{
- FreeBindBuffer();
-
- m_res = mysql_stmt_result_metadata(m_stmt);
if (!m_res)
return;
- m_fieldCount = mysql_stmt_field_count(m_stmt);
-
- if (m_stmt->bind_result_done)
- {
- delete[] m_stmt->bind->length;
- delete[] m_stmt->bind->is_null;
- }
-
m_rBind = new MYSQL_BIND[m_fieldCount];
m_isNull = new my_bool[m_fieldCount];
m_length = new unsigned long[m_fieldCount];
@@ -141,7 +64,7 @@ void ResultBind::BindResult(uint64& num_rows)
MYSQL_FIELD* field;
while ((field = mysql_fetch_field(m_res)))
{
- size_t size = SizeForType(field);
+ size_t size = Field::SizeForType(field);
m_rBind[i].buffer_type = field->type;
m_rBind[i].buffer = malloc(size);
@@ -165,133 +88,136 @@ void ResultBind::BindResult(uint64& num_rows)
return;
}
- num_rows = mysql_stmt_num_rows(m_stmt);
-}
-
-void ResultBind::FreeBindBuffer()
-{
- for (uint32 i = 0; i < m_fieldCount; ++i)
- free (m_rBind[i].buffer);
-}
-
-void ResultBind::CleanUp()
-{
- if (m_res)
- mysql_free_result(m_res);
+ m_rowCount = mysql_stmt_num_rows(m_stmt);
- FreeBindBuffer();
- mysql_stmt_free_result(m_stmt);
+ m_rows.resize(m_rowCount);
+ while (_NextRow())
+ {
+ m_rows[m_rowPosition] = new Field[m_fieldCount];
+ for (uint64 fIndex = 0; fIndex < m_fieldCount; ++fIndex)
+ {
+ if (!*m_rBind[fIndex].is_null)
+ m_rows[m_rowPosition][fIndex].SetByteValue( m_rBind[fIndex].buffer,
+ m_rBind[fIndex].buffer_length,
+ m_rBind[fIndex].buffer_type,
+ *m_rBind[fIndex].length );
+ else
+ switch (m_rBind[fIndex].buffer_type)
+ {
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_STRING:
+ case MYSQL_TYPE_VAR_STRING:
+ m_rows[m_rowPosition][fIndex].SetByteValue( "",
+ m_rBind[fIndex].buffer_length,
+ m_rBind[fIndex].buffer_type,
+ *m_rBind[fIndex].length );
+ break;
+ default:
+ m_rows[m_rowPosition][fIndex].SetByteValue( 0,
+ m_rBind[fIndex].buffer_length,
+ m_rBind[fIndex].buffer_type,
+ *m_rBind[fIndex].length );
+ }
+ }
+ m_rowPosition++;
+ }
+ m_rowPosition = 0;
- delete[] m_rBind;
+ /// All data is buffered, let go of mysql c api structures
+ CleanUp();
}
-bool PreparedResultSet::GetBool(uint32 index)
+ResultSet::~ResultSet()
{
- // TODO: Perhaps start storing data in genuine bool formats in tables
- return GetUInt8(index) == 1 ? true : false;
+ CleanUp();
}
-uint8 PreparedResultSet::GetUInt8(uint32 index)
+PreparedResultSet::~PreparedResultSet()
{
- if (!CheckFieldIndex(index))
- return 0;
-
- return *reinterpret_cast<uint8*>(rbind->m_rBind[index].buffer);
+ for (uint64 i = 0; i < m_rowCount; ++i)
+ delete[] m_rows[i];
}
-int8 PreparedResultSet::GetInt8(uint32 index)
+bool ResultSet::NextRow()
{
- if (!CheckFieldIndex(index))
- return 0;
-
- return *reinterpret_cast<int8*>(rbind->m_rBind[index].buffer);
-}
+ MYSQL_ROW row;
-uint16 PreparedResultSet::GetUInt16(uint32 index)
-{
- if (!CheckFieldIndex(index))
- return 0;
+ if (!m_result)
+ return false;
- return *reinterpret_cast<uint16*>(rbind->m_rBind[index].buffer);
-}
+ row = mysql_fetch_row(m_result);
+ if (!row)
+ {
+ CleanUp();
+ return false;
+ }
-int16 PreparedResultSet::GetInt16(uint32 index)
-{
- if (!CheckFieldIndex(index))
- return 0;
+ for (uint32 i = 0; i < m_fieldCount; i++)
+ m_currentRow[i].SetStructuredValue(row[i], m_fields[i].type, Field::SizeForType(&m_fields[i]));
- return *reinterpret_cast<int16*>(rbind->m_rBind[index].buffer);
+ return true;
}
-uint32 PreparedResultSet::GetUInt32(uint32 index)
+bool PreparedResultSet::NextRow()
{
- if (!CheckFieldIndex(index))
- return 0;
+ /// Only updates the m_rowPosition so upper level code knows in which element
+ /// of the rows vector to look
+ if (++m_rowPosition >= m_rowCount)
+ return false;
- return *reinterpret_cast<uint32*>(rbind->m_rBind[index].buffer);
+ return true;
}
-int32 PreparedResultSet::GetInt32(uint32 index)
+bool PreparedResultSet::_NextRow()
{
- if (!CheckFieldIndex(index))
- return 0;
-
- return *reinterpret_cast<int32*>(rbind->m_rBind[index].buffer);
-}
+ /// Only called in low-level code, namely the constructor
+ /// Will iterate over every row of data and buffer it
+ if (m_rowPosition >= m_rowCount)
+ return false;
-float PreparedResultSet::GetFloat(uint32 index)
-{
- if (!CheckFieldIndex(index))
- return 0;
+ int retval = mysql_stmt_fetch( m_stmt );
- return *reinterpret_cast<float*>(rbind->m_rBind[index].buffer);
-}
+ if (!retval || retval == MYSQL_DATA_TRUNCATED)
+ retval = true;
-uint64 PreparedResultSet::GetUInt64(uint32 index)
-{
- if (!CheckFieldIndex(index))
- return 0;
+ if (retval == MYSQL_NO_DATA)
+ retval = false;
- return *reinterpret_cast<uint64*>(rbind->m_rBind[index].buffer);
+ return retval;
}
-int64 PreparedResultSet::GetInt64(uint32 index)
+void ResultSet::CleanUp()
{
- if (!CheckFieldIndex(index))
- return 0;
+ if (m_currentRow)
+ {
+ delete [] m_currentRow;
+ m_currentRow = NULL;
+ }
- return *reinterpret_cast<int64*>(rbind->m_rBind[index].buffer);
+ if (m_result)
+ {
+ mysql_free_result(m_result);
+ m_result = NULL;
+ }
}
-std::string PreparedResultSet::GetString(uint32 index)
+void PreparedResultSet::CleanUp()
{
- if (!CheckFieldIndex(index))
- return std::string("");
-
- return std::string(static_cast<char const*>(rbind->m_rBind[index].buffer), *rbind->m_rBind[index].length);
-}
+ /// More of the in our code allocated sources are deallocated by the poorly documented mysql c api
+ if (m_res)
+ mysql_free_result(m_res);
-const char* PreparedResultSet::GetCString(uint32 index)
-{
- if (!CheckFieldIndex(index))
- return '\0';
+ FreeBindBuffer();
+ mysql_stmt_free_result(m_stmt);
- return static_cast<char const*>(rbind->m_rBind[index].buffer);
+ delete[] m_rBind;
}
-bool PreparedResultSet::NextRow()
+void PreparedResultSet::FreeBindBuffer()
{
- if (row_position >= num_rows)
- return false;
-
- int retval = mysql_stmt_fetch( rbind->m_stmt );
-
- if (!retval || retval == MYSQL_DATA_TRUNCATED)
- retval = true;
-
- if (retval == MYSQL_NO_DATA)
- retval = false;
-
- ++row_position;
- return retval;
-} \ No newline at end of file
+ for (uint32 i = 0; i < m_fieldCount; ++i)
+ free (m_rBind[i].buffer);
+}
diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h
index 22cd8bbf19e..aa088b5f121 100755
--- a/src/server/shared/Database/QueryResult.h
+++ b/src/server/shared/Database/QueryResult.h
@@ -39,193 +39,70 @@ class ResultSet
~ResultSet();
bool NextRow();
-
- Field *Fetch() const { return mCurrentRow; }
-
- const Field & operator [] (int index) const { return mCurrentRow[index]; }
-
- uint32 GetFieldCount() const { return mFieldCount; }
- uint64 GetRowCount() const { return mRowCount; }
+ uint64 GetRowCount() const { return m_rowCount; }
+ uint32 GetFieldCount() const { return m_fieldCount; }
+
+ Field *Fetch() const { return m_currentRow; }
+ const Field & operator [] (uint32 index) const
+ {
+ ASSERT(index < m_rowCount);
+ return m_currentRow[index];
+ }
protected:
- Field *mCurrentRow;
- uint32 mFieldCount;
- uint64 mRowCount;
+ Field *m_currentRow;
+ uint64 m_rowCount;
+ uint32 m_fieldCount;
private:
- enum Field::DataTypes ConvertNativeType(enum_field_types mysqlType) const;
- void EndQuery();
- MYSQL_RES *mResult;
-
+ void CleanUp();
+ MYSQL_RES *m_result;
+ MYSQL_FIELD *m_fields;
};
typedef ACE_Refcounted_Auto_Ptr<ResultSet, ACE_Null_Mutex> QueryResult;
-typedef std::vector<std::string> QueryFieldNames;
-
-class QueryNamedResult
+class PreparedResultSet
{
public:
- explicit QueryNamedResult(ResultSet* query, QueryFieldNames const& names) : mQuery(query), mFieldNames(names) {}
- ~QueryNamedResult() { delete mQuery; }
-
- // compatible interface with ResultSet
- bool NextRow() { return mQuery->NextRow(); }
- Field *Fetch() const { return mQuery->Fetch(); }
- uint32 GetFieldCount() const { return mQuery->GetFieldCount(); }
- uint64 GetRowCount() const { return mQuery->GetRowCount(); }
- Field const& operator[] (int index) const { return (*mQuery)[index]; }
+ PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES *result, MYSQL_FIELD *fields, uint64 rowCount, uint32 fieldCount);
+ ~PreparedResultSet();
- // named access
- Field const& operator[] (const std::string &name) const { return mQuery->Fetch()[GetField_idx(name)]; }
- QueryFieldNames const& GetFieldNames() const { return mFieldNames; }
+ bool NextRow();
+ uint64 GetRowCount() const { return m_rowCount; }
+ uint32 GetFieldCount() const { return m_fieldCount; }
- uint32 GetField_idx(const std::string &name) const
+ Field* Fetch() const
{
- for (size_t idx = 0; idx < mFieldNames.size(); ++idx)
- {
- if(mFieldNames[idx] == name)
- return idx;
- }
- ASSERT(false && "unknown field name");
- return uint32(-1);
+ ASSERT(m_rowPosition < m_rowCount);
+ return m_rows[m_rowPosition];
}
- protected:
- ResultSet *mQuery;
- QueryFieldNames mFieldNames;
-};
-
-class ResultBind
-{
- friend class PreparedResultSet;
- public:
-
- ResultBind(MYSQL_STMT* stmt) : m_rBind(NULL), m_stmt(stmt), m_res(NULL), m_isNull(NULL), m_length(NULL), m_fieldCount(0) {}
-
- ~ResultBind()
+ const Field & operator [] (uint32 index) const
{
- CleanUp(); // Clean up buffer
+ ASSERT(m_rowPosition < m_rowCount);
+ ASSERT(index < m_fieldCount);
+ return m_rows[m_rowPosition][index];
}
- void BindResult(uint64& num_rows);
-
protected:
+ uint64 m_rowCount;
+ uint64 m_rowPosition;
+ std::vector<Field*> m_rows;
+ uint32 m_fieldCount;
+
+ private:
MYSQL_BIND* m_rBind;
MYSQL_STMT* m_stmt;
MYSQL_RES* m_res;
- void FreeBindBuffer();
- bool IsValidIndex(uint32 index) { return index < m_fieldCount; }
-
- private:
-
- void CleanUp();
-
- size_t SizeForType(MYSQL_FIELD* field)
- {
- switch (field->type)
- {
- case MYSQL_TYPE_NULL:
- return 0;
- case MYSQL_TYPE_TINY:
- return 1;
- case MYSQL_TYPE_YEAR:
- case MYSQL_TYPE_SHORT:
- return 2;
- case MYSQL_TYPE_INT24:
- case MYSQL_TYPE_LONG:
- case MYSQL_TYPE_FLOAT:
- return 4;
- case MYSQL_TYPE_DOUBLE:
- case MYSQL_TYPE_LONGLONG:
- case MYSQL_TYPE_BIT:
- return 8;
-
- case MYSQL_TYPE_TIMESTAMP:
- case MYSQL_TYPE_DATE:
- case MYSQL_TYPE_TIME:
- case MYSQL_TYPE_DATETIME:
- return sizeof(MYSQL_TIME);
-
- case MYSQL_TYPE_TINY_BLOB:
- case MYSQL_TYPE_MEDIUM_BLOB:
- case MYSQL_TYPE_LONG_BLOB:
- case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_STRING:
- case MYSQL_TYPE_VAR_STRING:
- return field->max_length + 1;
-
- case MYSQL_TYPE_DECIMAL:
- case MYSQL_TYPE_NEWDECIMAL:
- return 64;
-
- case MYSQL_TYPE_GEOMETRY:
- /*
- Following types are not sent over the wire:
- MYSQL_TYPE_ENUM:
- MYSQL_TYPE_SET:
- */
- default:
- sLog.outSQLDriver("ResultBind::SizeForType(): invalid field type %u", uint32(field->type));
- return 0;
- }
- }
-
my_bool* m_isNull;
unsigned long* m_length;
- uint32 m_fieldCount;
-};
-class PreparedResultSet
-{
- template<class T> friend class DatabaseWorkerPool;
- public:
- PreparedResultSet(MYSQL_STMT* stmt)
- {
- num_rows = 0;
- row_position = 0;
- rbind = new ResultBind(stmt);
- rbind->BindResult(num_rows);
- }
- ~PreparedResultSet()
- {
- delete rbind;
- }
-
- operator bool() { return num_rows > 0; }
-
- bool GetBool(uint32 index);
- uint8 GetUInt8(uint32 index);
- int8 GetInt8(uint32 index);
- uint16 GetUInt16(uint32 index);
- int16 GetInt16(uint32 index);
- uint32 GetUInt32(uint32 index);
- int32 GetInt32(uint32 index);
- uint64 GetUInt64(uint32 index);
- int64 GetInt64(uint32 index);
- float GetFloat(uint32 index);
- std::string GetString(uint32 index);
- const char* GetCString(uint32 index);
-
- bool NextRow();
- uint64 GetRowCount() const { return num_rows; }
-
- private:
- bool CheckFieldIndex(uint32 index) const
- {
- if (!rbind->IsValidIndex(index))
- return false;
-
- if (rbind->m_isNull[index])
- return false;
-
- return true;
- }
+ void FreeBindBuffer();
+ void CleanUp();
+ bool _NextRow();
- ResultBind* rbind;
- uint64 row_position;
- uint64 num_rows;
};
typedef ACE_Refcounted_Auto_Ptr<PreparedResultSet, ACE_Null_Mutex> PreparedQueryResult;
diff --git a/src/server/shared/Database/SQLStorageImpl.h b/src/server/shared/Database/SQLStorageImpl.h
index 533ce7a37c3..04e905e4aa3 100644
--- a/src/server/shared/Database/SQLStorageImpl.h
+++ b/src/server/shared/Database/SQLStorageImpl.h
@@ -198,7 +198,7 @@ void SQLStorageLoaderBase<T>::Load(SQLStorage &store)
case FT_FLOAT:
storeValue((float)fields[x].GetFloat(), store, p, x, offset); break;
case FT_STRING:
- storeValue((char*)fields[x].GetString(), store, p, x, offset); break;
+ storeValue((char*)fields[x].GetCString(), store, p, x, offset); break;
}
++count;
}while( result->NextRow() );
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp
index 0a5b16563f5..226f22f647c 100644
--- a/src/server/worldserver/CommandLine/CliRunnable.cpp
+++ b/src/server/worldserver/CommandLine/CliRunnable.cpp
@@ -212,7 +212,7 @@ bool ChatHandler::GetDeletedCharacterInfoList(DeletedInfoList& foundList, std::s
DeletedInfo info;
info.lowguid = fields[0].GetUInt32();
- info.name = fields[1].GetCppString();
+ info.name = fields[1].GetString();
info.accountId = fields[2].GetUInt32();
// account name will be empty for not existed account
@@ -562,7 +562,7 @@ bool ChatHandler::HandleAccountOnlineListCommand(const char* /*args*/)
do
{
Field *fieldsDB = resultDB->Fetch();
- std::string name = fieldsDB[0].GetCppString();
+ std::string name = fieldsDB[0].GetString();
uint32 account = fieldsDB[1].GetUInt32();
///- Get the username, last IP and GM level of each account