1.0.478.sql 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. -- S8-DATASET-PROVIDER-FOUNDATION-1 · Rule 取数模式扩展(幂等)
  2. --
  3. -- 目的:为 ado_s8_watch_rule 增加 data_access_mode / dataset_code 两列,
  4. -- 使规则可以从"自带 SQL"逐步过渡到"引用标准数据集"。
  5. --
  6. -- 兼容性硬约束(本脚本刻意不做的事):
  7. -- · 两列均 NULL 允许,不设默认值 —— 132 条历史规则保持 NULL,
  8. -- 运行期由 S8DataAccessMode.Resolve(NULL) 解析为 LEGACY_SQL,行为完全不变;
  9. -- · 不回填任何历史行;
  10. -- · 不修改 enabled;
  11. -- · 不修改 expression / params_json / data_source_id;
  12. -- · 不新增索引(当前无按取数模式检索的查询)。
  13. --
  14. -- 重跑安全:列存在时跳过。
  15. -- ============ ① data_access_mode ============
  16. SET @exist := (SELECT COUNT(*) FROM information_schema.COLUMNS
  17. WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s8_watch_rule' AND COLUMN_NAME='data_access_mode');
  18. SET @sql := IF(@exist=0,
  19. 'ALTER TABLE ado_s8_watch_rule ADD COLUMN data_access_mode VARCHAR(32) NULL COMMENT ''取数模式 LEGACY_SQL/STANDARD_DATASET;NULL 按 LEGACY_SQL 处理''',
  20. 'SELECT 1');
  21. PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
  22. -- ============ ② dataset_code ============
  23. SET @exist := (SELECT COUNT(*) FROM information_schema.COLUMNS
  24. WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ado_s8_watch_rule' AND COLUMN_NAME='dataset_code');
  25. SET @sql := IF(@exist=0,
  26. 'ALTER TABLE ado_s8_watch_rule ADD COLUMN dataset_code VARCHAR(64) NULL COMMENT ''标准数据集编码;仅 STANDARD_DATASET 模式使用''',
  27. 'SELECT 1');
  28. PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
  29. -- ============ ③ 验证(不改数据,仅回显)============
  30. -- 期望:两列存在;历史规则两列全部为 NULL(即全部继续走 LEGACY_SQL)。
  31. SELECT
  32. COUNT(*) AS total_rules,
  33. SUM(CASE WHEN data_access_mode IS NULL THEN 1 ELSE 0 END) AS legacy_by_null,
  34. SUM(CASE WHEN dataset_code IS NULL THEN 1 ELSE 0 END) AS dataset_code_null
  35. FROM ado_s8_watch_rule;