evalAstExpr evaluates ast expression directly.
(ctx expression.BuildContext, expr ast.ExprNode)
| 69 | |
| 70 | // evalAstExpr evaluates ast expression directly. |
| 71 | func evalAstExpr(ctx expression.BuildContext, expr ast.ExprNode) (types.Datum, error) { |
| 72 | if val, ok := expr.(*driver.ValueExpr); ok { |
| 73 | return val.Datum, nil |
| 74 | } |
| 75 | newExpr, err := buildSimpleExpr(ctx, expr) |
| 76 | if err != nil { |
| 77 | return types.Datum{}, err |
| 78 | } |
| 79 | return newExpr.Eval(ctx.GetEvalCtx(), chunk.Row{}) |
| 80 | } |
| 81 | |
| 82 | // rewriteAstExprWithPlanCtx rewrites ast expression directly. |
| 83 | // Different with expression.BuildSimpleExpr, it uses planner context and is more powerful to build some special expressions |