Skip to content

Commit 9062834

Browse files
authored
expression: add ctx to expression.Eval (#48609)
close #48608
1 parent 8de6d30 commit 9062834

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+322
-260
lines changed

br/pkg/lightning/backend/kv/base.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ func evalGeneratedColumns(se *Session, record []types.Datum, cols []*table.Colum
353353
mutRow := chunk.MutRowFromDatums(record)
354354
for _, gc := range genCols {
355355
col := cols[gc.Index].ToInfo()
356-
evaluated, err := gc.Expr.Eval(mutRow.ToRow())
356+
evaluated, err := gc.Expr.EvalWithInnerCtx(mutRow.ToRow())
357357
if err != nil {
358358
return col, err
359359
}

pkg/ddl/partition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1691,7 +1691,7 @@ func formatListPartitionValue(ctx sessionctx.Context, tblInfo *model.TableInfo)
16911691
if err != nil {
16921692
return nil, errors.Trace(err)
16931693
}
1694-
eval, err := expr.Eval(chunk.Row{})
1694+
eval, err := expr.Eval(ctx, chunk.Row{})
16951695
if err != nil {
16961696
return nil, errors.Trace(err)
16971697
}

pkg/executor/admin.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,10 @@ func (e *RecoverIndexExec) buildIndexedValues(row chunk.Row, idxVals []types.Dat
416416
idxVals = idxVals[:idxValLen]
417417
}
418418

419+
sctx := e.Ctx()
419420
for i, col := range e.index.Meta().Columns {
420421
if e.table.Meta().Columns[col.Offset].IsGenerated() {
421-
val, err := e.cols[col.Offset].EvalVirtualColumn(row)
422+
val, err := e.cols[col.Offset].EvalVirtualColumn(sctx, row)
422423
if err != nil {
423424
return nil, err
424425
}

pkg/executor/aggfuncs/aggfunc_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func rowMemDeltaGens(srcChk *chunk.Chunk, dataType *types.FieldType) (memDeltas
214214
return memDeltas, nil
215215
}
216216

217-
type multiArgsUpdateMemDeltaGens func(*chunk.Chunk, []*types.FieldType, []*util.ByItems) (memDeltas []int64, err error)
217+
type multiArgsUpdateMemDeltaGens func(sessionctx.Context, *chunk.Chunk, []*types.FieldType, []*util.ByItems) (memDeltas []int64, err error)
218218

219219
type aggMemTest struct {
220220
aggTest aggTest
@@ -789,7 +789,7 @@ func testMultiArgsAggMemFunc(t *testing.T, p multiArgsAggMemTest) {
789789
finalPr, memDelta := finalFunc.AllocPartialResult()
790790
require.Equal(t, p.allocMemDelta, memDelta)
791791

792-
updateMemDeltas, err := p.multiArgsUpdateMemDeltaGens(srcChk, p.multiArgsAggTest.dataTypes, desc.OrderByItems)
792+
updateMemDeltas, err := p.multiArgsUpdateMemDeltaGens(ctx, srcChk, p.multiArgsAggTest.dataTypes, desc.OrderByItems)
793793
require.NoError(t, err)
794794
iter := chunk.NewIterator4Chunk(srcChk)
795795
i := 0

pkg/executor/aggfuncs/func_first_row.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -513,13 +513,13 @@ func (*firstRow4Enum) ResetPartialResult(pr PartialResult) {
513513
p.isNull, p.gotFirstRow = false, false
514514
}
515515

516-
func (e *firstRow4Enum) UpdatePartialResult(_ sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (memDelta int64, err error) {
516+
func (e *firstRow4Enum) UpdatePartialResult(ctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (memDelta int64, err error) {
517517
p := (*partialResult4FirstRowEnum)(pr)
518518
if p.gotFirstRow {
519519
return memDelta, nil
520520
}
521521
if len(rowsInGroup) > 0 {
522-
d, err := e.args[0].Eval(rowsInGroup[0])
522+
d, err := e.args[0].Eval(ctx, rowsInGroup[0])
523523
if err != nil {
524524
return memDelta, err
525525
}
@@ -560,13 +560,13 @@ func (*firstRow4Set) ResetPartialResult(pr PartialResult) {
560560
p.isNull, p.gotFirstRow = false, false
561561
}
562562

563-
func (e *firstRow4Set) UpdatePartialResult(_ sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (memDelta int64, err error) {
563+
func (e *firstRow4Set) UpdatePartialResult(ctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (memDelta int64, err error) {
564564
p := (*partialResult4FirstRowSet)(pr)
565565
if p.gotFirstRow {
566566
return memDelta, nil
567567
}
568568
if len(rowsInGroup) > 0 {
569-
d, err := e.args[0].Eval(rowsInGroup[0])
569+
d, err := e.args[0].Eval(ctx, rowsInGroup[0])
570570
if err != nil {
571571
return memDelta, err
572572
}

pkg/executor/aggfuncs/func_group_concat.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ func (e *groupConcatOrder) UpdatePartialResult(sctx sessionctx.Context, rowsInGr
461461
byItems: make([]*types.Datum, 0, len(e.byItems)),
462462
}
463463
for _, byItem := range e.byItems {
464-
d, err := byItem.Expr.Eval(row)
464+
d, err := byItem.Expr.Eval(sctx, row)
465465
if err != nil {
466466
return memDelta, err
467467
}
@@ -585,7 +585,7 @@ func (e *groupConcatDistinctOrder) UpdatePartialResult(sctx sessionctx.Context,
585585
byItems: make([]*types.Datum, 0, len(e.byItems)),
586586
}
587587
for _, byItem := range e.byItems {
588-
d, err := byItem.Expr.Eval(row)
588+
d, err := byItem.Expr.Eval(sctx, row)
589589
if err != nil {
590590
return memDelta, err
591591
}

pkg/executor/aggfuncs/func_group_concat_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/pingcap/tidb/pkg/parser/ast"
2424
"github.com/pingcap/tidb/pkg/parser/mysql"
2525
"github.com/pingcap/tidb/pkg/planner/util"
26+
"github.com/pingcap/tidb/pkg/sessionctx"
2627
"github.com/pingcap/tidb/pkg/sessionctx/variable"
2728
"github.com/pingcap/tidb/pkg/types"
2829
"github.com/pingcap/tidb/pkg/util/chunk"
@@ -83,7 +84,7 @@ func TestMemGroupConcat(t *testing.T) {
8384
}
8485
}
8586

86-
func groupConcatMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
87+
func groupConcatMultiArgsUpdateMemDeltaGens(ctx sessionctx.Context, srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
8788
memDeltas = make([]int64, 0)
8889
buffer := new(bytes.Buffer)
8990
valBuffer := new(bytes.Buffer)
@@ -112,7 +113,7 @@ func groupConcatMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType []*typ
112113
return memDeltas, nil
113114
}
114115

115-
func groupConcatOrderMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
116+
func groupConcatOrderMultiArgsUpdateMemDeltaGens(ctx sessionctx.Context, srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
116117
memDeltas = make([]int64, 0)
117118
for i := 0; i < srcChk.NumRows(); i++ {
118119
buffer := new(bytes.Buffer)
@@ -128,7 +129,7 @@ func groupConcatOrderMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType [
128129
}
129130
memDelta := int64(buffer.Cap() - oldMemSize)
130131
for _, byItem := range byItems {
131-
fdt, _ := byItem.Expr.Eval(row)
132+
fdt, _ := byItem.Expr.Eval(ctx, row)
132133
datumMem := aggfuncs.GetDatumMemSize(&fdt)
133134
memDelta += datumMem
134135
}
@@ -137,7 +138,7 @@ func groupConcatOrderMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType [
137138
return memDeltas, nil
138139
}
139140

140-
func groupConcatDistinctMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
141+
func groupConcatDistinctMultiArgsUpdateMemDeltaGens(ctx sessionctx.Context, srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
141142
valSet := set.NewStringSet()
142143
buffer := new(bytes.Buffer)
143144
valsBuf := new(bytes.Buffer)
@@ -175,7 +176,7 @@ func groupConcatDistinctMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataTyp
175176
return memDeltas, nil
176177
}
177178

178-
func groupConcatDistinctOrderMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
179+
func groupConcatDistinctOrderMultiArgsUpdateMemDeltaGens(ctx sessionctx.Context, srcChk *chunk.Chunk, dataType []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
179180
valSet := set.NewStringSet()
180181
var encodeBytesBuffer []byte
181182
for i := 0; i < srcChk.NumRows(); i++ {
@@ -201,7 +202,7 @@ func groupConcatDistinctOrderMultiArgsUpdateMemDeltaGens(srcChk *chunk.Chunk, da
201202
valSet.Insert(joinedVal)
202203
memDelta := int64(len(joinedVal) + (valsBuf.Cap() + cap(encodeBytesBuffer) - oldMemSize))
203204
for _, byItem := range byItems {
204-
fdt, _ := byItem.Expr.Eval(row)
205+
fdt, _ := byItem.Expr.Eval(ctx, row)
205206
datumMem := aggfuncs.GetDatumMemSize(&fdt)
206207
memDelta += datumMem
207208
}

pkg/executor/aggfuncs/func_json_arrayagg.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ func (e *jsonArrayagg) AppendFinalResult2Chunk(_ sessionctx.Context, pr PartialR
6262
return nil
6363
}
6464

65-
func (e *jsonArrayagg) UpdatePartialResult(_ sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (memDelta int64, err error) {
65+
func (e *jsonArrayagg) UpdatePartialResult(ctx sessionctx.Context, rowsInGroup []chunk.Row, pr PartialResult) (memDelta int64, err error) {
6666
p := (*partialResult4JsonArrayagg)(pr)
6767
for _, row := range rowsInGroup {
68-
item, err := e.args[0].Eval(row)
68+
item, err := e.args[0].Eval(ctx, row)
6969
if err != nil {
7070
return 0, errors.Trace(err)
7171
}

pkg/executor/aggfuncs/func_json_objectagg.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func (e *jsonObjectAgg) UpdatePartialResult(sctx sessionctx.Context, rowsInGroup
8686
}
8787

8888
key = strings.Clone(key)
89-
value, err := e.args[1].Eval(row)
89+
value, err := e.args[1].Eval(sctx, row)
9090
if err != nil {
9191
return 0, errors.Trace(err)
9292
}

pkg/executor/aggfuncs/func_json_objectagg_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/pingcap/tidb/pkg/parser/charset"
2424
"github.com/pingcap/tidb/pkg/parser/mysql"
2525
"github.com/pingcap/tidb/pkg/planner/util"
26+
"github.com/pingcap/tidb/pkg/sessionctx"
2627
"github.com/pingcap/tidb/pkg/types"
2728
"github.com/pingcap/tidb/pkg/util/chunk"
2829
"github.com/pingcap/tidb/pkg/util/hack"
@@ -205,7 +206,7 @@ func TestMemJsonObjectagg(t *testing.T) {
205206
}
206207
}
207208

208-
func jsonMultiArgsMemDeltaGens(srcChk *chunk.Chunk, dataTypes []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
209+
func jsonMultiArgsMemDeltaGens(_ sessionctx.Context, srcChk *chunk.Chunk, dataTypes []*types.FieldType, byItems []*util.ByItems) (memDeltas []int64, err error) {
209210
memDeltas = make([]int64, 0)
210211
m := make(map[string]bool)
211212
for i := 0; i < srcChk.NumRows(); i++ {

0 commit comments

Comments
 (0)