79 lines
5.2 KiB
SQL
79 lines
5.2 KiB
SQL
-- WGT 同一发布记录支持多平台。适用于已执行版本管理建表脚本的 MySQL 5.7/8.0。
|
|
-- 选择目标业务库并备份后执行,可重复运行。业务字段原单平台值无需改写。
|
|
-- 平台字段保存规范 CSV,三个生成有效标记分别约束平台重叠,逻辑删除历史不参与唯一性。
|
|
-- 如既有数据已经存在同版本、重叠平台的记录,索引创建会报告冲突,处理对应记录后可重跑。
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version_package' AND COLUMN_NAME = 'platform') < 64,
|
|
'ALTER TABLE `member_app_version_package` MODIFY COLUMN `platform` varchar(64) NOT NULL COMMENT ''规范CSV目标平台,android/ios/harmony''',
|
|
'SELECT ''member_app_version_package.platform already supports multiple targets'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND COLUMN_NAME = 'platform') < 64,
|
|
'ALTER TABLE `member_app_version` MODIFY COLUMN `platform` varchar(64) NOT NULL COMMENT ''规范CSV目标平台,android/ios/harmony''',
|
|
'SELECT ''member_app_version.platform already supports multiple targets'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND COLUMN_NAME = 'android_active_flag') = 0,
|
|
'ALTER TABLE `member_app_version` ADD COLUMN `android_active_flag` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted` = 0 AND LOCATE('',android,'', CONCAT('','', `platform`, '','')) > 0 THEN 1 ELSE NULL END) STORED COMMENT ''android有效目标唯一标记''',
|
|
'SELECT ''android_active_flag already exists'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND INDEX_NAME = 'uk_app_version_android_active') = 0,
|
|
'ALTER TABLE `member_app_version` ADD UNIQUE KEY `uk_app_version_android_active` (`tenant_id`,`app_id`,`package_type`,`version_code`,`android_active_flag`)',
|
|
'SELECT ''uk_app_version_android_active already exists'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND COLUMN_NAME = 'ios_active_flag') = 0,
|
|
'ALTER TABLE `member_app_version` ADD COLUMN `ios_active_flag` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted` = 0 AND LOCATE('',ios,'', CONCAT('','', `platform`, '','')) > 0 THEN 1 ELSE NULL END) STORED COMMENT ''ios有效目标唯一标记''',
|
|
'SELECT ''ios_active_flag already exists'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND INDEX_NAME = 'uk_app_version_ios_active') = 0,
|
|
'ALTER TABLE `member_app_version` ADD UNIQUE KEY `uk_app_version_ios_active` (`tenant_id`,`app_id`,`package_type`,`version_code`,`ios_active_flag`)',
|
|
'SELECT ''uk_app_version_ios_active already exists'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND COLUMN_NAME = 'harmony_active_flag') = 0,
|
|
'ALTER TABLE `member_app_version` ADD COLUMN `harmony_active_flag` tinyint GENERATED ALWAYS AS (CASE WHEN `deleted` = 0 AND LOCATE('',harmony,'', CONCAT('','', `platform`, '','')) > 0 THEN 1 ELSE NULL END) STORED COMMENT ''harmony有效目标唯一标记''',
|
|
'SELECT ''harmony_active_flag already exists'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SET @app_platform_sql = IF(
|
|
(SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'member_app_version' AND INDEX_NAME = 'uk_app_version_harmony_active') = 0,
|
|
'ALTER TABLE `member_app_version` ADD UNIQUE KEY `uk_app_version_harmony_active` (`tenant_id`,`app_id`,`package_type`,`version_code`,`harmony_active_flag`)',
|
|
'SELECT ''uk_app_version_harmony_active already exists'' AS migration_step'
|
|
);
|
|
PREPARE app_platform_stmt FROM @app_platform_sql;
|
|
EXECUTE app_platform_stmt;
|
|
DEALLOCATE PREPARE app_platform_stmt;
|
|
|
|
SHOW INDEX FROM `member_app_version` WHERE Key_name IN ('uk_app_version_android_active', 'uk_app_version_ios_active', 'uk_app_version_harmony_active');
|