s3 select: Infer types for comparison (#9438)

master
Klaus Post 5 years ago committed by GitHub
parent 20766069a8
commit e4900b99d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      pkg/s3select/select_test.go
  2. 4
      pkg/s3select/sql/evaluate.go

@ -573,6 +573,16 @@ func TestCSVQueries2(t *testing.T) {
query: `SELECT num2 from s3object s WHERE id = 2`, query: `SELECT num2 from s3object s WHERE id = 2`,
wantResult: `{"num2":" 0.765111"}`, 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", name: "select-float-by-val",
query: `SELECT num2 from s3object s WHERE num2 = 0.765111`, query: `SELECT num2 from s3object s WHERE num2 = 0.765111`,

@ -250,6 +250,9 @@ func (e *In) evalInNode(r Record, lhs *Value) (*Value, error) {
// Compare two values in terms of in-ness. // Compare two values in terms of in-ness.
var cmp func(a, b Value) bool var cmp func(a, b Value) bool
cmp = func(a, b Value) bool { cmp = func(a, b Value) bool {
// Convert if needed.
inferTypesForCmp(&a, &b)
if a.Equals(b) { if a.Equals(b) {
return true return true
} }
@ -272,7 +275,6 @@ func (e *In) evalInNode(r Record, lhs *Value) (*Value, error) {
aF, aOK := a.ToFloat() aF, aOK := a.ToFloat()
bF, bOK := b.ToFloat() bF, bOK := b.ToFloat()
// FIXME: more type inference?
return aOK && bOK && aF == bF return aOK && bOK && aF == bF
} }

Loading…
Cancel
Save