Fix precendence bug in S3Select SQL IN clauses (#18708)

Fixes a precendence issue in SQL Select where `a in b and c = 3` was parsed as `a
in (b and c = 3)`.

Fixes #18682
This commit is contained in:
Aditya Manthramurthy
2023-12-22 23:19:11 -08:00
committed by GitHub
parent 8bd4f6568b
commit 496027b589
5 changed files with 57 additions and 12 deletions

View File

@@ -289,13 +289,23 @@ func (e *In) evalInNode(r Record, lhs *Value, tableAlias string) (*Value, error)
}
var rhs Value
if elt := e.ListExpression; elt != nil {
eltVal, err := elt.evalNode(r, tableAlias)
var err error
var eltVal *Value
switch {
case e.JPathExpr != nil:
eltVal, err = e.JPathExpr.evalNode(r, tableAlias)
if err != nil {
return nil, err
}
rhs = *eltVal
case e.ListExpr != nil:
eltVal, err = e.ListExpr.evalNode(r, tableAlias)
if err != nil {
return nil, err
}
default:
return nil, errInvalidASTNode
}
rhs = *eltVal
// If RHS is array compare each element.
if arr, ok := rhs.ToArray(); ok {