Add query_boolean_expr docs (#5692)

Signed-off-by: fluorinedog <fluorinedog@gmail.com>
pull/5678/head
FluorineDog 2021-06-10 07:43:49 +08:00 committed by GitHub
parent a0ed3dc8c6
commit 9bdf5acf61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 68 additions and 0 deletions

View File

@ -0,0 +1,68 @@
```haskell
Expr :=
LogicalExpr | NIL
LogicalExpr :=
LogicalExpr BinaryLogicalOp LogicalExpr
| UnaryLogicalOp LogicalExpr
| "(" LogicalExpr ")"
| SingleExpr
BinaryLogicalOp :=
"&&" | "and"
| "||" | "or"
UnaryLogicalOp :=
"not"
SingleExpr :=
TermExpr
| CompareExpr
TermExpr :=
IDENTIFIER "in" ConstantArray
ConstantArray :=
"[" Constant+, "]"
Constant :=
INTERGER
| FLOAT_NUMBER
CompareExpr :=
IDENTIFIER CmpOp Constant
| Constant CmpOp IDENTIFIER
CmpOp :=
">"
| ">="
| "<"
| "<="
| "=="
| "!="
INTERGER := 整数
FLOAT_NUM := 浮点数
IDENTIFIER := 列名
```
注意,
1. NIL 态为空字符串, 代表无 Predicate 的情形
2. ”+,” 代表逗号分隔的,且至少有一个元素的重复元素
语法分析后,执行以下静态检查规则
1. 列名必须存在于 Schema 中,且不是向量类型
2. CompareExpr/TermExpr 要求左右类型匹配
3. 整型列必须对应整型数据
1. 浮点列可以对应浮点数据或整型数据
2. BinaryOp 中,“与操作符” 的优先级高于 “或操作符“
简单举例说明:
```python
A > 3 && A < 4 && (C > 5 || D < 6)
FloatCol in [1.0, 2, 3.0]
Int64Col in [1, 2, 3] or C != 6
```