| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- -- 1.0.506.verify.sql
- -- 契约(CURRENT.md > F-11,由 AutoVersionUpdate.RunVerifyScriptIfExists 逐条执行取首行首列判真):
- -- ① 禁止 SET @var(返回 null 即判失败)→ 一律内联子查询,每条语句自包含
- -- ② 每条返回「通过为真」的标量(用 = 期望值 得 1/0),不得返回错误条数
- -- ③ 一条语句一个断言,不用 UNION 汇总
- -- ④ 文件以最后一条 SQL 的分号结束,末尾不得残留 comment-only 块
- -- 本文件只做结构级断言:migration 执行时 dim 尚无数据,数据正确性由 S0DimReconciler 在刷新时验证。
- --
- -- 断言强度沿用 Phase 1 Final Review 的补强结论,勿弱化:
- -- · UK 一律断言「精确列序」而非列数(CREATE TABLE IF NOT EXISTS 对已存在表静默 no-op,
- -- 只数列数会放过结构漂移)。
- -- · 字符串等值一律加 COLLATE utf8mb4_bin(表默认 utf8mb4_0900_ai_ci 大小写不敏感,
- -- 而 biz_key_expr 的大小写正是致命维度:写错即静默退化成 source_row_id)。
- SELECT (SELECT COUNT(*) FROM information_schema.TABLES
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME IN ('mdp_stg_s0_employee','mdp_stg_s0_line')) = 2;
- SELECT (SELECT COUNT(*) FROM information_schema.TABLES
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME IN ('dim_employee','dim_line')) = 2;
- SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
- FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_stg_s0_employee'
- AND INDEX_NAME = 'uk_stg_s0_employee' AND NON_UNIQUE = 0), '')
- = 'tenant_id,source_system,source_table,source_row_id';
- SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
- FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_stg_s0_line'
- AND INDEX_NAME = 'uk_stg_s0_line' AND NON_UNIQUE = 0), '')
- = 'tenant_id,source_system,source_table,source_row_id';
- SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
- FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_employee'
- AND INDEX_NAME = 'uk_dim_employee' AND NON_UNIQUE = 0), '')
- = 'tenant_id,employee_code';
- SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
- FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_line'
- AND INDEX_NAME = 'uk_dim_line' AND NON_UNIQUE = 0), '')
- = 'tenant_id,line_code';
- SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME IN ('dim_employee','dim_line')
- AND COLUMN_NAME = 'tenant_id' AND IS_NULLABLE = 'NO') = 2;
- SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME IN ('mdp_stg_s0_employee','mdp_stg_s0_line')
- AND COLUMN_NAME = 'tenant_id' AND IS_NULLABLE = 'NO') = 2;
- SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME IN ('mdp_stg_s0_employee','mdp_stg_s0_line')
- AND COLUMN_NAME = 'source_biz_key' AND CHARACTER_MAXIMUM_LENGTH = 300) = 2;
- SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_employee'
- AND COLUMN_NAME = 'sys_user_id' AND IS_NULLABLE = 'YES') = 1;
- SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_employee'
- AND NON_UNIQUE = 0 AND COLUMN_NAME = 'sys_user_id') = 0;
- SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_employee'
- AND COLUMN_NAME = 'department_code' AND IS_NULLABLE = 'YES') = 1;
- SELECT (SELECT COUNT(*) FROM `mdp_entity`
- WHERE `entity_code` IN ('S0_EMPLOYEE','S0_LINE')
- AND `status` = 1 AND `sync_mode` = 'FULL' AND `incr_column` IS NULL) = 2;
- SELECT (SELECT COUNT(*) FROM `mdp_entity` e JOIN `mdp_source` s ON s.`id` = e.`source_id`
- WHERE e.`entity_code` IN ('S0_EMPLOYEE','S0_LINE')
- AND s.`source_code` = 'AIDOPDEV_MYSQL') = 2;
- SELECT (SELECT COUNT(*) FROM `mdp_entity`
- WHERE `entity_code` = 'S0_EMPLOYEE'
- AND `biz_key_expr` COLLATE utf8mb4_bin = 'Employee'
- AND `source_table_name` COLLATE utf8mb4_bin = 'EmployeeMaster'
- AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_employee'
- AND `batch_size` > 613) = 1;
- SELECT (SELECT COUNT(*) FROM `mdp_entity`
- WHERE `entity_code` = 'S0_LINE'
- AND `biz_key_expr` COLLATE utf8mb4_bin = 'Line'
- AND `source_table_name` COLLATE utf8mb4_bin = 'LineMaster'
- AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_line'
- AND `batch_size` > 109) = 1;
- SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_employee'
- AND INDEX_NAME = 'uk_dim_employee'
- AND COLUMN_NAME IN ('domain_code','company_id','factory_id','sys_user_id')) = 0;
- SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_line'
- AND INDEX_NAME = 'uk_dim_line'
- AND COLUMN_NAME IN ('domain_code','company_id','factory_id')) = 0;
- SELECT (SELECT COUNT(*) FROM `mdp_entity`
- WHERE `target_table_name` IN ('mdp_stg_employee','mdp_stg_line','mdp_stg_location')
- AND `entity_code` LIKE 'S0\_%') = 0;
|