Skip to content

Commit

Permalink
*: remove ctx from function args. (pingcap#2566)
Browse files Browse the repository at this point in the history
  • Loading branch information
hanfei1991 authored and shenli committed Jan 28, 2017
1 parent 92208e2 commit e68dcf7
Show file tree
Hide file tree
Showing 15 changed files with 43 additions and 45 deletions.
6 changes: 3 additions & 3 deletions executor/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ func (e *ProjectionExec) Next() (retRow *Row, err error) {
Data: make([]types.Datum, 0, len(e.exprs)),
}
for _, expr := range e.exprs {
val, err := expr.Eval(srcRow.Data, e.ctx)
val, err := expr.Eval(srcRow.Data)
if err != nil {
return nil, errors.Trace(err)
}
Expand Down Expand Up @@ -716,7 +716,7 @@ func (e *SortExec) Next() (*Row, error) {
key: make([]types.Datum, len(e.ByItems)),
}
for i, byItem := range e.ByItems {
orderRow.key[i], err = byItem.Expr.Eval(srcRow.Data, e.ctx)
orderRow.key[i], err = byItem.Expr.Eval(srcRow.Data)
if err != nil {
return nil, errors.Trace(err)
}
Expand Down Expand Up @@ -811,7 +811,7 @@ func (e *TopnExec) Next() (*Row, error) {
key: make([]types.Datum, len(e.ByItems)),
}
for i, byItem := range e.ByItems {
orderRow.key[i], err = byItem.Expr.Eval(srcRow.Data, e.ctx)
orderRow.key[i], err = byItem.Expr.Eval(srcRow.Data)
if err != nil {
return nil, errors.Trace(err)
}
Expand Down
6 changes: 3 additions & 3 deletions executor/executor_agg.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func (e *HashAggExec) Next() (*Row, error) {

func (e *HashAggExec) getGroupKey(row *Row) ([]byte, error) {
if e.aggType == plan.FinalAgg {
val, err := e.GroupByItems[0].Eval(row.Data, e.ctx)
val, err := e.GroupByItems[0].Eval(row.Data)
if err != nil {
return nil, errors.Trace(err)
}
Expand All @@ -103,7 +103,7 @@ func (e *HashAggExec) getGroupKey(row *Row) ([]byte, error) {
}
vals := make([]types.Datum, 0, len(e.GroupByItems))
for _, item := range e.GroupByItems {
v, err := item.Eval(row.Data, e.ctx)
v, err := item.Eval(row.Data)
if err != nil {
return nil, errors.Trace(err)
}
Expand Down Expand Up @@ -238,7 +238,7 @@ func (e *StreamAggExec) meetNewGroup(row *Row) (bool, error) {
}
sc := e.Ctx.GetSessionVars().StmtCtx
for i, item := range e.GroupByItems {
v, err := item.Eval(row.Data, e.Ctx)
v, err := item.Eval(row.Data)
if err != nil {
return false, errors.Trace(err)
}
Expand Down
2 changes: 1 addition & 1 deletion executor/executor_join.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ func getHashKey(sc *variable.StatementContext, cols []*expression.Column, row *R
vals []types.Datum, bytes []byte) (bool, []byte, error) {
var err error
for i, col := range cols {
vals[i], err = col.Eval(row.Data, nil)
vals[i], err = col.Eval(row.Data)
if err != nil {
return false, nil, errors.Trace(err)
}
Expand Down
4 changes: 2 additions & 2 deletions executor/executor_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (e *SetExecutor) executeSet() error {
name := strings.ToLower(v.Name)
if !v.IsSystem {
// Set user variable.
value, err := v.Expr.Eval(nil, e.ctx)
value, err := v.Expr.Eval(nil)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -176,7 +176,7 @@ func (e *SetExecutor) getVarValue(v *expression.VarAssignment, sysVar *variable.
}
return
}
value, err = v.Expr.Eval(nil, e.ctx)
value, err = v.Expr.Eval(nil)
return value, errors.Trace(err)
}

Expand Down
6 changes: 3 additions & 3 deletions executor/executor_write.go
Original file line number Diff line number Diff line change
Expand Up @@ -784,7 +784,7 @@ func (e *InsertValues) getRows(cols []*table.Column) (rows [][]types.Datum, err
func (e *InsertValues) getRow(cols []*table.Column, list []expression.Expression) ([]types.Datum, error) {
vals := make([]types.Datum, len(list))
for i, expr := range list {
val, err := expr.Eval(nil, e.ctx)
val, err := expr.Eval(nil)
vals[i] = val
if err != nil {
return nil, errors.Trace(err)
Expand Down Expand Up @@ -934,7 +934,7 @@ func (e *InsertExec) onDuplicateUpdate(row []types.Datum, h int64, cols map[int]
newData[i] = c
continue
}
val, err1 := asgn.Expr.Eval(data, e.ctx)
val, err1 := asgn.Expr.Eval(data)
if err1 != nil {
return errors.Trace(err1)
}
Expand Down Expand Up @@ -1174,7 +1174,7 @@ func (e *UpdateExec) fetchRows() error {
data[i] = row.Data[i]
newData[i] = data[i]
if e.OrderedList[i] != nil {
val, err := e.OrderedList[i].Expr.Eval(row.Data, e.ctx)
val, err := e.OrderedList[i].Expr.Eval(row.Data)
if err != nil {
return errors.Trace(err)
}
Expand Down
2 changes: 1 addition & 1 deletion executor/prepared.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ func (e *ExecuteExec) Build() error {
}

for i, usingVar := range e.UsingVars {
val, err := usingVar.Eval(nil, e.Ctx)
val, err := usingVar.Eval(nil)
if err != nil {
return errors.Trace(err)
}
Expand Down
24 changes: 12 additions & 12 deletions expression/aggregation.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ func (af *aggFunction) SetContext(ctx map[string](*aggEvaluateContext)) {
func (af *aggFunction) updateSum(row []types.Datum, groupKey []byte, ectx context.Context) error {
ctx := af.getContext(groupKey)
a := af.Args[0]
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand All @@ -278,7 +278,7 @@ func (af *aggFunction) updateSum(row []types.Datum, groupKey []byte, ectx contex
func (af *aggFunction) streamUpdateSum(row []types.Datum, ectx context.Context) error {
ctx := af.getStreamedContext()
a := af.Args[0]
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -418,7 +418,7 @@ func (cf *countFunction) Update(row []types.Datum, groupKey []byte, ectx context
vals = make([]interface{}, 0, len(cf.Args))
}
for _, a := range cf.Args {
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -455,7 +455,7 @@ func (cf *countFunction) StreamUpdate(row []types.Datum, ectx context.Context) e
vals = make([]interface{}, 0, len(cf.Args))
}
for _, a := range cf.Args {
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -521,7 +521,7 @@ func (af *avgFunction) GetType() *types.FieldType {
func (af *avgFunction) updateAvg(row []types.Datum, groupKey []byte, ectx context.Context) error {
ctx := af.getContext(groupKey)
a := af.Args[1]
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand All @@ -541,7 +541,7 @@ func (af *avgFunction) updateAvg(row []types.Datum, groupKey []byte, ectx contex
if err != nil {
return errors.Trace(err)
}
count, err := af.Args[0].Eval(row, ectx)
count, err := af.Args[0].Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -618,7 +618,7 @@ func (cf *concatFunction) Update(row []types.Datum, groupKey []byte, ectx contex
ctx := cf.getContext(groupKey)
vals := make([]interface{}, 0, len(cf.Args))
for _, a := range cf.Args {
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -654,7 +654,7 @@ func (cf *concatFunction) StreamUpdate(row []types.Datum, ectx context.Context)
ctx := cf.getStreamedContext()
vals := make([]interface{}, 0, len(cf.Args))
for _, a := range cf.Args {
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -766,7 +766,7 @@ func (mmf *maxMinFunction) Update(row []types.Datum, groupKey []byte, ectx conte
return errors.New("Wrong number of args for AggFuncMaxMin")
}
a := mmf.Args[0]
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -794,7 +794,7 @@ func (mmf *maxMinFunction) StreamUpdate(row []types.Datum, ectx context.Context)
return errors.New("Wrong number of args for AggFuncMaxMin")
}
a := mmf.Args[0]
value, err := a.Eval(row, ectx)
value, err := a.Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -843,7 +843,7 @@ func (ff *firstRowFunction) Update(row []types.Datum, groupKey []byte, ectx cont
if len(ff.Args) != 1 {
return errors.New("Wrong number of args for AggFuncFirstRow")
}
value, err := ff.Args[0].Eval(row, ectx)
value, err := ff.Args[0].Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand All @@ -861,7 +861,7 @@ func (ff *firstRowFunction) StreamUpdate(row []types.Datum, ectx context.Context
if len(ff.Args) != 1 {
return errors.New("Wrong number of args for AggFuncFirstRow")
}
value, err := ff.Args[0].Eval(row, ectx)
value, err := ff.Args[0].Eval(row)
if err != nil {
return errors.Trace(err)
}
Expand Down
2 changes: 1 addition & 1 deletion expression/builtin.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func newBaseBuiltinFunc(args []Expression, ctx context.Context) baseBuiltinFunc

func (b *baseBuiltinFunc) evalArgs(row []types.Datum) (_ []types.Datum, err error) {
for i, arg := range b.args {
b.argValues[i], err = arg.Eval(row, b.ctx)
b.argValues[i], err = arg.Eval(row)
if err != nil {
return nil, errors.Trace(err)
}
Expand Down
8 changes: 4 additions & 4 deletions expression/builtin_op.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ type builtinAndAndSig struct {
}

func (b *builtinAndAndSig) eval(row []types.Datum) (d types.Datum, err error) {
leftDatum, err := b.args[0].Eval(row, b.ctx)
leftDatum, err := b.args[0].Eval(row)
if err != nil {
return d, errors.Trace(err)
}
Expand All @@ -69,7 +69,7 @@ func (b *builtinAndAndSig) eval(row []types.Datum) (d types.Datum, err error) {
return
}
}
rightDatum, err := b.args[1].Eval(row, b.ctx)
rightDatum, err := b.args[1].Eval(row)
if err != nil {
return d, errors.Trace(err)
}
Expand Down Expand Up @@ -103,7 +103,7 @@ type builtinOrOrSig struct {
}

func (b *builtinOrOrSig) eval(row []types.Datum) (d types.Datum, err error) {
leftDatum, err := b.args[0].Eval(row, b.ctx)
leftDatum, err := b.args[0].Eval(row)
if err != nil {
return d, errors.Trace(err)
}
Expand All @@ -119,7 +119,7 @@ func (b *builtinOrOrSig) eval(row []types.Datum) (d types.Datum, err error) {
return
}
}
rightDatum, err := b.args[1].Eval(row, b.ctx)
rightDatum, err := b.args[1].Eval(row)
if err != nil {
return d, errors.Trace(err)
}
Expand Down
4 changes: 2 additions & 2 deletions expression/column.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func (col *CorrelatedColumn) Clone() Expression {
}

// Eval implements Expression interface.
func (col *CorrelatedColumn) Eval(row []types.Datum, _ context.Context) (types.Datum, error) {
func (col *CorrelatedColumn) Eval(row []types.Datum) (types.Datum, error) {
return *col.Data, nil
}

Expand Down Expand Up @@ -120,7 +120,7 @@ func (col *Column) GetType() *types.FieldType {
}

// Eval implements Expression interface.
func (col *Column) Eval(row []types.Datum, _ context.Context) (types.Datum, error) {
func (col *Column) Eval(row []types.Datum) (types.Datum, error) {
return row[col.Index], nil
}

Expand Down
7 changes: 3 additions & 4 deletions expression/constant_fold.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ package expression

import (
"github.com/ngaut/log"
"github.com/pingcap/tidb/context"
)

// FoldConstant does constant folding optimization on an expression.
func FoldConstant(ctx context.Context, expr Expression) Expression {
func FoldConstant(expr Expression) Expression {
scalarFunc, ok := expr.(*ScalarFunction)
if !ok {
return expr
Expand All @@ -30,7 +29,7 @@ func FoldConstant(ctx context.Context, expr Expression) Expression {
args := scalarFunc.GetArgs()
canFold := true
for i := 0; i < len(args); i++ {
foldedArg := FoldConstant(ctx, args[i])
foldedArg := FoldConstant(args[i])
scalarFunc.GetArgs()[i] = foldedArg
if _, ok := foldedArg.(*Constant); !ok {
canFold = false
Expand All @@ -39,7 +38,7 @@ func FoldConstant(ctx context.Context, expr Expression) Expression {
if !canFold {
return expr
}
value, err := scalarFunc.Eval(nil, ctx)
value, err := scalarFunc.Eval(nil)
if err != nil {
log.Warnf("There may exist an error during constant folding. The function name is %s, args are %s", scalarFunc.FuncName, args)
return expr
Expand Down
3 changes: 1 addition & 2 deletions expression/constant_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,7 @@ func (*testExpressionSuite) TestConstantFolding(c *C) {
},
}
for _, ca := range cases {
ctx := mock.NewContext()
newConds := FoldConstant(ctx, ca.condition)
newConds := FoldConstant(ca.condition)
c.Assert(newConds.String(), Equals, ca.result, Commentf("different for expr %s", ca.condition))
}
}
8 changes: 4 additions & 4 deletions expression/expression.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ type Expression interface {
fmt.Stringer
json.Marshaler
// Eval evaluates an expression through a row.
Eval(row []types.Datum, ctx context.Context) (types.Datum, error)
Eval(row []types.Datum) (types.Datum, error)

// Get the expression return type.
GetType() *types.FieldType
Expand All @@ -76,7 +76,7 @@ type Expression interface {

// EvalBool evaluates expression to a boolean value.
func EvalBool(expr Expression, row []types.Datum, ctx context.Context) (bool, error) {
data, err := expr.Eval(row, ctx)
data, err := expr.Eval(row)
if err != nil {
return false, errors.Trace(err)
}
Expand Down Expand Up @@ -138,7 +138,7 @@ func (c *Constant) GetType() *types.FieldType {
}

// Eval implements Expression interface.
func (c *Constant) Eval(_ []types.Datum, _ context.Context) (types.Datum, error) {
func (c *Constant) Eval(_ []types.Datum) (types.Datum, error) {
return c.Value, nil
}

Expand Down Expand Up @@ -263,7 +263,7 @@ func EvaluateExprWithNull(ctx context.Context, schema *Schema, expr Expression)
if err != nil {
return nil, errors.Trace(err)
}
return FoldConstant(ctx, newFunc), nil
return FoldConstant(newFunc), nil
case *Column:
if schema.ColumnIndex(x) == -1 {
return x, nil
Expand Down
2 changes: 1 addition & 1 deletion expression/scalar_function.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func (sf *ScalarFunction) Decorrelate(schema *Schema) Expression {
}

// Eval implements Expression interface.
func (sf *ScalarFunction) Eval(row []types.Datum, _ context.Context) (types.Datum, error) {
func (sf *ScalarFunction) Eval(row []types.Datum) (types.Datum, error) {
return sf.Function.eval(row)
}

Expand Down
4 changes: 2 additions & 2 deletions plan/expression_rewriter.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func evalAstExpr(expr ast.ExprNode, ctx context.Context) (types.Datum, error) {
if err != nil {
return types.Datum{}, errors.Trace(err)
}
return newExpr.Eval(nil, ctx)
return newExpr.Eval(nil)
}

// rewrite function rewrites ast expr to expression.Expression.
Expand Down Expand Up @@ -80,7 +80,7 @@ func (b *planBuilder) rewrite(expr ast.ExprNode, p LogicalPlan, aggMapper map[*a
if getRowLen(er.ctxStack[0]) != 1 {
return nil, nil, ErrOperandColumns.GenByArgs(1)
}
result := expression.FoldConstant(b.ctx, er.ctxStack[0])
result := expression.FoldConstant(er.ctxStack[0])
return result, er.p, nil
}

Expand Down

0 comments on commit e68dcf7

Please sign in to comment.