1.0.507.verify.sql 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. -- 1.0.507.verify.sql
  2. -- 契约见 CURRENT.md > F-11:禁 SET @var · 每条返回 1/0 · 一条一断言 · 末条为真 SELECT。
  3. -- 断言强度沿用 Phase 1 Final Review 结论:UK 断言精确列序;字符串等值加 COLLATE utf8mb4_bin。
  4. SELECT (SELECT COUNT(*) FROM information_schema.TABLES
  5. WHERE TABLE_SCHEMA = DATABASE()
  6. AND TABLE_NAME IN ('mdp_stg_s0_customer','mdp_stg_s0_person_skill')) = 2;
  7. SELECT (SELECT COUNT(*) FROM information_schema.TABLES
  8. WHERE TABLE_SCHEMA = DATABASE()
  9. AND TABLE_NAME IN ('dim_customer','dim_person_skill')) = 2;
  10. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  11. FROM information_schema.STATISTICS
  12. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_stg_s0_customer'
  13. AND INDEX_NAME = 'uk_stg_s0_customer' AND NON_UNIQUE = 0), '')
  14. = 'tenant_id,source_system,source_table,source_row_id';
  15. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  16. FROM information_schema.STATISTICS
  17. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_stg_s0_person_skill'
  18. AND INDEX_NAME = 'uk_stg_s0_person_skill' AND NON_UNIQUE = 0), '')
  19. = 'tenant_id,source_system,source_table,source_row_id';
  20. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  21. FROM information_schema.STATISTICS
  22. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_customer'
  23. AND INDEX_NAME = 'uk_dim_customer' AND NON_UNIQUE = 0), '')
  24. = 'tenant_id,customer_code';
  25. SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
  26. FROM information_schema.STATISTICS
  27. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_person_skill'
  28. AND INDEX_NAME = 'uk_dim_person_skill' AND NON_UNIQUE = 0), '')
  29. = 'tenant_id,skill_code';
  30. SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
  31. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_customer'
  32. AND INDEX_NAME = 'uk_dim_customer'
  33. AND COLUMN_NAME IN ('domain_code','company_id','factory_id')) = 0;
  34. SELECT (SELECT COUNT(*) FROM information_schema.STATISTICS
  35. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_person_skill'
  36. AND INDEX_NAME = 'uk_dim_person_skill'
  37. AND COLUMN_NAME IN ('company_id','factory_id')) = 0;
  38. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  39. WHERE TABLE_SCHEMA = DATABASE()
  40. AND TABLE_NAME IN ('dim_customer','dim_person_skill')
  41. AND COLUMN_NAME = 'tenant_id' AND IS_NULLABLE = 'NO') = 2;
  42. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  43. WHERE TABLE_SCHEMA = DATABASE()
  44. AND TABLE_NAME IN ('mdp_stg_s0_customer','mdp_stg_s0_person_skill')
  45. AND COLUMN_NAME = 'tenant_id' AND IS_NULLABLE = 'NO') = 2;
  46. SELECT (SELECT COUNT(*) FROM information_schema.COLUMNS
  47. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'dim_person_skill'
  48. AND COLUMN_NAME = 'source_updated_at' AND IS_NULLABLE = 'YES') = 1;
  49. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  50. WHERE `entity_code` IN ('S0_CUSTOMER','S0_PERSON_SKILL')
  51. AND `status` = 1 AND `sync_mode` = 'FULL' AND `incr_column` IS NULL) = 2;
  52. SELECT (SELECT COUNT(*) FROM `mdp_entity` e JOIN `mdp_source` s ON s.`id` = e.`source_id`
  53. WHERE e.`entity_code` IN ('S0_CUSTOMER','S0_PERSON_SKILL')
  54. AND s.`source_code` = 'AIDOPDEV_MYSQL') = 2;
  55. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  56. WHERE `entity_code` = 'S0_CUSTOMER'
  57. AND `biz_key_expr` COLLATE utf8mb4_bin = 'Cust'
  58. AND `source_table_name` COLLATE utf8mb4_bin = 'CustMaster'
  59. AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_customer'
  60. AND `batch_size` > 1267) = 1;
  61. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  62. WHERE `entity_code` = 'S0_PERSON_SKILL'
  63. AND `biz_key_expr` COLLATE utf8mb4_bin = 'Code'
  64. AND `source_table_name` COLLATE utf8mb4_bin = 'PersonSkill'
  65. AND `target_table_name` COLLATE utf8mb4_bin = 'mdp_stg_s0_person_skill'
  66. AND `batch_size` > 36) = 1;
  67. SELECT (SELECT COUNT(*) FROM `mdp_entity`
  68. WHERE `target_table_name` = 'mdp_stg_customer'
  69. AND `entity_code` LIKE 'S0\_%') = 0;