diff --git a/pkg/s3select/sql/analysis.go b/pkg/s3select/sql/analysis.go index b246be4c1..e0a5e8eba 100644 --- a/pkg/s3select/sql/analysis.go +++ b/pkg/s3select/sql/analysis.go @@ -274,6 +274,15 @@ func (e *FuncExpr) analyze(s *Select) (result qProp) { } return result + case sqlFnTrim: + if e.Trim.TrimChars != nil { + result.combine(e.Trim.TrimChars.analyze(s)) + } + if e.Trim.TrimFrom != nil { + result.combine(e.Trim.TrimFrom.analyze(s)) + } + return result + case sqlFnSubstring: errVal := fmt.Errorf("Invalid argument(s) to %s", string(funcName)) result.combine(e.Substring.Expr.analyze(s)) diff --git a/pkg/s3select/sql/funceval.go b/pkg/s3select/sql/funceval.go index 8b968e6bd..51dcbdbd9 100644 --- a/pkg/s3select/sql/funceval.go +++ b/pkg/s3select/sql/funceval.go @@ -337,20 +337,25 @@ func handleSQLSubstring(r Record, e *SubstringFunc) (val *Value, err error) { } func handleSQLTrim(r Record, e *TrimFunc) (res *Value, err error) { - charsV, cerr := e.TrimChars.evalNode(r) - if cerr != nil { - return nil, cerr - } - inferTypeAsString(charsV) - chars, ok := charsV.ToString() - if !ok { - return nil, errNonStringTrimArg + chars := "" + ok := false + if e.TrimChars != nil { + charsV, cerr := e.TrimChars.evalNode(r) + if cerr != nil { + return nil, cerr + } + inferTypeAsString(charsV) + chars, ok = charsV.ToString() + if !ok { + return nil, errNonStringTrimArg + } } fromV, ferr := e.TrimFrom.evalNode(r) if ferr != nil { return nil, ferr } + inferTypeAsString(fromV) from, ok := fromV.ToString() if !ok { return nil, errNonStringTrimArg