| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- -- WIP-P0A-CLEANUP.verify.sql
- -- P0-A 数据纠偏的执行后校验。返回单列 ok:1 = 全部断言通过,0 = 任一失败。
- -- 提交前随主脚本一并 rename 为 1.0.<next>.verify.sql 并注册 csproj Copy 条目。
- --
- -- V1 std 种群 A 归零且仅剩真实 PW
- -- V2 DWD 行数等于保全子集行数
- -- V3 po_no / po_line 无 NULL 且无空串
- -- V4 新唯一键下无重复
- -- V5 唯一键 DDL 真实存在且列序正确
- -- V6 租户守卫 CHECK 恰好一套、无语义重复
- -- V7 保全历史与迁移前子集完全一致
- -- V8 非法租户未混入
- SELECT CASE WHEN
- -- V1 · std:种群 A 归零
- (
- SELECT COUNT(*) FROM `mdp_std_process_outsource_order`
- WHERE `sync_batch_id` LIKE 'S3\_MDP\_%' AND `source_biz_key` NOT LIKE '%|%'
- AND `work_order` = '' AND `po_no` IS NULL AND `po_line` IS NULL
- ) = 0
- -- V1b · std:幸存者全部是真实 PW(biz_key 含管道符且 po_no 非空)
- AND (
- SELECT COUNT(*) FROM `mdp_std_process_outsource_order`
- WHERE `source_biz_key` NOT LIKE '%|%' OR IFNULL(`po_no`,'') = ''
- ) = 0
- -- V1c · std:幸存者数量必须大于 0(防止误把整表清空)
- AND (SELECT COUNT(*) FROM `mdp_std_process_outsource_order`) > 0
- -- V2 · DWD 行数 == 保全子集行数(迁移刚完成时,尚未跑新批次)
- AND (SELECT COUNT(*) FROM `dwd_process_outsource_delivery`)
- = (SELECT COUNT(*) FROM `dwd_process_outsource_delivery_keep_p0a`
- WHERE `tenant_id` NOT IN (0,1,1300000000001)
- AND IFNULL(`po_no`,'') <> '' AND IFNULL(`po_line`,'') <> '')
- -- V3 · NULL / 空串:收口后 po_no / po_line 既不为 NULL 也不为空串
- AND (SELECT COUNT(*) FROM `dwd_process_outsource_delivery` WHERE `po_no` IS NULL) = 0
- AND (SELECT COUNT(*) FROM `dwd_process_outsource_delivery` WHERE `po_line` IS NULL) = 0
- AND (SELECT COUNT(*) FROM `dwd_process_outsource_delivery` WHERE `po_no` = '') = 0
- AND (SELECT COUNT(*) FROM `dwd_process_outsource_delivery` WHERE `po_line` = '') = 0
- -- V3b · 列定义确已收口为 NOT NULL
- AND (
- SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='dwd_process_outsource_delivery'
- AND COLUMN_NAME IN ('po_no','po_line') AND IS_NULLABLE='YES'
- ) = 0
- -- V4 · 新唯一键下无重复
- AND (
- SELECT COUNT(*) FROM (
- SELECT 1 FROM `dwd_process_outsource_delivery`
- GROUP BY `tenant_id`,`factory_id`,`stat_date`,`po_no`,`po_line`
- HAVING COUNT(*) > 1
- ) dup
- ) = 0
- -- V5 · 唯一键 DDL 存在、恰好 5 列、且列序完全正确
- AND (
- SELECT COUNT(*) FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='dwd_process_outsource_delivery'
- AND INDEX_NAME='uk_po_line_stat' AND NON_UNIQUE=0
- ) = 5
- AND (
- SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',')
- FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='dwd_process_outsource_delivery'
- AND INDEX_NAME='uk_po_line_stat'
- ) = 'tenant_id,factory_id,stat_date,po_no,po_line'
- -- V5b · 旧唯一键已移除(否则膨胀语义仍在)
- AND (
- SELECT COUNT(*) FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='dwd_process_outsource_delivery'
- AND INDEX_NAME='uk_work_op_stat'
- ) = 0
- -- V6 · 租户守卫 CHECK 恰好一套,且名字是稳定名(无语义重复)
- AND (
- SELECT COUNT(*) FROM information_schema.CHECK_CONSTRAINTS cc
- JOIN information_schema.TABLE_CONSTRAINTS tc
- ON tc.CONSTRAINT_SCHEMA=cc.CONSTRAINT_SCHEMA AND tc.CONSTRAINT_NAME=cc.CONSTRAINT_NAME
- WHERE tc.TABLE_SCHEMA=DATABASE() AND tc.TABLE_NAME='dwd_process_outsource_delivery'
- AND tc.CONSTRAINT_TYPE='CHECK'
- AND cc.CHECK_CLAUSE LIKE '%tenant_id%' AND cc.CHECK_CLAUSE LIKE '%1300000000001%'
- ) = 1
- AND (
- SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS
- WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='dwd_process_outsource_delivery'
- AND CONSTRAINT_TYPE='CHECK' AND CONSTRAINT_NAME='ck_dwd_process_outsource_valid_tenant'
- ) = 1
- -- V7 · 保全历史与迁移前子集完全一致(按业务键集合双向比对,差集为 0)
- AND (
- SELECT COUNT(*) FROM `dwd_process_outsource_delivery_keep_p0a` k
- WHERE k.`tenant_id` NOT IN (0,1,1300000000001)
- AND IFNULL(k.`po_no`,'') <> '' AND IFNULL(k.`po_line`,'') <> ''
- AND NOT EXISTS (
- SELECT 1 FROM `dwd_process_outsource_delivery` d
- WHERE d.`tenant_id`=k.`tenant_id` AND d.`factory_id`=k.`factory_id`
- AND d.`stat_date`=k.`stat_date` AND d.`po_no`=k.`po_no` AND d.`po_line`=k.`po_line`
- )
- ) = 0
- AND (
- SELECT COUNT(*) FROM `dwd_process_outsource_delivery` d
- WHERE NOT EXISTS (
- SELECT 1 FROM `dwd_process_outsource_delivery_keep_p0a` k
- WHERE k.`tenant_id`=d.`tenant_id` AND k.`factory_id`=d.`factory_id`
- AND k.`stat_date`=d.`stat_date` AND k.`po_no`=d.`po_no` AND k.`po_line`=d.`po_line`
- )
- ) = 0
- -- V8 · 非法租户未混入 DWD
- AND (SELECT COUNT(*) FROM `dwd_process_outsource_delivery` WHERE `tenant_id` IN (0,1,1300000000001)) = 0
- -- V9 · 元数据留证已写入,且记录了清理前的量级
- AND (
- SELECT COUNT(*) FROM `aidop_migration_derived_cleanup_log`
- WHERE `migration_version`='WIP-P0A' AND `table_name`='dwd_process_outsource_delivery'
- AND `estimated_rows` > 1000000
- ) = 1
- -- V10 · std 备份表存在且非空(回滚路径可用)
- AND (SELECT COUNT(*) FROM `mdp_std_process_outsource_order_bak_p0a`) > 0
- THEN 1 ELSE 0 END AS ok;
|