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

Function getKeysNeedCheckOneRow

pkg/executor/batch_checker.go:95–238  ·  view source on GitHub ↗
(ctx sessionctx.Context, t table.Table, row []types.Datum, nUnique int, handleCols []*table.Column,
	pkIdxInfo *model.IndexInfo, result []toBeCheckedRow)

Source from the content-addressed store, hash-verified

93}
94
95func getKeysNeedCheckOneRow(ctx sessionctx.Context, t table.Table, row []types.Datum, nUnique int, handleCols []*table.Column,
96 pkIdxInfo *model.IndexInfo, result []toBeCheckedRow) ([]toBeCheckedRow, error) {
97 var err error
98 if p, ok := t.(table.PartitionedTable); ok {
99 t, err = p.GetPartitionByRow(ctx.GetExprCtx().GetEvalCtx(), row)
100 if err != nil {
101 if terr, ok := errors.Cause(err).(*terror.Error); ok && (terr.Code() == errno.ErrNoPartitionForGivenValue || terr.Code() == errno.ErrRowDoesNotMatchGivenPartitionSet) {
102 ec := ctx.GetSessionVars().StmtCtx.ErrCtx()
103 if err = ec.HandleError(terr); err != nil {
104 return nil, err
105 }
106 result = append(result, toBeCheckedRow{ignored: true})
107 return result, nil
108 }
109 return nil, err
110 }
111 }
112
113 uniqueKeys := make([]*keyValueWithDupInfo, 0, nUnique)
114 // Append record keys and errors.
115 var handle kv.Handle
116 if t.Meta().IsCommonHandle {
117 var err error
118 handle, err = buildHandleFromDatumRow(ctx.GetSessionVars().StmtCtx, row, handleCols, pkIdxInfo)
119 if err != nil {
120 return nil, err
121 }
122 } else if len(handleCols) > 0 {
123 handle = kv.IntHandle(row[handleCols[0].Offset].GetInt64())
124 }
125 var handleKey *keyValueWithDupInfo
126 if handle != nil {
127 handleKey = &keyValueWithDupInfo{
128 newKey: tablecodec.EncodeRecordKey(t.RecordPrefix(), handle),
129 }
130
131 var keyCols []string
132 var err error
133 if t.Meta().IsCommonHandle {
134 data := make([]types.Datum, len(handleCols))
135 for i, col := range handleCols {
136 data[i] = row[col.Offset]
137 }
138 keyCols, err = dataToStrings(data)
139 } else {
140 var s string
141 s, err = row[handleCols[0].Offset].ToString()
142 keyCols = []string{s}
143 }
144 if err != nil {
145 var handleData []types.Datum
146 handleData, err = handle.Data()
147 if err == nil {
148 keyCols, err = dataToStrings(handleData)
149 }
150 }
151
152 if err == nil {

Callers 1

getKeysNeedCheckFunction · 0.85

Calls 15

DataMethod · 0.95
IntHandleTypeAlias · 0.92
EncodeRecordKeyFunction · 0.92
GenKeyExistsErrFunction · 0.92
BgLoggerFunction · 0.92
CastValueFunction · 0.92
GetColOriginDefaultValueFunction · 0.92
IsIndexWritableFunction · 0.92
GenTempIdxKeyByStateFunction · 0.92
buildHandleFromDatumRowFunction · 0.85
dataToStringsFunction · 0.85
CauseMethod · 0.80

Tested by

no test coverage detected