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

Method getIndexKeyValueInTable

pkg/executor/foreign_key.go:426–471  ·  view source on GitHub ↗
(ctx context.Context, memBuffer kv.MemBuffer, snap kv.Snapshot, key kv.Key)

Source from the content-addressed store, hash-verified

424}
425
426func (*FKCheckExec) getIndexKeyValueInTable(ctx context.Context, memBuffer kv.MemBuffer, snap kv.Snapshot, key kv.Key) (k []byte, v []byte, _ error) {
427 select {
428 case <-ctx.Done():
429 return nil, nil, ctx.Err()
430 default:
431 }
432 memIter, err := memBuffer.Iter(key, key.PrefixNext())
433 if err != nil {
434 return nil, nil, err
435 }
436 deletedKeys := set.NewStringSet()
437 defer memIter.Close()
438 for ; memIter.Valid(); err = memIter.Next() {
439 if err != nil {
440 return nil, nil, err
441 }
442 k := memIter.Key()
443 if !k.HasPrefix(key) {
444 break
445 }
446 // check whether the key was been deleted.
447 if len(memIter.Value()) > 0 {
448 return k, memIter.Value(), nil
449 }
450 deletedKeys.Insert(string(k))
451 }
452
453 it, err := snap.Iter(key, key.PrefixNext())
454 if err != nil {
455 return nil, nil, err
456 }
457 defer it.Close()
458 for ; it.Valid(); err = it.Next() {
459 if err != nil {
460 return nil, nil, err
461 }
462 k := it.Key()
463 if !k.HasPrefix(key) {
464 break
465 }
466 if !deletedKeys.Exist(string(k)) {
467 return k, it.Value(), nil
468 }
469 }
470 return nil, nil, nil
471}
472
473type fkValueHelper struct {
474 colsOffsets []int

Callers 1

checkPrefixKeyMethod · 0.95

Calls 12

InsertMethod · 0.95
ExistMethod · 0.95
NewStringSetFunction · 0.92
PrefixNextMethod · 0.80
HasPrefixMethod · 0.80
DoneMethod · 0.65
IterMethod · 0.65
CloseMethod · 0.65
ValidMethod · 0.65
NextMethod · 0.65
KeyMethod · 0.65
ValueMethod · 0.65

Tested by

no test coverage detected