(ctx context.Context, memBuffer kv.MemBuffer, snap kv.Snapshot, key kv.Key)
| 424 | } |
| 425 | |
| 426 | func (*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 | |
| 473 | type fkValueHelper struct { |
| 474 | colsOffsets []int |
no test coverage detected