From dae0b170ec479b007f9898e2df84a666f43b0e28 Mon Sep 17 00:00:00 2001 From: "Erik A. Brandstadmoen" Date: Wed, 8 May 2024 01:16:38 +0200 Subject: [PATCH] Bug #513: Changed to MySQL compatible syntax on 'ADD COLUMN IF NOT EXISTS' in internal grate tables (#515) * Fixed syntax so that it is MySQL compatible * Renamed MariaDb GrateStructure/up/01_version_add_status_column.sql to 01b_version_add_status_column.sql to avoid issues with changed one-time scripts (actually running it is idempotent) fixes #513 --- .../up/01_version_add_status_column.sql | 2 -- .../up/01b_version_add_status_column.sql | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) delete mode 100644 src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01_version_add_status_column.sql create mode 100644 src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01b_version_add_status_column.sql diff --git a/src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01_version_add_status_column.sql b/src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01_version_add_status_column.sql deleted file mode 100644 index f1deb1c2..00000000 --- a/src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01_version_add_status_column.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE {{SchemaName}}_{{VersionTable}} -ADD COLUMN IF NOT EXISTS status varchar(50) NULL; \ No newline at end of file diff --git a/src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01b_version_add_status_column.sql b/src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01b_version_add_status_column.sql new file mode 100644 index 00000000..1ea7e4f0 --- /dev/null +++ b/src/grate.mariadb/Bootstrapping/Sql/GrateStructure/up/01b_version_add_status_column.sql @@ -0,0 +1,17 @@ +-- The MariaDB version below is more elegant, but it is not compatible with MySQL. +-- ALTER TABLE {{SchemaName}}_{{VersionTable}} +-- ADD COLUMN IF NOT EXISTS status varchar(50) NULL;; + +-- MySQL does not support the IF NOT EXISTS clause for ADD COLUMN, as MariaDB does. +-- So, instead of the MariaDB version, we need to use a handler to ignore the error if the column already exists. +-- This is a bit of a hack, but it works. +-- The MariaDB version is more elegant, but it is not compatible with MySQL. +CREATE PROCEDURE create_{{SchemaName}}_{{VersionTable}}() +BEGIN + DECLARE CONTINUE HANDLER FOR 1060 BEGIN END; + ALTER TABLE {{SchemaName}}_{{VersionTable}} + ADD COLUMN status varchar(50) NULL; +END; +CALL create_{{SchemaName}}_{{VersionTable}}(); + +DROP PROCEDURE create_{{SchemaName}}_{{VersionTable}}