Add conditional checking for @things
This commit is contained in:
parent
6077dc2952
commit
d37862e385
1 changed files with 50 additions and 2 deletions
|
@ -72,7 +72,8 @@ func (this *Doc) chkOne(expr *sql.BinaryExpression) (val bool) {
|
|||
switch l := expr.LHS.(type) {
|
||||
|
||||
case *sql.Ident:
|
||||
switch expr.RHS.(type) {
|
||||
|
||||
switch r := expr.RHS.(type) {
|
||||
|
||||
case *sql.Void:
|
||||
if op == sql.EQ {
|
||||
|
@ -95,6 +96,15 @@ func (this *Doc) chkOne(expr *sql.BinaryExpression) (val bool) {
|
|||
return this.current.Exists(l.ID) == true && this.current.Get(l.ID).Data() != nil
|
||||
}
|
||||
|
||||
case *sql.Thing:
|
||||
if thing, ok := this.current.Get(l.ID).Data().(*sql.Thing); ok {
|
||||
if op == sql.EQ {
|
||||
return thing.TB == r.TB && thing.ID == r.ID
|
||||
} else if op == sql.NEQ {
|
||||
return thing.TB != r.TB || thing.ID != r.ID
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -102,7 +112,8 @@ func (this *Doc) chkOne(expr *sql.BinaryExpression) (val bool) {
|
|||
switch r := expr.RHS.(type) {
|
||||
|
||||
case *sql.Ident:
|
||||
switch expr.LHS.(type) {
|
||||
|
||||
switch l := expr.LHS.(type) {
|
||||
|
||||
case *sql.Void:
|
||||
if op == sql.EQ {
|
||||
|
@ -125,6 +136,15 @@ func (this *Doc) chkOne(expr *sql.BinaryExpression) (val bool) {
|
|||
return this.current.Exists(r.ID) == true && this.current.Get(r.ID).Data() != nil
|
||||
}
|
||||
|
||||
case *sql.Thing:
|
||||
if thing, ok := this.current.Get(r.ID).Data().(*sql.Thing); ok {
|
||||
if op == sql.EQ {
|
||||
return thing.TB == l.TB && thing.ID == l.ID
|
||||
} else if op == sql.NEQ {
|
||||
return thing.TB != l.TB || thing.ID != l.ID
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -187,6 +207,16 @@ func (this *Doc) chkOne(expr *sql.BinaryExpression) (val bool) {
|
|||
return chkObject(op, r, l)
|
||||
}
|
||||
|
||||
case *sql.Thing:
|
||||
switch r := rhs.(type) {
|
||||
default:
|
||||
return op == sql.NEQ || op == sql.SNI || op == sql.NIS || op == sql.CONTAINSNONE
|
||||
case *sql.Thing:
|
||||
return chkThing(op, l, r)
|
||||
case string:
|
||||
return chkString(op, r, l.String())
|
||||
}
|
||||
|
||||
case bool:
|
||||
switch r := rhs.(type) {
|
||||
default:
|
||||
|
@ -225,6 +255,8 @@ func (this *Doc) chkOne(expr *sql.BinaryExpression) (val bool) {
|
|||
}
|
||||
case time.Time:
|
||||
return chkString(op, l, r.String())
|
||||
case *sql.Thing:
|
||||
return chkString(op, l, r.String())
|
||||
case *regexp.Regexp:
|
||||
return chkRegex(op, l, r)
|
||||
case []interface{}:
|
||||
|
@ -431,6 +463,22 @@ func chkFloat(op sql.Token, a, b float64) (val bool) {
|
|||
return
|
||||
}
|
||||
|
||||
func chkThing(op sql.Token, a, b *sql.Thing) (val bool) {
|
||||
switch op {
|
||||
case sql.EQ:
|
||||
return a.TB == b.TB && a.ID == b.ID
|
||||
case sql.NEQ:
|
||||
return a.TB != b.TB || a.ID != b.ID
|
||||
case sql.SNI:
|
||||
return true
|
||||
case sql.NIS:
|
||||
return true
|
||||
case sql.CONTAINSNONE:
|
||||
return true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func chkRegex(op sql.Token, a string, r *regexp.Regexp) (val bool) {
|
||||
switch op {
|
||||
case sql.EQ:
|
||||
|
|
Loading…
Reference in a new issue