diff --git a/internal/s3select/select_test.go b/internal/s3select/select_test.go index c2fea80f5..c46183ebb 100644 --- a/internal/s3select/select_test.go +++ b/internal/s3select/select_test.go @@ -794,6 +794,14 @@ func TestCSVQueries2(t *testing.T) { query: `select * from S3object where _2 IS NOT ''`, wantResult: `{"c1":"1","c2":"2","c3":"3"}`, }, + { + name: "select-is_not_string", + input: []byte(`c1,c2,c3 +1,2,3 +1,,3`), + query: `select * from S3object where _2 != '' AND _2 > 1`, + wantResult: `{"c1":"1","c2":"2","c3":"3"}`, + }, } defRequest := ` diff --git a/internal/s3select/sql/evaluate.go b/internal/s3select/sql/evaluate.go index 1ebef61d8..a8a729f94 100644 --- a/internal/s3select/sql/evaluate.go +++ b/internal/s3select/sql/evaluate.go @@ -69,6 +69,9 @@ func (e *Expression) evalNode(r Record, tableAlias string) (*Value, error) { if !ok { return nil, errExpectedBool } + if b { + return FromBool(true), nil + } result = result || b } return FromBool(result), nil @@ -91,6 +94,9 @@ func (e *AndCondition) evalNode(r Record, tableAlias string) (*Value, error) { if !ok { return nil, errExpectedBool } + if !b { + return FromBool(false), nil + } result = result && b } return FromBool(result), nil