Empty strings now match an EMPTY sql clause

This commit is contained in:
Tobie Morgan Hitchcock 2018-02-17 09:23:51 +00:00
parent bece5d1f07
commit 069baf71b7
2 changed files with 18 additions and 4 deletions

View file

@ -592,6 +592,8 @@ func binaryCheck(op sql.Token, l, r, lo, ro interface{}, d *data.Doc) interface{
return op == sql.EQ return op == sql.EQ
case *sql.Empty: case *sql.Empty:
return op == sql.EQ return op == sql.EQ
case string:
return chkLen(op, r)
case []interface{}: case []interface{}:
return chkArrayR(op, l, r) return chkArrayR(op, l, r)
case map[string]interface{}: case map[string]interface{}:
@ -640,6 +642,8 @@ func binaryCheck(op sql.Token, l, r, lo, ro interface{}, d *data.Doc) interface{
} }
case time.Time: case time.Time:
return chkString(op, l, r.String()) return chkString(op, l, r.String())
case *sql.Empty:
return chkLen(op, l)
case *sql.Thing: case *sql.Thing:
return chkString(op, l, r.String()) return chkString(op, l, r.String())
case *regexp.Regexp: case *regexp.Regexp:
@ -769,6 +773,16 @@ func chkOp(op sql.Token) int8 {
} }
} }
func chkLen(op sql.Token, s string) (val bool) {
switch op {
case sql.EQ:
return len(s) == 0
case sql.NEQ:
return len(s) != 0
}
return negOp(op)
}
func chkBool(op sql.Token, a, b bool) (val bool) { func chkBool(op sql.Token, a, b bool) (val bool) {
switch op { switch op {
case sql.EQ: case sql.EQ:

View file

@ -467,7 +467,7 @@ func TestFetch(t *testing.T) {
So(err, ShouldBeNil) So(err, ShouldBeNil)
So(res, ShouldHaveLength, 46) So(res, ShouldHaveLength, 46)
So(res[2].Result, ShouldHaveLength, 0) So(res[2].Result, ShouldHaveLength, 1)
So(res[3].Result, ShouldHaveLength, 1) So(res[3].Result, ShouldHaveLength, 1)
So(res[4].Result, ShouldHaveLength, 1) So(res[4].Result, ShouldHaveLength, 1)
So(res[5].Result, ShouldHaveLength, 1) So(res[5].Result, ShouldHaveLength, 1)
@ -476,7 +476,7 @@ func TestFetch(t *testing.T) {
So(res[8].Result, ShouldHaveLength, 1) So(res[8].Result, ShouldHaveLength, 1)
So(res[9].Result, ShouldHaveLength, 1) So(res[9].Result, ShouldHaveLength, 1)
So(res[10].Result, ShouldHaveLength, 0) So(res[10].Result, ShouldHaveLength, 1)
So(res[11].Result, ShouldHaveLength, 1) So(res[11].Result, ShouldHaveLength, 1)
So(res[12].Result, ShouldHaveLength, 1) So(res[12].Result, ShouldHaveLength, 1)
So(res[13].Result, ShouldHaveLength, 1) So(res[13].Result, ShouldHaveLength, 1)
@ -485,7 +485,7 @@ func TestFetch(t *testing.T) {
So(res[16].Result, ShouldHaveLength, 1) So(res[16].Result, ShouldHaveLength, 1)
So(res[17].Result, ShouldHaveLength, 1) So(res[17].Result, ShouldHaveLength, 1)
So(res[18].Result, ShouldHaveLength, 1) So(res[18].Result, ShouldHaveLength, 0)
So(res[19].Result, ShouldHaveLength, 0) So(res[19].Result, ShouldHaveLength, 0)
So(res[20].Result, ShouldHaveLength, 0) So(res[20].Result, ShouldHaveLength, 0)
So(res[21].Result, ShouldHaveLength, 0) So(res[21].Result, ShouldHaveLength, 0)
@ -494,7 +494,7 @@ func TestFetch(t *testing.T) {
So(res[24].Result, ShouldHaveLength, 0) So(res[24].Result, ShouldHaveLength, 0)
So(res[25].Result, ShouldHaveLength, 0) So(res[25].Result, ShouldHaveLength, 0)
So(res[26].Result, ShouldHaveLength, 1) So(res[26].Result, ShouldHaveLength, 0)
So(res[27].Result, ShouldHaveLength, 0) So(res[27].Result, ShouldHaveLength, 0)
So(res[28].Result, ShouldHaveLength, 0) So(res[28].Result, ShouldHaveLength, 0)
So(res[29].Result, ShouldHaveLength, 0) So(res[29].Result, ShouldHaveLength, 0)