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

Function rewriteNode

rel/sql_rewrite.go:378–427  ·  view source on GitHub ↗

Remove any aliases

(from *SqlSource, node expr.Node)

Source from the content-addressed store, hash-verified

376
377// Remove any aliases
378func rewriteNode(from *SqlSource, node expr.Node) expr.Node {
379 switch nt := node.(type) {
380 case *expr.IdentityNode:
381 if left, right, ok := nt.LeftRight(); ok {
382 //u.Debugf("rewriteNode from.Name:%v l:%v r:%v", from.alias, left, right)
383 if left == from.alias {
384 in := expr.IdentityNode{Text: right}
385 //u.Warnf("nice, found it! in = %v", in)
386 return &in
387 }
388 }
389 case *expr.NumberNode, *expr.NullNode, *expr.StringNode, *expr.ValueNode:
390 //u.Warnf("skipping? %v", nt.String())
391 return nt
392 case *expr.BinaryNode:
393 switch nt.Operator.T {
394 case lex.TokenAnd, lex.TokenLogicAnd, lex.TokenLogicOr:
395 n1 := rewriteNode(from, nt.Args[0])
396 n2 := rewriteNode(from, nt.Args[1])
397 return &expr.BinaryNode{Operator: nt.Operator, Args: []expr.Node{n1, n2}}
398 case lex.TokenEqual, lex.TokenEqualEqual:
399 n := rewriteNode(from, nt.Args[0])
400 if n != nil {
401 return n
402 }
403 n = rewriteNode(from, nt.Args[1])
404 if n != nil {
405 return n
406 }
407 u.Warnf("Could not find node: %#v", node)
408 default:
409 u.Warnf("un-implemented op: %v", nt.Operator)
410 }
411 case *expr.FuncNode:
412 fn := expr.NewFuncNode(nt.Name, nt.F)
413 fn.Args = make([]expr.Node, len(nt.Args))
414 for i, arg := range nt.Args {
415 fn.Args[i] = rewriteNode(from, arg)
416 if fn.Args[i] == nil {
417 // What???
418 u.Warnf("error, nil node: %s", arg.String())
419 return nil
420 }
421 }
422 return fn
423 default:
424 u.Warnf("%T node types are not suppored yet for column rewrite", node)
425 }
426 return nil
427}

Callers 1

joinNodesForFromFunction · 0.85

Calls 3

NewFuncNodeFunction · 0.92
StringMethod · 0.65
LeftRightMethod · 0.45

Tested by

no test coverage detected