MCPcopy
hub / github.com/pingcap/tidb / buildIndexForRow

Method buildIndexForRow

pkg/table/tables/tables.go:1252–1269  ·  view source on GitHub ↗

buildIndexForRow implements table.Table BuildIndexForRow interface.

(ctx table.MutateContext, h kv.Handle, vals []types.Datum, newData []types.Datum, idx *index, txn kv.Transaction, untouched bool, opt *table.CreateIdxOpt)

Source from the content-addressed store, hash-verified

1250
1251// buildIndexForRow implements table.Table BuildIndexForRow interface.
1252func (t *TableCommon) buildIndexForRow(ctx table.MutateContext, h kv.Handle, vals []types.Datum, newData []types.Datum, idx *index, txn kv.Transaction, untouched bool, opt *table.CreateIdxOpt) error {
1253 rsData := TryGetHandleRestoredDataWrapper(t.meta, newData, nil, idx.Meta())
1254 if _, err := idx.create(ctx, txn, vals, h, rsData, untouched, opt); err != nil {
1255 if kv.ErrKeyExists.Equal(err) {
1256 // Make error message consistent with MySQL.
1257 tablecodec.TruncateIndexValues(t.meta, idx.Meta(), vals)
1258 colStrVals, err1 := genIndexKeyStrs(vals)
1259 if err1 != nil {
1260 // if genIndexKeyStrs failed, return the original error.
1261 return err
1262 }
1263
1264 return kv.GenKeyExistsErr(colStrVals, fmt.Sprintf("%s.%s", idx.TableMeta().Name.String(), idx.Meta().Name.String()))
1265 }
1266 return err
1267 }
1268 return nil
1269}
1270
1271// IterRecords iterates records in the table and calls fn.
1272func IterRecords(t table.Table, ctx sessionctx.Context, cols []*table.Column,

Callers 1

Calls 9

TruncateIndexValuesFunction · 0.92
GenKeyExistsErrFunction · 0.92
genIndexKeyStrsFunction · 0.85
createMethod · 0.80
MetaMethod · 0.65
EqualMethod · 0.65
StringMethod · 0.65
TableMetaMethod · 0.65

Tested by

no test coverage detected