MCPcopy Create free account
hub / github.com/araddon/qlbridge / walkFilterBinary

Method walkFilterBinary

datasource/sqlite/sqlrewrite.go:267–327  ·  view source on GitHub ↗

Binary Node: operations for >, >=, <, <=, =, !=, AND, OR, Like, IN x = y => db.users.find({field: {"$eq": value}}) x != y => db.inventory.find( { qty: { $ne: 20 } } ) x like "list%" => db.users.find( { user_id: /^list/ } ) x like "%list%" => db.users.find( { u

(node *expr.BinaryNode)

Source from the content-addressed store, hash-verified

265// x IN [a,b,c] => db.users.find( { user_id: {"$in":[a,b,c] } } )
266//
267func (m *rewrite) walkFilterBinary(node *expr.BinaryNode) (expr.Node, error) {
268
269 // If we have to recurse deeper for AND, OR operators
270 switch node.Operator.T {
271 case lex.TokenNE:
272 if node.Args[1].String() == "NULL" {
273 //u.Errorf("we found something wrong werener")
274 //return expr.NewIdentityNodeVal(fmt.Sprintf("%s IS NOT NULL", node.Args[0])), nil
275 node.Operator.V = "IS NOT NULL"
276 node.Args[1] = expr.NewIdentityNodeVal("")
277 //u.Warnf("rh %#v", node.Args[1])
278 }
279 return node, nil
280 // case lex.TokenLogicOr:
281 // lh, err := m.walkNode(node.Args[0])
282 // rh, err2 := m.walkNode(node.Args[1])
283 // if err != nil || err2 != nil {
284 // u.Errorf("could not get children nodes? %v %v %v", err, err2, node)
285 // return nil, fmt.Errorf("could not evaluate: %v", node.String())
286 // }
287 // node.Args[0] = lh
288 // node.Args[1] = rh
289 // return node, nil
290 }
291
292 //u.Debugf("walkBinary: %v l:%v r:%v %T %T", node, lhval, rhval, lhval, rhval)
293 switch node.Operator.T {
294 case lex.TokenEqual, lex.TokenEqualEqual:
295
296 case lex.TokenNE:
297 // db.inventory.find( { qty: { $ne: 20 } } )
298
299 case lex.TokenLE:
300 // db.inventory.find( { qty: { $lte: 20 } } )
301
302 case lex.TokenLT:
303 // db.inventory.find( { qty: { $lt: 20 } } )
304
305 case lex.TokenGE:
306 // db.inventory.find( { qty: { $gte: 20 } } )
307
308 case lex.TokenGT:
309 // db.inventory.find( { qty: { $gt: 20 } } )
310
311 case lex.TokenLike:
312 // { $text: { $search: <string>, $language: <string> } }
313 // { <field>: { $regex: /pattern/, $options: '<options>' } }
314
315 case lex.TokenIN:
316 // switch vt := node.Args[1].(type) {
317 // case value.SliceValue:
318 // default:
319 // u.Warnf("not implemented type %#v", rhval)
320 // }
321
322 default:
323 u.Warnf("not implemented: %v", node.Operator)
324 }

Callers 1

walkNodeMethod · 0.95

Calls 2

NewIdentityNodeValFunction · 0.92
StringMethod · 0.65

Tested by

no test coverage detected