From db072e767a1e822e70d7b702202dbaa3e59d0dae Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 04:23:52 -0500 Subject: [PATCH] Bulk instance deletion instead of tons of individual statements [skip ci] --- common/database_instances.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 0c917d847..4f7c1b8a2 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -602,12 +602,20 @@ void Database::PurgeExpiredInstances() return; } + std::vector instance_ids; for (auto row = results.begin(); row != results.end(); ++row) { - query = StringFormat("DELETE FROM instance_list WHERE id=%u", atoi(row[0])); - QueryDatabase(query); - - DeleteInstance(atoi(row[0])); + instance_ids.emplace_back(row[0]); } + + std::string imploded_instance_ids = implode(",", instance_ids); + + QueryDatabase(fmt::format("DELETE FROM instance_list WHERE id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("DELETE FROM instance_list_player WHERE id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("DELETE FROM respawn_times WHERE instance_id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("DELETE FROM spawn_condition_values WHERE instance_id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("UPDATE character_corpses SET is_buried = 1, instance_id = 0 WHERE instance_id IN ({})", imploded_instance_ids)); + + } void Database::SetInstanceDuration(uint16 instance_id, uint32 new_duration)