39669-vm/db/migrations/20260416_alter_school_cycles.sql
2026-04-16 14:19:43 +00:00

41 lines
1.4 KiB
SQL

-- Safely add the column.
SET @dbname = DATABASE();
SET @tablename = 'school_cycles';
SET @columnname = 'global_cycle_id';
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (column_name = @columnname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT UNSIGNED NULL AFTER center_application_id;")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- Safely add foreign key
SET @fkname = 'fk_school_cycles_global_cycle';
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (constraint_name = @fkname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD CONSTRAINT ", @fkname, " FOREIGN KEY (", @columnname, ") REFERENCES global_cycles(id) ON DELETE SET NULL;")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
-- We can make season/year nullable or give defaults, since we will use global cycles instead.
-- We'll just alter them to allow NULL
ALTER TABLE school_cycles MODIFY season VARCHAR(20) NULL;
ALTER TABLE school_cycles MODIFY year SMALLINT UNSIGNED NULL;