59 lines
1.9 KiB
SQL
59 lines
1.9 KiB
SQL
-- +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;
|