Eval implements the TypedExpr interface.
(ctx *EvalContext)
| 3128 | |
| 3129 | // Eval implements the TypedExpr interface. |
| 3130 | func (expr *BinaryExpr) Eval(ctx *EvalContext) (Datum, error) { |
| 3131 | left, err := expr.Left.(TypedExpr).Eval(ctx) |
| 3132 | if err != nil { |
| 3133 | return nil, err |
| 3134 | } |
| 3135 | if left == DNull && !expr.fn.NullableArgs { |
| 3136 | return DNull, nil |
| 3137 | } |
| 3138 | right, err := expr.Right.(TypedExpr).Eval(ctx) |
| 3139 | if err != nil { |
| 3140 | return nil, err |
| 3141 | } |
| 3142 | if right == DNull && !expr.fn.NullableArgs { |
| 3143 | return DNull, nil |
| 3144 | } |
| 3145 | res, err := expr.fn.Fn(ctx, left, right) |
| 3146 | if err != nil { |
| 3147 | return nil, err |
| 3148 | } |
| 3149 | if ctx.TestingKnobs.AssertBinaryExprReturnTypes { |
| 3150 | if err := ensureExpectedType(expr.fn.ReturnType, res); err != nil { |
| 3151 | return nil, errors.NewAssertionErrorWithWrappedErrf(err, |
| 3152 | "binary op %q", expr) |
| 3153 | } |
| 3154 | } |
| 3155 | return res, err |
| 3156 | } |
| 3157 | |
| 3158 | // Eval implements the TypedExpr interface. |
| 3159 | func (expr *CaseExpr) Eval(ctx *EvalContext) (Datum, error) { |
no test coverage detected