feat(Core/Database): port TrinityCore database API (#5611)

This commit is contained in:
Kargatum
2021-06-22 11:21:07 +07:00
committed by GitHub
parent 2a2e54d8c5
commit 9ac6fddcae
155 changed files with 5818 additions and 4321 deletions

View File

@@ -96,12 +96,11 @@ void Pet::RemoveFromWorld()
SpellCastResult Pet::TryLoadFromDB(Player* owner, bool current /*= false*/, PetType mandatoryPetType /*= MAX_PET_TYPE*/)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT_SYNS);
stmt->setUInt32(0, owner->GetGUID().GetCounter());
stmt->setUInt8(1, uint8(current ? PET_SAVE_AS_CURRENT : PET_SAVE_NOT_IN_SLOT));
PreparedQueryResult result = CharacterDatabase.AsyncQuery(stmt);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
return SPELL_FAILED_NO_PET;
@@ -157,7 +156,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint8 asynchLoadType, uint32 petentry, ui
return false;
ObjectGuid::LowType ownerGuid = owner->GetGUID().GetCounter();
PreparedStatement* stmt;
CharacterDatabasePreparedStatement* stmt;
if (petnumber)
{
@@ -191,15 +190,21 @@ bool Pet::LoadPetFromDB(Player* owner, uint8 asynchLoadType, uint32 petentry, ui
stmt->setUInt8(2, uint8(PET_SAVE_LAST_STABLE_SLOT));
}
if (AsynchPetSummon* infoToDelete = owner->GetSession()->_loadPetFromDBFirstCallback.GetSecondParam())
// load them asynchronously
{
delete infoToDelete;
WorldSession* mySess = owner->GetSession();
mySess->GetQueryProcessor().AddCallback(CharacterDatabase.AsyncQuery(stmt)
.WithPreparedCallback([mySess, asynchLoadType, info, owner](PreparedQueryResult result)
{
// process only if player is in world (teleport crashes?)
// otherwise wait with result till he logs in
uint8 loadResult = mySess->HandleLoadPetFromDBFirstCallback(result, asynchLoadType);
if (loadResult != PET_LOAD_OK)
Pet::HandleAsynchLoadFailed(info, owner, asynchLoadType, loadResult);
}));
}
owner->GetSession()->_loadPetFromDBFirstCallback.Reset();
owner->GetSession()->_loadPetFromDBFirstCallback.SetFirstParam(asynchLoadType);
owner->GetSession()->_loadPetFromDBFirstCallback.SetSecondParam(info);
owner->GetSession()->_loadPetFromDBFirstCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
return true;
}
@@ -229,7 +234,7 @@ void Pet::SavePetToDB(PetSaveMode mode, bool logout)
uint32 curhealth = GetHealth();
uint32 curmana = GetPower(POWER_MANA);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
// save auras before possibly removing them
_SaveAuras(trans, logout);
@@ -248,7 +253,7 @@ void Pet::SavePetToDB(PetSaveMode mode, bool logout)
trans = CharacterDatabase.BeginTransaction();
// remove current data
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_PET_BY_ID);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_PET_BY_ID);
stmt->setUInt32(0, m_charmInfo->GetPetNumber());
trans->Append(stmt);
@@ -310,9 +315,9 @@ void Pet::SavePetToDB(PetSaveMode mode, bool logout)
void Pet::DeleteFromDB(ObjectGuid::LowType guidlow)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_PET_BY_ID);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_PET_BY_ID);
stmt->setUInt32(0, guidlow);
trans->Append(stmt);
@@ -1164,9 +1169,9 @@ void Pet::_LoadSpellCooldowns(PreparedQueryResult result)
}
}
void Pet::_SaveSpellCooldowns(SQLTransaction& trans, bool logout)
void Pet::_SaveSpellCooldowns(CharacterDatabaseTransaction trans, bool logout)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PET_SPELL_COOLDOWNS);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PET_SPELL_COOLDOWNS);
stmt->setUInt32(0, m_charmInfo->GetPetNumber());
trans->Append(stmt);
@@ -1206,7 +1211,7 @@ void Pet::_LoadSpells(PreparedQueryResult result)
}
}
void Pet::_SaveSpells(SQLTransaction& trans)
void Pet::_SaveSpells(CharacterDatabaseTransaction trans)
{
for (PetSpellMap::iterator itr = m_spells.begin(), next = m_spells.begin(); itr != m_spells.end(); itr = next)
{
@@ -1216,7 +1221,7 @@ void Pet::_SaveSpells(SQLTransaction& trans)
if (itr->second.type == PETSPELL_FAMILY)
continue;
PreparedStatement* stmt;
CharacterDatabasePreparedStatement* stmt;
switch (itr->second.state)
{
@@ -1333,9 +1338,9 @@ void Pet::_LoadAuras(PreparedQueryResult result, uint32 timediff)
}
}
void Pet::_SaveAuras(SQLTransaction& trans, bool logout)
void Pet::_SaveAuras(CharacterDatabaseTransaction trans, bool logout)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PET_AURAS);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PET_AURAS);
stmt->setUInt32(0, m_charmInfo->GetPetNumber());
trans->Append(stmt);
@@ -1395,7 +1400,7 @@ void Pet::_SaveAuras(SQLTransaction& trans, bool logout)
uint8 index = 0;
PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_INS_PET_AURA);
CharacterDatabasePreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_INS_PET_AURA);
stmt2->setUInt32(index++, m_charmInfo->GetPetNumber());
stmt2->setUInt64(index++, casterGUID.GetRawValue());
stmt2->setUInt32(index++, itr->second->GetId());
@@ -1411,7 +1416,6 @@ void Pet::_SaveAuras(SQLTransaction& trans, bool logout)
stmt2->setInt32(index++, itr->second->GetMaxDuration());
stmt2->setInt32(index++, itr->second->GetDuration());
stmt2->setUInt8(index++, itr->second->GetCharges());
trans->Append(stmt2);
}
}
@@ -1426,7 +1430,7 @@ bool Pet::addSpell(uint32 spellId, ActiveStates active /*= ACT_DECIDE*/, PetSpel
{
LOG_ERROR("entities.pet", "Pet::addSpell: Non-existed in SpellStore spell #%u request, deleting for all pets in `pet_spell`.", spellId);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_PET_SPELL);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_PET_SPELL);
stmt->setUInt32(0, spellId);
@@ -1795,7 +1799,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* online_pet /*= nullptr*/)
uint32 except_petnumber = online_pet ? online_pet->GetCharmInfo()->GetPetNumber() : 0;
// xinef: zomg! sync query
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PET);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PET);
stmt->setUInt32(0, owner->GetGUID().GetCounter());
stmt->setUInt32(1, except_petnumber);
PreparedQueryResult resultPets = CharacterDatabase.Query(stmt);