Address PR review: check transaction/delete results, fix manifest, use distinct spell IDs in test

Co-authored-by: Valorith <76063792+Valorith@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-03-08 23:54:04 +00:00
parent 4f4742b425
commit d0e1c027e9
3 changed files with 28 additions and 9 deletions

View File

@ -7192,14 +7192,15 @@ ALTER TABLE `character_parcels_containers`
}, },
ManifestEntry{ ManifestEntry{
.version = 9329, .version = 9329,
.description = "2025_06_27_add_suppressed_to_character_buffs.sql", .description = "2026_03_08_add_suppressed_to_character_buffs.sql",
.check = "SHOW COLUMNS FROM `character_buffs` LIKE 'suppressed'", .check = "SHOW COLUMNS FROM `character_buffs` LIKE 'suppressed'",
.condition = "empty", .condition = "empty",
.match = "", .match = "",
.sql = R"( .sql = R"(
ALTER TABLE `character_buffs` ALTER TABLE `character_buffs`
ADD COLUMN `suppressed` tinyint(1) unsigned NOT NULL DEFAULT 0 AFTER `instrument_mod`; ADD COLUMN `suppressed` tinyint(1) unsigned NOT NULL DEFAULT 0 AFTER `instrument_mod`;
)" )",
.content_schema_update = false
}, },
// -- template; copy/paste this when you need to create a new entry // -- template; copy/paste this when you need to create a new entry
// ManifestEntry{ // ManifestEntry{

View File

@ -828,9 +828,9 @@ inline void TestHpManaEnd()
inline void TestClientBuffPersistence() inline void TestClientBuffPersistence()
{ {
constexpr uint32 test_character_id = 99999991; constexpr uint32 test_character_id = 99999991;
constexpr uint16 normal_spell_id = 6824; constexpr uint16 normal_spell_id = 6824;
constexpr uint16 suppressed_spell_id = 6824; constexpr uint16 suppressed_spell_id = 2550;
auto schema_check = database.QueryDatabase("SHOW COLUMNS FROM `character_buffs` LIKE 'suppressed'"); auto schema_check = database.QueryDatabase("SHOW COLUMNS FROM `character_buffs` LIKE 'suppressed'");
RunTest( RunTest(

View File

@ -2925,15 +2925,33 @@ void ZoneDatabase::SaveBuffs(Client *client)
v.emplace_back(e); v.emplace_back(e);
} }
database.TransactionBegin(); const auto begin_result = database.QueryDatabase("START TRANSACTION");
if (!begin_result.Success()) {
LogError(
"Failed to begin buff save transaction for character [{}] [{}]: {}",
client->GetCleanName(),
client->CharacterID(),
begin_result.ErrorMessage()
);
return;
}
CharacterBuffsRepository::DeleteWhere( const auto delete_result = database.QueryDatabase(
database,
fmt::format( fmt::format(
"`character_id` = {}", "DELETE FROM `character_buffs` WHERE `character_id` = {}",
client->CharacterID() client->CharacterID()
) )
); );
if (!delete_result.Success()) {
database.TransactionRollback();
LogError(
"Failed to delete existing buffs for character [{}] [{}]: {}",
client->GetCleanName(),
client->CharacterID(),
delete_result.ErrorMessage()
);
return;
}
if (!v.empty()) { if (!v.empty()) {
const auto saved_count = CharacterBuffsRepository::ReplaceMany(database, v); const auto saved_count = CharacterBuffsRepository::ReplaceMany(database, v);