From 15235d77f7b559015a0ce36759e70823d176bfd2 Mon Sep 17 00:00:00 2001 From: hg <4683435+hgtw@users.noreply.github.com> Date: Fri, 10 Jul 2020 22:35:39 -0400 Subject: [PATCH] Fix regression deleting expedition from db Set expedition's instance id NULL instead of deleting it from the database when instances are deleted. Only expedition functions should delete expeditions This fixes a regression caused by removing foreign key constraints The expedition_details row was being deleted and not the corresponding expedition_members and expedition_lockouts rows. Any characters inside the members table could no longer join expeditions --- common/database_instances.cpp | 4 ++-- utils/sql/git/required/wip_expeditions.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index f0bdda42e..0949a6708 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -496,7 +496,7 @@ void Database::DeleteInstance(uint16 instance_id) query = fmt::format("DELETE FROM dynamic_zones WHERE instance_id={}", instance_id); QueryDatabase(query); - query = fmt::format("DELETE FROM expedition_details WHERE instance_id={}", instance_id); + query = fmt::format("UPDATE expedition_details SET instance_id = NULL WHERE instance_id={}", instance_id); QueryDatabase(query); BuryCorpsesInInstance(instance_id); @@ -589,7 +589,7 @@ void Database::PurgeExpiredInstances() 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)); QueryDatabase(fmt::format("DELETE FROM dynamic_zones WHERE instance_id IN ({})", imploded_instance_ids)); - QueryDatabase(fmt::format("DELETE FROM expedition_details WHERE instance_id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("UPDATE expedition_details SET instance_id = NULL WHERE instance_id IN ({})", imploded_instance_ids)); } void Database::SetInstanceDuration(uint16 instance_id, uint32 new_duration) diff --git a/utils/sql/git/required/wip_expeditions.sql b/utils/sql/git/required/wip_expeditions.sql index 971880e37..fe92bb2b4 100644 --- a/utils/sql/git/required/wip_expeditions.sql +++ b/utils/sql/git/required/wip_expeditions.sql @@ -1,7 +1,7 @@ CREATE TABLE `expedition_details` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `uuid` VARCHAR(36) NOT NULL, - `instance_id` INT(10) NOT NULL, + `instance_id` INT(10) NULL DEFAULT 0, `expedition_name` VARCHAR(128) NOT NULL, `leader_id` INT(10) UNSIGNED NOT NULL DEFAULT 0, `min_players` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,