1.0.509.verify.sql 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. -- 1.0.509.verify.sql
  2. -- 契约(CURRENT.md > F-11):禁 SET @var · 每条返回 1/0 · 一条一断言 · 末条为真 SELECT。
  3. -- 断言强度沿用 Phase 1 Final Review:UK 断言**精确列序**(CREATE TABLE IF NOT EXISTS 会静默 no-op,
  4. -- 只数列数会放过结构漂移);字符串等值一律 COLLATE utf8mb4_bin(biz_key_expr 大小写是致命维度)。
  5. SELECT (SELECT COUNT(*) FROM information_schema.TABLES
  6. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('mdp_stg_s0_emp_work_duty','mdp_stg_s0_line_post')) = 2;
  7. SELECT (SELECT COUNT(*) FROM information_schema.TABLES
  8. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('bridge_employee_work_duty','dim_line_post','bridge_line_post_skill')) = 3;
  9. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  10. FROM information_schema.STATISTICS
  11. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_stg_s0_emp_work_duty'
  12. AND INDEX_NAME = 'uk_stg_s0_emp_work_duty' AND NON_UNIQUE = 0), '')
  13. = 'tenant_id,source_system,source_table,source_row_id';
  14. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  15. FROM information_schema.STATISTICS
  16. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_stg_s0_line_post'
  17. AND INDEX_NAME = 'uk_stg_s0_line_post' AND NON_UNIQUE = 0), '')
  18. = 'tenant_id,source_system,source_table,source_row_id';
  19. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  20. FROM information_schema.STATISTICS
  21. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bridge_employee_work_duty'
  22. AND INDEX_NAME = 'uk_bridge_employee_work_duty' AND NON_UNIQUE = 0), '')
  23. = 'tenant_id,employee_code,duty,location_code';
  24. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  25. FROM information_schema.STATISTICS
  26. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_line_post'
  27. AND INDEX_NAME = 'uk_dim_line_post' AND NON_UNIQUE = 0), '')
  28. = 'tenant_id,line_code,job_no';
  29. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  30. FROM information_schema.STATISTICS
  31. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bridge_line_post_skill'
  32. AND INDEX_NAME = 'uk_bridge_line_post_skill' AND NON_UNIQUE = 0), '')
  33. = 'tenant_id,line_code,job_no,skill_code';
  34. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  35. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('bridge_employee_work_duty','dim_line_post','bridge_line_post_skill')
  36. AND COLUMN_NAME = 'tenant_id' AND IS_NULLABLE = 'NO') = 3;
  37. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  38. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('mdp_stg_s0_emp_work_duty','mdp_stg_s0_line_post')
  39. AND COLUMN_NAME = 'tenant_id' AND IS_NULLABLE = 'NO') = 2;
  40. SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
  41. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_line_post'
  42. AND INDEX_NAME = 'uk_dim_line_post' AND COLUMN_NAME IN ('domain_code','company_id','factory_id')) = 0;
  43. SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
  44. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bridge_line_post_skill'
  45. AND INDEX_NAME = 'uk_bridge_line_post_skill' AND COLUMN_NAME IN ('domain_code','company_id','factory_id')) = 0;
  46. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  47. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_line_post'
  48. AND COLUMN_NAME = 'run_crew' AND NUMERIC_PRECISION = 10 AND NUMERIC_SCALE = 3) = 1;
  49. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  50. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bridge_line_post_skill'
  51. AND COLUMN_NAME = 'effective_date' AND IS_NULLABLE = 'YES') = 1;
  52. SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
  53. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bridge_line_post_skill'
  54. AND NON_UNIQUE = 0
  55. AND COLUMN_NAME IN ('legacy_line_skill_rec_id','legacy_person_skill_id')) = 0;
  56. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  57. WHERE `entity_code` = 'S0_EMP_WORK_DUTY'
  58. AND `biz_key_expr` COLLATE utf8mb4_bin = 'Employee,Duty,Location'
  59. AND `source_table_name` COLLATE utf8mb4_bin = 'EmpWorkDutyMaster'
  60. AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_emp_work_duty'
  61. AND `status` = 1 AND `sync_mode` = 'FULL' AND `incr_column` IS NULL) = 1;
  62. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  63. WHERE `entity_code` = 'S0_LINE_POST'
  64. AND `biz_key_expr` COLLATE utf8mb4_bin = 'ProdLine,JOBNo'
  65. AND `source_table_name` COLLATE utf8mb4_bin = 'LineSkillMaster'
  66. AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_line_post'
  67. AND `status` = 1 AND `sync_mode` = 'FULL' AND `incr_column` IS NULL) = 1;
  68. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  69. WHERE `entity_code` = 'S0_LINE_POST_SKILL'
  70. AND `biz_key_expr` COLLATE utf8mb4_bin = 'ProdLine,JOBNo,SkillNo'
  71. AND `source_table_name` COLLATE utf8mb4_bin = 'LineSkillDetail'
  72. AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_line_post'
  73. AND `status` = 1 AND `sync_mode` = 'FULL' AND `incr_column` IS NULL) = 1;
  74. SELECT (SELECT COUNT(*) FROM `mdp_entity` WHERE `source_table_name` = 'EmpSkills') = 0;