docs/design_docs/20220105-query_boolean_expr.md
Expr :=
LogicalExpr | NIL
LogicalExpr :=
LogicalExpr BinaryLogicalOp LogicalExpr
| UnaryLogicalOp LogicalExpr
| "(" LogicalExpr ")"
| SingleExpr
BinaryLogicalOp :=
"&&" | "and"
| "||" | "or"
UnaryLogicalOp :=
"not"
SingleExpr :=
TermExpr
| CompareExpr
TermExpr :=
IDENTIFIER "in" ConstantArray
ConstantArray :=
"[" ConstantExpr { "," ConstantExpr } "]"
ConstantExpr :=
Constant
| ConstantExpr BinaryArithOp ConstantExpr
| UnaryArithOp ConstantExpr
Constant :=
INTEGER
| FLOAT_NUMBER
UnaryArithOp :=
"+"
| "-"
BinaryArithOp :=
"+"
| "-"
| "*"
| "/"
| "%"
| "**"
CompareExpr :=
IDENTIFIER CmpOp IDENTIFIER
| IDENTIFIER CmpOp ConstantExpr
| ConstantExpr CmpOp IDENTIFIER
| ConstantExpr CmpOpRestricted IDENTIFIER CmpOpRestricted ConstantExpr
CmpOpRestricted :=
"<"
| "<="
CmpOp :=
">"
| ">="
| "<"
| "<="
| "=="
| "!="
INTEGER := 整数
FLOAT_NUM := 浮点数
IDENTIFIER := 列名
Tips:
{...}.After syntax analysis, the following rules will be applied:
and/&& operator has a higher priority than the or/|| operator.Example:
A > 3 && A < 4 && (C > 5 || D < 6)
1 < A <= 2.0 + 3 - 4 * 5 / 6 % 7 ** 8
A == B
FloatCol in [1.0, 2, 3.0]
Int64Col in [1, 2, 3] or C != 6