Skip to content

Commit

Permalink
table: simplify the interface table.Index to reduce its context req…
Browse files Browse the repository at this point in the history
…uirement (#50692)

close #50691
  • Loading branch information
lcwangchao authored Jan 24, 2024
1 parent 0869814 commit c1cae24
Show file tree
Hide file tree
Showing 23 changed files with 123 additions and 115 deletions.
3 changes: 2 additions & 1 deletion br/pkg/lightning/backend/kv/kv2sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,8 @@ func (t *TableKVDecoder) IterRawIndexKeys(h kv.Handle, rawRow []byte, fn func([]
if err != nil {
return err
}
iter := index.GenIndexKVIter(t.se.Vars.StmtCtx, indexValues, h, nil)
sc := t.se.Vars.StmtCtx
iter := index.GenIndexKVIter(sc.ErrCtx(), sc.TimeZone(), indexValues, h, nil)
for iter.Valid() {
indexKey, _, _, err := iter.Next(indexBuffer, nil)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/ddl/bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func BenchmarkGenerateIndexKV(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
buf = buf[:0]
iter := index.GenIndexKVIter(sctx, idxDt, handle, nil)
iter := index.GenIndexKVIter(sctx.ErrCtx(), sctx.TimeZone(), idxDt, handle, nil)
_, _, _, err = iter.Next(buf, nil)
if err != nil {
break
Expand Down
6 changes: 3 additions & 3 deletions pkg/ddl/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -1645,7 +1645,7 @@ func (w *addIndexTxnWorker) batchCheckUniqueKey(txn kv.Transaction, idxRecords [
}
// skip by default.
idxRecords[i].skip = true
iter := idx.GenIndexKVIter(stmtCtx, record.vals, record.handle, idxRecords[i].rsData)
iter := idx.GenIndexKVIter(stmtCtx.ErrCtx(), stmtCtx.TimeZone(), record.vals, record.handle, idxRecords[i].rsData)
for iter.Valid() {
var buf []byte
if cnt < len(w.idxKeyBufs) {
Expand Down Expand Up @@ -1854,7 +1854,7 @@ func writeOneKVToLocal(
idxDt, rsData []types.Datum,
handle kv.Handle,
) error {
iter := index.GenIndexKVIter(sCtx, idxDt, handle, rsData)
iter := index.GenIndexKVIter(sCtx.ErrCtx(), sCtx.TimeZone(), idxDt, handle, rsData)
for iter.Valid() {
key, idxVal, _, err := iter.Next(writeBufs.IndexKeyBuf, writeBufs.RowValBuf)
if err != nil {
Expand Down Expand Up @@ -2419,7 +2419,7 @@ func (w *cleanUpIndexWorker) BackfillData(handleRange reorgBackfillTask) (taskCt
// we fetch records row by row, so records will belong to
// index[0], index[1] ... index[n-1], index[0], index[1] ...
// respectively. So indexes[i%n] is the index of idxRecords[i].
err := w.indexes[i%n].Delete(w.sessCtx.GetSessionVars().StmtCtx, txn, idxRecord.vals, idxRecord.handle)
err := w.indexes[i%n].Delete(w.sessCtx, txn, idxRecord.vals, idxRecord.handle)
if err != nil {
return errors.Trace(err)
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/ddl/index_change_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,8 @@ func checkIndexExists(ctx sessionctx.Context, tbl table.Table, indexValue interf
if err != nil {
return errors.Trace(err)
}
doesExist, _, err := idx.Exist(ctx.GetSessionVars().StmtCtx, txn, types.MakeDatums(indexValue), kv.IntHandle(handle))
sc := ctx.GetSessionVars().StmtCtx
doesExist, _, err := idx.Exist(sc.ErrCtx(), sc.TimeZone(), txn, types.MakeDatums(indexValue), kv.IntHandle(handle))
if err != nil {
return errors.Trace(err)
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/executor/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ func (e *RecoverIndexExec) batchMarkDup(txn kv.Transaction, rows []recoverRows)
rowIdx := make([]int, 0, len(rows))
cnt := 0
for i, row := range rows {
iter := e.index.GenIndexKVIter(sc, row.idxVals, row.handle, nil)
iter := e.index.GenIndexKVIter(sc.ErrCtx(), sc.TimeZone(), row.idxVals, row.handle, nil)
for iter.Valid() {
var buf []byte
if cnt < len(e.idxKeyBufs) {
Expand Down Expand Up @@ -637,7 +637,7 @@ func (e *CleanupIndexExec) deleteDanglingIdx(txn kv.Transaction, values map[stri
return errors.Trace(errors.Errorf("batch keys are inconsistent with handles"))
}
for _, handleIdxVals := range handleIdxValsGroup.([][]types.Datum) {
if err := e.index.Delete(e.Ctx().GetSessionVars().StmtCtx, txn, handleIdxVals, handle); err != nil {
if err := e.index.Delete(e.Ctx(), txn, handleIdxVals, handle); err != nil {
return err
}
e.removeCnt++
Expand Down Expand Up @@ -698,7 +698,7 @@ func (e *CleanupIndexExec) fetchIndex(ctx context.Context, txn kv.Transaction) e
} else {
e.idxValues.Set(handle, [][]types.Datum{idxVals})
}
idxKey, _, err := e.index.GenIndexKey(sc, idxVals, handle, nil)
idxKey, _, err := e.index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), idxVals, handle, nil)
if err != nil {
return err
}
Expand Down Expand Up @@ -838,7 +838,7 @@ func (e *CleanupIndexExec) init() error {
e.batchKeys = make([]kv.Key, 0, e.batchSize)
e.idxValsBufs = make([][]types.Datum, e.batchSize)
sc := e.Ctx().GetSessionVars().StmtCtx
idxKey, _, err := e.index.GenIndexKey(sc, []types.Datum{{}}, kv.IntHandle(math.MinInt64), nil)
idxKey, _, err := e.index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{{}}, kv.IntHandle(math.MinInt64), nil)
if err != nil {
return err
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/executor/batch_checker.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,8 @@ func getKeysNeedCheckOneRow(ctx sessionctx.Context, t table.Table, row []types.D
}
// Pass handle = 0 to GenIndexKey,
// due to we only care about distinct key.
iter := v.GenIndexKVIter(ctx.GetSessionVars().StmtCtx, colVals, kv.IntHandle(0), nil)
sc := ctx.GetSessionVars().StmtCtx
iter := v.GenIndexKVIter(sc.ErrCtx(), sc.TimeZone(), colVals, kv.IntHandle(0), nil)
for iter.Valid() {
key, _, distinct, err1 := iter.Next(nil, nil)
if err1 != nil {
Expand Down
3 changes: 2 additions & 1 deletion pkg/executor/distsql.go
Original file line number Diff line number Diff line change
Expand Up @@ -1346,7 +1346,8 @@ func (w *tableWorker) compareData(ctx context.Context, task *lookupTableTask, ta
if idx == nil {
return nil
}
k, _, err := idx.GenIndexKey(w.idxLookup.Ctx().GetSessionVars().StmtCtx, idxRow.Values[:len(idx.Meta().Columns)], idxRow.Handle, nil)
sc := w.idxLookup.Ctx().GetSessionVars().StmtCtx
k, _, err := idx.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), idxRow.Values[:len(idx.Meta().Columns)], idxRow.Handle, nil)
if err != nil {
return nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/executor/distsql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ func TestInconsistentIndex(t *testing.T) {
for i := 0; i < 10; i++ {
txn, err := store.Begin()
require.NoError(t, err)
err = idxOp.Delete(ctx.GetSessionVars().StmtCtx, txn, types.MakeDatums(i+10), kv.IntHandle(100+i))
err = idxOp.Delete(ctx, txn, types.MakeDatums(i+10), kv.IntHandle(100+i))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
Expand Down
3 changes: 2 additions & 1 deletion pkg/executor/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -2649,7 +2649,8 @@ func (w *checkIndexWorker) HandleTask(task checkIndexTask, _ func(workerpool.Non
if idx == nil {
return nil
}
k, _, err := idx.GenIndexKey(w.sctx.GetSessionVars().StmtCtx, idxRow.Values[:len(idx.Meta().Columns)], idxRow.Handle, nil)
sc := w.sctx.GetSessionVars().StmtCtx
k, _, err := idx.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), idxRow.Values[:len(idx.Meta().Columns)], idxRow.Handle, nil)
if err != nil {
return nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/executor/foreign_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ func (fkc *FKCheckExec) buildCheckKeyFromFKValue(sc *stmtctx.StatementContext, v
}
return key, true, nil
}
key, distinct, err := fkc.Idx.GenIndexKey(sc, vals, nil, nil)
key, distinct, err := fkc.Idx.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), vals, nil, nil)
if err != nil {
return nil, false, err
}
Expand Down
8 changes: 5 additions & 3 deletions pkg/executor/split.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,9 @@ func (e *SplitIndexRegionExec) getSplitIdxKeysFromValueList() (keys [][]byte, er
func (e *SplitIndexRegionExec) getSplitIdxPhysicalKeysFromValueList(physicalID int64, keys [][]byte) ([][]byte, error) {
keys = e.getSplitIdxPhysicalStartAndOtherIdxKeys(physicalID, keys)
index := tables.NewIndex(physicalID, e.tableInfo, e.indexInfo)
sc := e.Ctx().GetSessionVars().StmtCtx
for _, v := range e.valueLists {
idxKey, _, err := index.GenIndexKey(e.Ctx().GetSessionVars().StmtCtx, v, kv.IntHandle(math.MinInt64), nil)
idxKey, _, err := index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), v, kv.IntHandle(math.MinInt64), nil)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -226,13 +227,14 @@ func (e *SplitIndexRegionExec) getSplitIdxPhysicalKeysFromBound(physicalID int64
keys = e.getSplitIdxPhysicalStartAndOtherIdxKeys(physicalID, keys)
index := tables.NewIndex(physicalID, e.tableInfo, e.indexInfo)
// Split index regions by lower, upper value and calculate the step by (upper - lower)/num.
lowerIdxKey, _, err := index.GenIndexKey(e.Ctx().GetSessionVars().StmtCtx, e.lower, kv.IntHandle(math.MinInt64), nil)
sc := e.Ctx().GetSessionVars().StmtCtx
lowerIdxKey, _, err := index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), e.lower, kv.IntHandle(math.MinInt64), nil)
if err != nil {
return nil, err
}
// Use math.MinInt64 as handle_id for the upper index key to avoid affecting calculate split point.
// If use math.MaxInt64 here, test of `TestSplitIndex` will report error.
upperIdxKey, _, err := index.GenIndexKey(e.Ctx().GetSessionVars().StmtCtx, e.upper, kv.IntHandle(math.MinInt64), nil)
upperIdxKey, _, err := index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), e.upper, kv.IntHandle(math.MinInt64), nil)
if err != nil {
return nil, err
}
Expand Down
15 changes: 9 additions & 6 deletions pkg/executor/split_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,13 +163,14 @@ func TestSplitIndex(t *testing.T) {
index := tables.NewIndex(tbInfo.ID, tbInfo, idxInfo)
for _, ca := range cases {
// test for minInt64 handle
idxValue, _, err := index.GenIndexKey(ctx.GetSessionVars().StmtCtx, []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MinInt64), nil)
sc := ctx.GetSessionVars().StmtCtx
idxValue, _, err := index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MinInt64), nil)
require.NoError(t, err)
idx := searchLessEqualIdx(valueList, idxValue)
require.Equal(t, idx, ca.lessEqualIdx)

// Test for max int64 handle.
idxValue, _, err = index.GenIndexKey(ctx.GetSessionVars().StmtCtx, []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MaxInt64), nil)
idxValue, _, err = index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MaxInt64), nil)
require.NoError(t, err)
idx = searchLessEqualIdx(valueList, idxValue)
require.Equal(t, idx, ca.lessEqualIdx)
Expand Down Expand Up @@ -211,13 +212,14 @@ func TestSplitIndex(t *testing.T) {

for _, ca := range cases2 {
// test for minInt64 handle
idxValue, _, err := index.GenIndexKey(ctx.GetSessionVars().StmtCtx, []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MinInt64), nil)
sc := ctx.GetSessionVars().StmtCtx
idxValue, _, err := index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MinInt64), nil)
require.NoError(t, err)
idx := searchLessEqualIdx(valueList, idxValue)
require.Equal(t, idx, ca.lessEqualIdx)

// Test for max int64 handle.
idxValue, _, err = index.GenIndexKey(ctx.GetSessionVars().StmtCtx, []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MaxInt64), nil)
idxValue, _, err = index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{types.NewDatum(ca.value)}, kv.IntHandle(math.MaxInt64), nil)
require.NoError(t, err)
idx = searchLessEqualIdx(valueList, idxValue)
require.Equal(t, idx, ca.lessEqualIdx)
Expand Down Expand Up @@ -269,13 +271,14 @@ func TestSplitIndex(t *testing.T) {
for _, ca := range cases3 {
value := types.NewTime(ca.value, mysql.TypeTimestamp, types.DefaultFsp)
// test for min int64 handle
idxValue, _, err := index.GenIndexKey(ctx.GetSessionVars().StmtCtx, []types.Datum{types.NewDatum(value)}, kv.IntHandle(math.MinInt64), nil)
sc := ctx.GetSessionVars().StmtCtx
idxValue, _, err := index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{types.NewDatum(value)}, kv.IntHandle(math.MinInt64), nil)
require.NoError(t, err)
idx := searchLessEqualIdx(valueList, idxValue)
require.Equal(t, idx, ca.lessEqualIdx)

// Test for max int64 handle.
idxValue, _, err = index.GenIndexKey(ctx.GetSessionVars().StmtCtx, []types.Datum{types.NewDatum(value)}, kv.IntHandle(math.MaxInt64), nil)
idxValue, _, err = index.GenIndexKey(sc.ErrCtx(), sc.TimeZone(), []types.Datum{types.NewDatum(value)}, kv.IntHandle(math.MaxInt64), nil)
require.NoError(t, err)
idx = searchLessEqualIdx(valueList, idxValue)
require.Equal(t, idx, ca.lessEqualIdx)
Expand Down
2 changes: 1 addition & 1 deletion pkg/executor/test/admintest/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ go_test(
"//pkg/meta/autoid",
"//pkg/parser/model",
"//pkg/session",
"//pkg/sessionctx/stmtctx",
"//pkg/sessionctx",
"//pkg/sessionctx/variable",
"//pkg/table",
"//pkg/table/tables",
Expand Down
Loading

0 comments on commit c1cae24

Please sign in to comment.