diff --git a/pkg/s3select/select_test.go b/pkg/s3select/select_test.go index d1113d9f0..86f6f8c43 100644 --- a/pkg/s3select/select_test.go +++ b/pkg/s3select/select_test.go @@ -573,6 +573,16 @@ func TestCSVQueries2(t *testing.T) { query: `SELECT num2 from s3object s WHERE id = 2`, wantResult: `{"num2":" 0.765111"}`, }, + { + name: "select-in-array", + query: `select id from S3Object s WHERE id in [1,3]`, + wantResult: `{"id":"1"}`, + }, + { + name: "select-in-array-matchnone", + query: `select id from S3Object s WHERE s.id in [4,3]`, + wantResult: ``, + }, { name: "select-float-by-val", query: `SELECT num2 from s3object s WHERE num2 = 0.765111`, diff --git a/pkg/s3select/sql/evaluate.go b/pkg/s3select/sql/evaluate.go index a2c9d3b52..d15f45c8a 100644 --- a/pkg/s3select/sql/evaluate.go +++ b/pkg/s3select/sql/evaluate.go @@ -250,6 +250,9 @@ func (e *In) evalInNode(r Record, lhs *Value) (*Value, error) { // Compare two values in terms of in-ness. var cmp func(a, b Value) bool cmp = func(a, b Value) bool { + // Convert if needed. + inferTypesForCmp(&a, &b) + if a.Equals(b) { return true } @@ -272,7 +275,6 @@ func (e *In) evalInNode(r Record, lhs *Value) (*Value, error) { aF, aOK := a.ToFloat() bF, bOK := b.ToFloat() - // FIXME: more type inference? return aOK && bOK && aF == bF }