-- 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;
