(e *dag.BinaryExpr)
| 105 | } |
| 106 | |
| 107 | func (b *Builder) compileBinary(e *dag.BinaryExpr) (expr.Evaluator, error) { |
| 108 | lhs, err := b.compileExpr(e.LHS) |
| 109 | if err != nil { |
| 110 | return nil, err |
| 111 | } |
| 112 | rhs, err := b.compileExpr(e.RHS) |
| 113 | if err != nil { |
| 114 | return nil, err |
| 115 | } |
| 116 | switch op := e.Op; op { |
| 117 | case "and": |
| 118 | return expr.NewLogicalAnd(b.sctx(), lhs, rhs), nil |
| 119 | case "or": |
| 120 | return expr.NewLogicalOr(b.sctx(), lhs, rhs), nil |
| 121 | case "in": |
| 122 | return expr.NewIn(b.sctx(), lhs, rhs), nil |
| 123 | case "==", "!=": |
| 124 | return expr.NewCompareEquality(b.sctx(), lhs, rhs, op) |
| 125 | case "<", "<=", ">", ">=": |
| 126 | return expr.NewCompareRelative(b.sctx(), lhs, rhs, op) |
| 127 | case "+", "-", "*", "/", "%": |
| 128 | return expr.NewArithmetic(b.sctx(), op, lhs, rhs) |
| 129 | default: |
| 130 | return nil, fmt.Errorf("invalid binary operator %s", op) |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | func (b *Builder) compileSearch(search *dag.SearchExpr) (expr.Evaluator, error) { |
| 135 | val, err := sup.ParseValue(b.sctx(), search.Value) |
no test coverage detected