MCPcopy
hub / github.com/uber/aresdb / Rewrite

Function Rewrite

query/expr/ast.go:585–614  ·  view source on GitHub ↗

Rewrite recursively invokes the rewriter to replace each expression. Nodes are traversed depth-first and rewritten from leaf to root.

(r Rewriter, expr Expr)

Source from the content-addressed store, hash-verified

583// Rewrite recursively invokes the rewriter to replace each expression.
584// Nodes are traversed depth-first and rewritten from leaf to root.
585func Rewrite(r Rewriter, expr Expr) Expr {
586 switch e := expr.(type) {
587 case *UnaryExpr:
588 e.Expr = Rewrite(r, e.Expr)
589
590 case *BinaryExpr:
591 e.LHS = Rewrite(r, e.LHS)
592 e.RHS = Rewrite(r, e.RHS)
593
594 case *Case:
595 for i, cond := range e.WhenThens {
596 cond.When = Rewrite(r, cond.When)
597 cond.Then = Rewrite(r, cond.Then)
598 e.WhenThens[i] = cond
599 }
600 if e.Else != nil {
601 e.Else = Rewrite(r, e.Else)
602 }
603
604 case *ParenExpr:
605 e.Expr = Rewrite(r, e.Expr)
606
607 case *Call:
608 for i, expr := range e.Args {
609 e.Args[i] = Rewrite(r, expr)
610 }
611 }
612
613 return r.Rewrite(expr)
614}
615
616// RewriteFunc rewrites an expression hierarchy.
617func RewriteFunc(e Expr, fn func(Expr) Expr) Expr {

Callers 6

resolveTypesMethod · 0.92
processJoinsMethod · 0.92
processFiltersMethod · 0.92
processMeasuresMethod · 0.92
processDimensionsMethod · 0.92
RewriteFuncFunction · 0.85

Calls 1

RewriteMethod · 0.65

Tested by

no test coverage detected