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