Eval implements the TypedExpr interface.
(ctx *EvalContext)
| 4220 | |
| 4221 | // Eval implements the TypedExpr interface. |
| 4222 | func (expr *OrExpr) Eval(ctx *EvalContext) (Datum, error) { |
| 4223 | left, err := expr.Left.(TypedExpr).Eval(ctx) |
| 4224 | if err != nil { |
| 4225 | return nil, err |
| 4226 | } |
| 4227 | if left != DNull { |
| 4228 | if v, err := GetBool(left); err != nil { |
| 4229 | return nil, err |
| 4230 | } else if v { |
| 4231 | return left, nil |
| 4232 | } |
| 4233 | } |
| 4234 | right, err := expr.Right.(TypedExpr).Eval(ctx) |
| 4235 | if err != nil { |
| 4236 | return nil, err |
| 4237 | } |
| 4238 | if right == DNull { |
| 4239 | return DNull, nil |
| 4240 | } |
| 4241 | if v, err := GetBool(right); err != nil { |
| 4242 | return nil, err |
| 4243 | } else if v { |
| 4244 | return right, nil |
| 4245 | } |
| 4246 | if left == DNull { |
| 4247 | return DNull, nil |
| 4248 | } |
| 4249 | return DBoolFalse, nil |
| 4250 | } |
| 4251 | |
| 4252 | // Eval implements the TypedExpr interface. |
| 4253 | func (expr *ParenExpr) Eval(ctx *EvalContext) (Datum, error) { |