mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-07 01:28:27 +08:00
Fix logical expression (#26513)
Signed-off-by: longjiquan <jiquan.long@zilliz.com>
This commit is contained in:
parent
bed034a44b
commit
d9aa8ff545
@ -780,7 +780,7 @@ func (v *ParserVisitor) VisitUnary(ctx *parser.UnaryContext) interface{} {
|
|||||||
case parser.PlanParserADD:
|
case parser.PlanParserADD:
|
||||||
return childExpr
|
return childExpr
|
||||||
case parser.PlanParserNOT:
|
case parser.PlanParserNOT:
|
||||||
if !typeutil.IsBoolType(childExpr.dataType) {
|
if !canBeExecuted(childExpr) {
|
||||||
return fmt.Errorf("%s op can only be applied on boolean expression", unaryLogicalNameMap[parser.PlanParserNOT])
|
return fmt.Errorf("%s op can only be applied on boolean expression", unaryLogicalNameMap[parser.PlanParserNOT])
|
||||||
}
|
}
|
||||||
return &ExprWithType{
|
return &ExprWithType{
|
||||||
@ -828,7 +828,7 @@ func (v *ParserVisitor) VisitLogicalOr(ctx *parser.LogicalOrContext) interface{}
|
|||||||
leftExpr = getExpr(left)
|
leftExpr = getExpr(left)
|
||||||
rightExpr = getExpr(right)
|
rightExpr = getExpr(right)
|
||||||
|
|
||||||
if !typeutil.IsBoolType(leftExpr.dataType) || !typeutil.IsBoolType(rightExpr.dataType) {
|
if !canBeExecuted(leftExpr) || !canBeExecuted(rightExpr) {
|
||||||
return fmt.Errorf("'or' can only be used between boolean expressions")
|
return fmt.Errorf("'or' can only be used between boolean expressions")
|
||||||
}
|
}
|
||||||
expr := &planpb.Expr{
|
expr := &planpb.Expr{
|
||||||
@ -876,7 +876,7 @@ func (v *ParserVisitor) VisitLogicalAnd(ctx *parser.LogicalAndContext) interface
|
|||||||
leftExpr = getExpr(left)
|
leftExpr = getExpr(left)
|
||||||
rightExpr = getExpr(right)
|
rightExpr = getExpr(right)
|
||||||
|
|
||||||
if !typeutil.IsBoolType(leftExpr.dataType) || !typeutil.IsBoolType(rightExpr.dataType) {
|
if !canBeExecuted(leftExpr) || !canBeExecuted(rightExpr) {
|
||||||
return fmt.Errorf("'and' can only be used between boolean expressions")
|
return fmt.Errorf("'and' can only be used between boolean expressions")
|
||||||
}
|
}
|
||||||
expr := &planpb.Expr{
|
expr := &planpb.Expr{
|
||||||
|
|||||||
@ -478,6 +478,9 @@ func TestExpr_Invalid(t *testing.T) {
|
|||||||
`BoolField`,
|
`BoolField`,
|
||||||
`true`,
|
`true`,
|
||||||
`false`,
|
`false`,
|
||||||
|
`Int64Field > 100 and BoolField`,
|
||||||
|
`Int64Field < 100 or false`, // maybe this can be optimized.
|
||||||
|
`!BoolField`,
|
||||||
}
|
}
|
||||||
for _, exprStr := range exprStrs {
|
for _, exprStr := range exprStrs {
|
||||||
_, err := ParseExpr(helper, exprStr)
|
_, err := ParseExpr(helper, exprStr)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user