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