init push
This commit is contained in:
58
migrations/20260609_takeover_acs_base_id_nullable.sql
Normal file
58
migrations/20260609_takeover_acs_base_id_nullable.sql
Normal file
@@ -0,0 +1,58 @@
|
||||
-- +goose Up
|
||||
-- Allow takeover_acs.base_id to be nullable so takeover can be created without base data.
|
||||
|
||||
SET @schema_name := DATABASE();
|
||||
|
||||
SELECT COUNT(*) INTO @takeover_acs_has_base_id
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @schema_name
|
||||
AND TABLE_NAME = 'takeover_acs'
|
||||
AND COLUMN_NAME = 'base_id';
|
||||
|
||||
SELECT COUNT(*) INTO @takeover_acs_base_id_is_nullable
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @schema_name
|
||||
AND TABLE_NAME = 'takeover_acs'
|
||||
AND COLUMN_NAME = 'base_id'
|
||||
AND IS_NULLABLE = 'YES';
|
||||
|
||||
SET @alter_takeover_acs_base_id_sql := IF(
|
||||
@takeover_acs_has_base_id = 1 AND @takeover_acs_base_id_is_nullable = 0,
|
||||
'ALTER TABLE takeover_acs MODIFY COLUMN base_id BINARY(16) NULL',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt_alter_takeover_acs_base_id FROM @alter_takeover_acs_base_id_sql;
|
||||
EXECUTE stmt_alter_takeover_acs_base_id;
|
||||
DEALLOCATE PREPARE stmt_alter_takeover_acs_base_id;
|
||||
|
||||
-- +goose Down
|
||||
-- Only restore NOT NULL when there are no NULL rows, so rollback stays safe.
|
||||
|
||||
SET @schema_name := DATABASE();
|
||||
|
||||
SELECT COUNT(*) INTO @takeover_acs_has_base_id
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @schema_name
|
||||
AND TABLE_NAME = 'takeover_acs'
|
||||
AND COLUMN_NAME = 'base_id';
|
||||
|
||||
SELECT COUNT(*) INTO @takeover_acs_null_base_rows
|
||||
FROM takeover_acs
|
||||
WHERE base_id IS NULL
|
||||
AND deleted_at IS NULL;
|
||||
|
||||
SELECT COUNT(*) INTO @takeover_acs_base_id_is_nullable
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @schema_name
|
||||
AND TABLE_NAME = 'takeover_acs'
|
||||
AND COLUMN_NAME = 'base_id'
|
||||
AND IS_NULLABLE = 'YES';
|
||||
|
||||
SET @restore_takeover_acs_base_id_sql := IF(
|
||||
@takeover_acs_has_base_id = 1 AND @takeover_acs_base_id_is_nullable = 1 AND @takeover_acs_null_base_rows = 0,
|
||||
'ALTER TABLE takeover_acs MODIFY COLUMN base_id BINARY(16) NOT NULL',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt_restore_takeover_acs_base_id FROM @restore_takeover_acs_base_id_sql;
|
||||
EXECUTE stmt_restore_takeover_acs_base_id;
|
||||
DEALLOCATE PREPARE stmt_restore_takeover_acs_base_id;
|
||||
Reference in New Issue
Block a user