From 689c22a0c5140e9b26196d0e0bc5223b015aa219 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 17 Feb 2023 09:29:59 +0100 Subject: [PATCH] engine/schema: fix IDEMPOTENT_ADD_FOREIGN_KEY procedure does not work on mysql8 On centos7 with mysql 5.5, it looks good ``` MariaDB [cloud]> CALL `cloud`.`IDEMPOTENT_ADD_FOREIGN_KEY`('cloud.volumes', 'passphrase', 'id'); Query OK, 0 rows affected, 2 warnings (0.03 sec) MariaDB [cloud]> CALL `cloud`.`IDEMPOTENT_ADD_FOREIGN_KEY`('cloud.volumes', 'passphrase', 'id'); Query OK, 0 rows affected, 2 warnings (0.02 sec) ``` However, it throws an error on ubuntu 22 or rocky8, with mariadb 8 ``` mysql> CALL `cloud`.`IDEMPOTENT_ADD_FOREIGN_KEY`('cloud.volumes', 'passphrase', 'id'); ERROR 1826 (HY000): Duplicate foreign key constraint name 'fk_passphrase_id' mysql> CALL `cloud`.`IDEMPOTENT_ADD_FOREIGN_KEY`('cloud.volumes', 'passphrase', 'id'); ERROR 1826 (HY000): Duplicate foreign key constraint name 'fk_passphrase_id' ``` --- .../src/main/resources/META-INF/db/schema-41720to41800.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41720to41800.sql b/engine/schema/src/main/resources/META-INF/db/schema-41720to41800.sql index a558d943146d..1b18aa764d38 100644 --- a/engine/schema/src/main/resources/META-INF/db/schema-41720to41800.sql +++ b/engine/schema/src/main/resources/META-INF/db/schema-41720to41800.sql @@ -233,7 +233,7 @@ CREATE PROCEDURE `cloud`.`IDEMPOTENT_ADD_FOREIGN_KEY` ( IN in_foreign_column_name VARCHAR(200) ) BEGIN - DECLARE CONTINUE HANDLER FOR 1005 BEGIN END; SET @ddl = CONCAT('ALTER TABLE ', in_table_name); SET @ddl = CONCAT(@ddl, ' ', ' ADD CONSTRAINT '); SET @ddl = CONCAT(@ddl, 'fk_', in_foreign_table_name, '_', in_foreign_column_name); SET @ddl = CONCAT(@ddl, ' FOREIGN KEY (', in_foreign_table_name, '_', in_foreign_column_name, ')'); SET @ddl = CONCAT(@ddl, ' REFERENCES ', in_foreign_table_name, '(', in_foreign_column_name, ')'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END; + DECLARE CONTINUE HANDLER FOR 1005,1826 BEGIN END; SET @ddl = CONCAT('ALTER TABLE ', in_table_name); SET @ddl = CONCAT(@ddl, ' ', ' ADD CONSTRAINT '); SET @ddl = CONCAT(@ddl, 'fk_', in_foreign_table_name, '_', in_foreign_column_name); SET @ddl = CONCAT(@ddl, ' FOREIGN KEY (', in_foreign_table_name, '_', in_foreign_column_name, ')'); SET @ddl = CONCAT(@ddl, ' REFERENCES ', in_foreign_table_name, '(', in_foreign_column_name, ')'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END; -- Add passphrase table CREATE TABLE IF NOT EXISTS `cloud`.`passphrase` (