aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-12-17 17:29:16 +0100
committerMachiavelli <none@none>2010-12-17 17:29:16 +0100
commit1cdeb4d057d525ec15d60474a8d187fac43b9918 (patch)
tree0c7a5e209f46af94da6349ef224cc2da5a9114b5 /src
parentd38b171391bc23d7c05e2488e2a213089e9a1226 (diff)
Core/Player: Change equipmentset saving to use prepared statements.
Update issue #4550 Please try to re-reproduce --HG-- branch : trunk
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp36
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.cpp5
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.h4
3 files changed, 33 insertions, 12 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 7809b005ca0..b004f871930 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -23704,31 +23704,43 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
{
uint32 index = itr->first;
EquipmentSet& eqset = itr->second;
- switch(eqset.state)
+ PreparedStatement* stmt = NULL;
+ uint8 j = 0;
+ switch (eqset.state)
{
case EQUIPMENT_SET_UNCHANGED:
++itr;
break; // nothing do
case EQUIPMENT_SET_CHANGED:
- CharacterDatabase.escape_string(eqset.Name);
- CharacterDatabase.escape_string(eqset.IconName);
- trans->PAppend("UPDATE character_equipmentsets SET name='%s', iconname='%s', item0='%u', item1='%u', item2='%u', item3='%u', item4='%u', item5='%u', item6='%u', item7='%u', item8='%u', item9='%u', item10='%u', item11='%u', item12='%u', item13='%u', item14='%u', item15='%u', item16='%u', item17='%u', item18='%u' WHERE guid='%u' AND setguid='"UI64FMTD"' AND setindex='%u'",
- eqset.Name.c_str(), eqset.IconName.c_str(), eqset.Items[0], eqset.Items[1], eqset.Items[2], eqset.Items[3], eqset.Items[4], eqset.Items[5], eqset.Items[6], eqset.Items[7],
- eqset.Items[8], eqset.Items[9], eqset.Items[10], eqset.Items[11], eqset.Items[12], eqset.Items[13], eqset.Items[14], eqset.Items[15], eqset.Items[16], eqset.Items[17], eqset.Items[18], GetGUIDLow(), eqset.Guid, index);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_EQUIP_SET);
+ stmt->setString(j++, eqset.Name.c_str());
+ stmt->setString(j++, eqset.IconName.c_str());
+ for (uint8 i=0; i<EQUIPMENT_SLOT_END; ++i)
+ stmt->setUInt32(j++, eqset.Items[i]);
+ stmt->setUInt32(j++, GetGUIDLow());
+ stmt->setUInt64(j++, eqset.Guid);
+ stmt->setUInt32(j, index);
+ trans->Append(stmt);
eqset.state = EQUIPMENT_SET_UNCHANGED;
++itr;
break;
case EQUIPMENT_SET_NEW:
- CharacterDatabase.escape_string(eqset.Name);
- CharacterDatabase.escape_string(eqset.IconName);
- trans->PAppend("INSERT INTO character_equipmentsets VALUES ('%u', '"UI64FMTD"', '%u', '%s', '%s', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u')",
- GetGUIDLow(), eqset.Guid, index, eqset.Name.c_str(), eqset.IconName.c_str(), eqset.Items[0], eqset.Items[1], eqset.Items[2], eqset.Items[3], eqset.Items[4], eqset.Items[5], eqset.Items[6], eqset.Items[7],
- eqset.Items[8], eqset.Items[9], eqset.Items[10], eqset.Items[11], eqset.Items[12], eqset.Items[13], eqset.Items[14], eqset.Items[15], eqset.Items[16], eqset.Items[17], eqset.Items[18]);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_EQUIP_SET);
+ stmt->setUInt32(j++, GetGUIDLow());
+ stmt->setUInt64(j++, eqset.Guid);
+ stmt->setUInt32(j++, index);
+ stmt->setString(j++, eqset.Name.c_str());
+ stmt->setString(j++, eqset.IconName.c_str());
+ for (uint8 i=0; i<EQUIPMENT_SLOT_END; ++i)
+ stmt->setUInt32(j++, eqset.Items[i]);
+ trans->Append(stmt);
eqset.state = EQUIPMENT_SET_UNCHANGED;
++itr;
break;
case EQUIPMENT_SET_DELETED:
- trans->PAppend("DELETE FROM character_equipmentsets WHERE setguid="UI64FMTD, eqset.Guid);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EQUIP_SET);
+ stmt->setUInt64(0, eqset.Guid);
+ trans->Append(stmt);
m_EquipmentSets.erase(itr++);
break;
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index e1a092a1431..c11fdb57cd0 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -246,5 +246,10 @@ bool CharacterDatabaseConnection::Open()
PrepareStatement(CHAR_SET_CHANNEL_USAGE, "UPDATE channels SET last_used = UNIX_TIMESTAMP() WHERE m_name = ? AND m_team = ?", true);
PrepareStatement(CHAR_CLEAN_CHANNEL, "DELETE FROM channels WHERE m_ownership = 1 AND (last_used + ?) < UNIX_TIMESTAMP()", true);
+ // Equipmentsets
+ PrepareStatement(CHAR_SET_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, item0=?, item1=?, item2=?, item3=?, item4=?, item5=?, item6=?, item7=?, item8=?, item9=?, item10=?, item11=?, item12=?, item13=?, item14=?, item15=?, item16=?, item17=?, item18=? WHERE guid=? AND setguid=? AND setindex=?", true);
+ PrepareStatement(CHAR_ADD_EQUIP_SET, "INSERT INTO character_equipmentsets (guid,setguid,setindex,name,iconname,item0,item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12,item13,item14,item15,item16,item17,item18) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", true);
+ PrepareStatement(CHAR_DEL_EQUIP_SET, "DELETE FROM character_equipmentsets WHERE setguid=?", true);
+
return true;
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index f53751065c7..77b300640e5 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -206,6 +206,10 @@ enum CharacterDatabaseStatements
CHAR_SET_CHANNEL_USAGE,
CHAR_CLEAN_CHANNEL,
+ CHAR_SET_EQUIP_SET,
+ CHAR_ADD_EQUIP_SET,
+ CHAR_DEL_EQUIP_SET,
+
MAX_CHARACTERDATABASE_STATEMENTS,
};