Eval implements the TypedExpr interface.
(ctx *EvalContext)
| 3100 | |
| 3101 | // Eval implements the TypedExpr interface. |
| 3102 | func (expr *AndExpr) Eval(ctx *EvalContext) (Datum, error) { |
| 3103 | left, err := expr.Left.(TypedExpr).Eval(ctx) |
| 3104 | if err != nil { |
| 3105 | return nil, err |
| 3106 | } |
| 3107 | if left != DNull { |
| 3108 | if v, err := GetBool(left); err != nil { |
| 3109 | return nil, err |
| 3110 | } else if !v { |
| 3111 | return left, nil |
| 3112 | } |
| 3113 | } |
| 3114 | right, err := expr.Right.(TypedExpr).Eval(ctx) |
| 3115 | if err != nil { |
| 3116 | return nil, err |
| 3117 | } |
| 3118 | if right == DNull { |
| 3119 | return DNull, nil |
| 3120 | } |
| 3121 | if v, err := GetBool(right); err != nil { |
| 3122 | return nil, err |
| 3123 | } else if !v { |
| 3124 | return right, nil |
| 3125 | } |
| 3126 | return left, nil |
| 3127 | } |
| 3128 | |
| 3129 | // Eval implements the TypedExpr interface. |
| 3130 | func (expr *BinaryExpr) Eval(ctx *EvalContext) (Datum, error) { |