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

Function NodeFromExpr

expr/node.go:2150–2251  ·  view source on GitHub ↗
(e *Expr)

Source from the content-addressed store, hash-verified

2148 return nl, nil
2149}
2150func NodeFromExpr(e *Expr) (Node, error) {
2151 if e == nil {
2152 return nil, fmt.Errorf("Nil expression?")
2153 }
2154 var n Node
2155 if e.Op != "" {
2156 /*
2157 // Logic, Expressions, Operators etc
2158 TokenMultiply: {Kw: "*", Description: "Multiply"},
2159 TokenMinus: {Kw: "-", Description: "-"},
2160 TokenPlus: {Kw: "+", Description: "+"},
2161 TokenPlusPlus: {Kw: "++", Description: "++"},
2162 TokenPlusEquals: {Kw: "+=", Description: "+="},
2163 TokenDivide: {Kw: "/", Description: "Divide /"},
2164 TokenModulus: {Kw: "%", Description: "Modulus %"},
2165 TokenEqual: {Kw: "=", Description: "Equal"},
2166 TokenEqualEqual: {Kw: "==", Description: "=="},
2167 TokenNE: {Kw: "!=", Description: "NE"},
2168 TokenGE: {Kw: ">=", Description: "GE"},
2169 TokenLE: {Kw: "<=", Description: "LE"},
2170 TokenGT: {Kw: ">", Description: "GT"},
2171 TokenLT: {Kw: "<", Description: "LT"},
2172 TokenIf: {Kw: "if", Description: "IF"},
2173 TokenAnd: {Kw: "&&", Description: "&&"},
2174 TokenOr: {Kw: "||", Description: "||"},
2175 TokenLogicOr: {Kw: "or", Description: "Or"},
2176 TokenLogicAnd: {Kw: "and", Description: "And"},
2177 TokenIN: {Kw: "in", Description: "IN"},
2178 TokenLike: {Kw: "like", Description: "LIKE"},
2179 TokenNegate: {Kw: "not", Description: "NOT"},
2180 TokenBetween: {Kw: "between", Description: "between"},
2181 TokenIs: {Kw: "is", Description: "IS"},
2182 TokenNull: {Kw: "null", Description: "NULL"},
2183 TokenContains: {Kw: "contains", Description: "contains"},
2184 TokenIntersects: {Kw: "intersects", Description: "intersects"},
2185 */
2186 //e.Op = strings.ToUpper(e.Op)
2187 switch strings.ToUpper(e.Op) {
2188 case "EXPR":
2189 // udf
2190 n = &FuncNode{}
2191 case "AND", "OR":
2192 // bool
2193 n = &BooleanNode{}
2194 case "INCLUDE":
2195 n = &IncludeNode{}
2196 case "NOT":
2197 // This is a special Case, it is possible its urnary
2198 // but in general we can collapse it
2199 n = &UnaryNode{}
2200 case "EXISTS":
2201 n = &UnaryNode{}
2202 case "BETWEEN":
2203 n = &TriNode{}
2204 case "=", "-", "+", "++", "+=", "/", "%", "==", "<=", "!=", ">=", ">", "<", "*",
2205 "LIKE", "CONTAINS", "INTERSECTS", "IN":
2206
2207 // very weird special case for FILTER * where the * is an ident not op

Callers 5

TestExprRoundTripFunction · 0.92
parseFilterQlTestFunction · 0.92
FromExprMethod · 0.85
FromExprMethod · 0.85
NodesFromExprsFunction · 0.85

Calls 3

FromExprMethod · 0.95
ErrorfMethod · 0.80
CollapseMethod · 0.65

Tested by 2

TestExprRoundTripFunction · 0.74
parseFilterQlTestFunction · 0.74