package cn.iocoder.yudao.module.qcreport.engine.rule;
|
|
import java.util.List;
|
|
/**
|
* 规则语法树节点。
|
* <p>
|
* 与前端 {@code engine/rule-engine.ts} 的 RuleNode 联合类型一一对应:
|
* 递归下降解析成这棵树后自己求值,全程不碰 eval / 脚本引擎——
|
* 规则文本来自用户,一旦能被当作代码执行就是注入口子。
|
*/
|
public sealed interface RuleNode {
|
|
/** 字面量:数字(Double)/ 字符串 / 布尔 / null */
|
record Literal(Object value) implements RuleNode {
|
}
|
|
/** 上下文路径取值,如 item.actualValue */
|
record Path(String path) implements RuleNode {
|
}
|
|
/** 白名单函数调用 */
|
record Call(String name, List<RuleNode> args) implements RuleNode {
|
}
|
|
/** 一元运算:- 或 ! */
|
record Unary(String operator, RuleNode operand) implements RuleNode {
|
}
|
|
/** 二元运算:AND / OR / = / != / > / >= / < / <= / + / - / * / / */
|
record Binary(String operator, RuleNode left, RuleNode right) implements RuleNode {
|
}
|
|
/** value BETWEEN lower AND upper */
|
record Between(RuleNode value, RuleNode lower, RuleNode upper, boolean negated) implements RuleNode {
|
}
|
|
/** value IN (items) / value NOT IN (items) */
|
record In(RuleNode value, List<RuleNode> items, boolean negated) implements RuleNode {
|
}
|
|
}
|