From 13f0eac1a177d649ebce8e61d0a7180a2409baae Mon Sep 17 00:00:00 2001 From: Kirill Solomko Date: Mon, 12 Feb 2024 22:31:23 +0100 Subject: [PATCH] MT#59386 address foreign key handling in 6425.up/down * Instead of using "set foreign_key_checks=0" before altering voicemail_spool voicemail_users tables the foreign key voicemail_spool.`v_s_mailboxuser_ref` is dropped instead and re-created after the alter table operations (same lines where "set foreign_key_checks=0" and "set foreign_key_checks=1" were respectively. * That addresses the changed behavior with MariaDB 10.11.6 where "alter table" statements the change columns involved in a foreign key and potentially causing data loss are prohibited even with "set foreign_key_checks=0". * This change is only valid for new deployments and databases with already applied 6425.up are not affected. Change-Id: I2f2a85ca9f9f7d15058f41f5d8eaaec23ec501fa (cherry picked from commit 25257f1657b3675106fccd45842e71602e839a8c) --- db_scripts/base/6425.down | 4 ++-- db_scripts/base/6425.up | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/db_scripts/base/6425.down b/db_scripts/base/6425.down index 79be2ccb..b3c49ebe 100644 --- a/db_scripts/base/6425.down +++ b/db_scripts/base/6425.down @@ -175,7 +175,7 @@ ALTER TABLE `address` MODIFY `tag` VARCHAR(64) CHARACTER SET latin1; ALTER TABLE `version` DEFAULT CHARACTER SET latin1; ALTER TABLE `version` MODIFY `table_name` varchar(32) CHARACTER SET latin1 NOT NULL; -SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE `voicemail_spool` DROP FOREIGN KEY `v_s_mailboxuser_ref`; ALTER TABLE `voicemail_users` DEFAULT CHARACTER SET latin1; ALTER TABLE `voicemail_users` MODIFY `customer_id` char(36) CHARACTER SET latin1 NOT NULL DEFAULT ''; @@ -211,7 +211,7 @@ ALTER TABLE `voicemail_spool` MODIFY `duration` varchar(16) CHARACTER SET latin1 ALTER TABLE `voicemail_spool` MODIFY `mailboxuser` varchar(255) CHARACTER SET latin1 DEFAULT ''; ALTER TABLE `voicemail_spool` MODIFY `mailboxcontext` varchar(63) CHARACTER SET latin1 DEFAULT ''; -SET FOREIGN_KEY_CHECKS=1; +ALTER TABLE `voicemail_spool` ADD CONSTRAINT `v_s_mailboxuser_ref` FOREIGN KEY (`mailboxuser`) REFERENCES `voicemail_users` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE `fax_preferences` DEFAULT CHARACTER SET latin1; ALTER TABLE `fax_preferences` MODIFY `password` varchar(64) CHARACTER SET latin1 default NULL; diff --git a/db_scripts/base/6425.up b/db_scripts/base/6425.up index 2af2ab61..780afe35 100644 --- a/db_scripts/base/6425.up +++ b/db_scripts/base/6425.up @@ -175,7 +175,7 @@ ALTER TABLE `address` MODIFY `tag` VARCHAR(64) CHARACTER SET utf8; ALTER TABLE `version` DEFAULT CHARACTER SET utf8; ALTER TABLE `version` MODIFY `table_name` varchar(32) CHARACTER SET utf8 NOT NULL; -SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE `voicemail_spool` DROP FOREIGN KEY `v_s_mailboxuser_ref`; ALTER TABLE `voicemail_users` DEFAULT CHARACTER SET utf8; ALTER TABLE `voicemail_users` MODIFY `customer_id` char(36) CHARACTER SET utf8 NOT NULL DEFAULT ''; @@ -211,7 +211,7 @@ ALTER TABLE `voicemail_spool` MODIFY `duration` varchar(16) CHARACTER SET utf8 D ALTER TABLE `voicemail_spool` MODIFY `mailboxuser` varchar(255) CHARACTER SET utf8 DEFAULT ''; ALTER TABLE `voicemail_spool` MODIFY `mailboxcontext` varchar(63) CHARACTER SET utf8 DEFAULT ''; -SET FOREIGN_KEY_CHECKS=1; +ALTER TABLE `voicemail_spool` ADD CONSTRAINT `v_s_mailboxuser_ref` FOREIGN KEY (`mailboxuser`) REFERENCES `voicemail_users` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE `fax_preferences` DEFAULT CHARACTER SET utf8; ALTER TABLE `fax_preferences` MODIFY `password` varchar(64) CHARACTER SET utf8 default NULL;