namespace Admin.NET.Plugin.AiDOP.Service.S8.Rules.DataAccess; /// /// S8-DATASET-PROVIDER-FOUNDATION-1:规则取数模式。 /// /// 用稳定常量而非 bool,因为后续可能出现第三种取数方式(例如事件流 / 外部 API 目录), /// bool 会在那时被迫重构成枚举并污染已有数据。 /// /// 兼容语义:ado_s8_watch_rule.data_access_mode 为 NULL / 空白(132 条历史规则的现状) /// 一律解析为 ,历史规则无需回填即可继续按原路径运行。 /// public static class S8DataAccessMode { /// 历史模式:规则自带 expression(SQL) + data_source_id,经 S8DataSourceRowLoader 取数。 public const string LegacySql = "LEGACY_SQL"; /// 标准数据集模式:规则只引用 dataset_code,由已注册 Provider 返回 canonical 行。 public const string StandardDataset = "STANDARD_DATASET"; /// /// 解析取数模式。NULL / 空白 → (向后兼容)。 /// 未知非空值显式抛错:静默回落 LEGACY_SQL 会让配置错误伪装成"正常运行", /// 而 LEGACY_SQL 路径要求 expression 存在,回落后的报错信息会指向错误的根因。 /// public static string Resolve(string? rawMode) { if (string.IsNullOrWhiteSpace(rawMode)) return LegacySql; var mode = rawMode.Trim(); if (string.Equals(mode, LegacySql, StringComparison.OrdinalIgnoreCase)) return LegacySql; if (string.Equals(mode, StandardDataset, StringComparison.OrdinalIgnoreCase)) return StandardDataset; throw new S8RuleEvaluatorException( "data_access_mode_invalid", $"未知的取数模式 {mode},仅支持 {LegacySql} / {StandardDataset}"); } /// 校验用:判断字符串是否为可接受的取数模式(含 NULL / 空白)。 public static bool IsAcceptable(string? rawMode) { if (string.IsNullOrWhiteSpace(rawMode)) return true; var mode = rawMode.Trim(); return string.Equals(mode, LegacySql, StringComparison.OrdinalIgnoreCase) || string.Equals(mode, StandardDataset, StringComparison.OrdinalIgnoreCase); } }