本文整理汇总了Golang中github.com/pingcap/tidb/ast.ExprNode类的典型用法代码示例。如果您正苦于以下问题:Golang ExprNode类的具体用法?Golang ExprNode怎么用?Golang ExprNode使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ExprNode类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: rewrite
// rewrite function rewrites ast expr to expression.Expression.
// aggMapper maps ast.AggregateFuncExpr to the columns offset in p's output schema.
// asScalar means whether this expression must be treated as a scalar expression.
// And this function returns a result expression, a new plan that may have apply or semi-join.
func (b *planBuilder) rewrite(expr ast.ExprNode, p LogicalPlan, aggMapper map[*ast.AggregateFuncExpr]int, asScalar bool) (
expression.Expression, LogicalPlan, error) {
er := &expressionRewriter{
p: p,
aggrMap: aggMapper,
b: b,
asScalar: asScalar,
ctx: b.ctx,
}
if p != nil {
er.schema = p.GetSchema()
}
expr.Accept(er)
if er.err != nil {
return nil, nil, errors.Trace(er.err)
}
if !asScalar && len(er.ctxStack) == 0 {
return nil, er.p, nil
}
if len(er.ctxStack) != 1 {
return nil, nil, errors.Errorf("context len %v is invalid", len(er.ctxStack))
}
if getRowLen(er.ctxStack[0]) != 1 {
return nil, nil, ErrOperandColumns.GenByArgs(1)
}
result := expression.FoldConstant(b.ctx, er.ctxStack[0])
return result, er.p, nil
}
开发者ID:pingcap,项目名称:tidb,代码行数:32,代码来源:expression_rewriter.go
示例2: convertExpr
func convertExpr(converter *expressionConverter, expr ast.ExprNode) (expression.Expression, error) {
expr.Accept(converter)
if converter.err != nil {
return nil, errors.Trace(converter.err)
}
return converter.exprMap[expr], nil
}
开发者ID:zebozhuang,项目名称:tidb,代码行数:7,代码来源:convert_expr.go
示例3: Eval
// Eval evaluates an expression to a value.
func Eval(ctx context.Context, expr ast.ExprNode) (interface{}, error) {
e := &Evaluator{ctx: ctx}
expr.Accept(e)
if e.err != nil {
return nil, errors.Trace(e.err)
}
return expr.GetValue(), nil
}
开发者ID:mrtoms,项目名称:tidb,代码行数:9,代码来源:evaluator.go
示例4: EvalDatum
// EvalDatum evaluates an expression to a datum.
func EvalDatum(ctx context.Context, expr ast.ExprNode) (d types.Datum, err error) {
e := &Evaluator{ctx: ctx}
expr.Accept(e)
if e.err != nil {
return d, errors.Trace(e.err)
}
return *expr.GetDatum(), nil
}
开发者ID:astaxie,项目名称:tidb,代码行数:9,代码来源:evaluator.go
示例5: rewrite
func (b *planBuilder) rewrite(expr ast.ExprNode, p Plan, aggMapper map[*ast.AggregateFuncExpr]int) (newExpr expression.Expression, newPlan Plan, correlated bool, err error) {
er := &expressionRewriter{p: p, aggrMap: aggMapper, schema: p.GetSchema(), b: b}
expr.Accept(er)
if er.err != nil {
return nil, nil, false, errors.Trace(er.err)
}
if len(er.ctxStack) != 1 {
return nil, nil, false, errors.Errorf("context len %v is invalid", len(er.ctxStack))
}
return er.ctxStack[0], er.p, er.correlated, nil
}
开发者ID:anywhy,项目名称:tidb,代码行数:11,代码来源:expression_rewriter.go
示例6: attachCondition
// attachCondition tries to attach a condition as deep as possible.
// availablePaths are paths join before this path.
// onCond represents whether the conditions is from current join's on condition. The on condition from other joins is treated as where condition.
func (p *joinPath) attachCondition(condition ast.ExprNode, availablePaths []*joinPath, onCond bool) (attached bool) {
filterRate := guesstimateFilterRate(condition)
// table
if p.table != nil || p.subquery != nil {
attacher := conditionAttachChecker{targetPath: p, availablePaths: availablePaths}
condition.Accept(&attacher)
if attacher.invalid {
return false
}
p.conditions = append(p.conditions, condition)
p.filterRate *= filterRate
return true
}
// inner join
if len(p.inners) > 0 {
for _, in := range p.inners {
if in.attachCondition(condition, availablePaths, false) {
p.filterRate *= filterRate
return true
}
}
attacher := &conditionAttachChecker{targetPath: p, availablePaths: availablePaths}
condition.Accept(attacher)
if attacher.invalid {
return false
}
p.conditions = append(p.conditions, condition)
p.filterRate *= filterRate
return true
}
// outer join
if p.outer.attachCondition(condition, availablePaths, false) {
p.filterRate *= filterRate
return true
}
// can't attach any where condition
if onCond && p.inner.attachCondition(condition, availablePaths, false) {
p.filterRate *= filterRate
return true
}
return false
}
开发者ID:anywhy,项目名称:tidb,代码行数:46,代码来源:planbuilder_join.go
示例7: exprToPBExpr
// exprToPBExpr converts an ast.ExprNode to a tipb.Expr, if not supported, nil will be returned.
func (b *executorBuilder) exprToPBExpr(client kv.Client, expr ast.ExprNode, tn *ast.TableName) *tipb.Expr {
switch x := expr.(type) {
case *ast.ValueExpr, *ast.ParamMarkerExpr:
return b.datumToPBExpr(client, *expr.GetDatum())
case *ast.ColumnNameExpr:
return b.columnNameToPBExpr(client, x, tn)
case *ast.BinaryOperationExpr:
return b.binopToPBExpr(client, x, tn)
case *ast.ParenthesesExpr:
return b.exprToPBExpr(client, x.Expr, tn)
case *ast.PatternLikeExpr:
return b.likeToPBExpr(client, x, tn)
case *ast.UnaryOperationExpr:
return b.unaryToPBExpr(client, x, tn)
case *ast.PatternInExpr:
return b.patternInToPBExpr(client, x, tn)
case *ast.SubqueryExpr:
return b.subqueryToPBExpr(client, x)
case *ast.AggregateFuncExpr:
return b.aggFuncToPBExpr(client, x, tn)
default:
return nil
}
}
开发者ID:duzhanyuan,项目名称:tidb,代码行数:25,代码来源:executor_xapi.go
示例8: rewrite
// rewrite function rewrites ast expr to expression.Expression.
// aggMapper maps ast.AggregateFuncExpr to the columns offset in p's output schema.
// asScalar means whether this expression must be treated as a scalar expression.
func (b *planBuilder) rewrite(expr ast.ExprNode, p LogicalPlan, aggMapper map[*ast.AggregateFuncExpr]int, asScalar bool) (
newExpr expression.Expression, newPlan LogicalPlan, correlated bool, err error) {
er := &expressionRewriter{
p: p,
aggrMap: aggMapper,
schema: p.GetSchema(),
b: b,
asScalar: asScalar,
}
expr.Accept(er)
if er.err != nil {
return nil, nil, false, errors.Trace(er.err)
}
if !asScalar && len(er.ctxStack) == 0 {
return nil, er.p, er.correlated, nil
}
if len(er.ctxStack) != 1 {
return nil, nil, false, errors.Errorf("context len %v is invalid", len(er.ctxStack))
}
if getRowLen(er.ctxStack[0]) != 1 {
return nil, nil, false, errors.New("Operand should contain 1 column(s)")
}
return er.ctxStack[0], er.p, er.correlated, nil
}
开发者ID:yangxuanjia,项目名称:tidb,代码行数:27,代码来源:expression_rewriter.go
示例9: addCastToString
// AddCastToString adds a cast function to string type if the expr charset is not UTF8.
func (v *typeInferrer) addCastToString(expr ast.ExprNode) ast.ExprNode {
if !mysql.IsUTF8Charset(expr.GetType().Charset) {
castTp := types.NewFieldType(mysql.TypeString)
castTp.Charset, castTp.Collate = types.DefaultCharsetForType(mysql.TypeString)
if val, ok := expr.(*ast.ValueExpr); ok {
newVal, err := val.Datum.ConvertTo(v.sc, castTp)
if err != nil {
v.err = errors.Trace(err)
}
expr.SetDatum(newVal)
} else {
castFunc := &ast.FuncCastExpr{
Expr: expr,
Tp: castTp,
FunctionType: ast.CastFunction,
}
expr = castFunc
}
expr.SetType(castTp)
}
return expr
}
开发者ID:pingcap,项目名称:tidb,代码行数:23,代码来源:typeinferer.go
示例10: Eval
// Eval evaluates an expression to a datum.
func Eval(ctx context.Context, expr ast.ExprNode) (d types.Datum, err error) {
if ast.IsEvaluated(expr) {
return *expr.GetDatum(), nil
}
e := &Evaluator{ctx: ctx}
expr.Accept(e)
if e.err != nil {
return d, errors.Trace(e.err)
}
if ast.IsPreEvaluable(expr) && (expr.GetFlag()&ast.FlagHasFunc == 0) {
expr.SetFlag(expr.GetFlag() | ast.FlagPreEvaluated)
}
return *expr.GetDatum(), nil
}
开发者ID:yangxuanjia,项目名称:tidb,代码行数:15,代码来源:evaluator.go
注:本文中的github.com/pingcap/tidb/ast.ExprNode类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论