github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/internal_test.go (about) 1 // Copyright 2019 The LevelDB-Go and Pebble Authors. All rights reserved. Use 2 // of this source code is governed by a BSD-style license that can be found in 3 // the LICENSE file. 4 5 package pebble 6 7 import "github.com/cockroachdb/pebble/internal/base" 8 9 // internalIterAdapter adapts the new internalIterator interface which returns 10 // the key and value from positioning methods (Seek*, First, Last, Next, Prev) 11 // to the old interface which returned a boolean corresponding to Valid. Only 12 // used by test code. 13 type internalIterAdapter struct { 14 internalIterator 15 key *InternalKey 16 val []byte 17 err error 18 } 19 20 func newInternalIterAdapter(iter internalIterator) *internalIterAdapter { 21 return &internalIterAdapter{ 22 internalIterator: iter, 23 } 24 } 25 26 func (i *internalIterAdapter) update(key *InternalKey, val LazyValue) bool { 27 i.key = key 28 if v, _, err := val.Value(nil); err != nil { 29 i.key = nil 30 i.val = nil 31 i.err = err 32 } else { 33 i.val = v 34 } 35 return i.key != nil 36 } 37 38 func (i *internalIterAdapter) String() string { 39 return "internal-iter-adapter" 40 } 41 42 func (i *internalIterAdapter) SeekGE(key []byte, flags base.SeekGEFlags) bool { 43 return i.update(i.internalIterator.SeekGE(key, flags)) 44 } 45 46 func (i *internalIterAdapter) SeekPrefixGE(prefix, key []byte, flags base.SeekGEFlags) bool { 47 return i.update(i.internalIterator.SeekPrefixGE(prefix, key, flags)) 48 } 49 50 func (i *internalIterAdapter) SeekLT(key []byte, flags base.SeekLTFlags) bool { 51 return i.update(i.internalIterator.SeekLT(key, flags)) 52 } 53 54 func (i *internalIterAdapter) First() bool { 55 return i.update(i.internalIterator.First()) 56 } 57 58 func (i *internalIterAdapter) Last() bool { 59 return i.update(i.internalIterator.Last()) 60 } 61 62 func (i *internalIterAdapter) Next() bool { 63 return i.update(i.internalIterator.Next()) 64 } 65 66 func (i *internalIterAdapter) Prev() bool { 67 return i.update(i.internalIterator.Prev()) 68 } 69 70 func (i *internalIterAdapter) Key() *InternalKey { 71 return i.key 72 } 73 74 func (i *internalIterAdapter) Value() []byte { 75 return i.val 76 } 77 78 func (i *internalIterAdapter) Valid() bool { 79 return i.key != nil 80 } 81 82 func (i *internalIterAdapter) Error() error { 83 err := i.internalIterator.Error() 84 if err != nil { 85 return err 86 } 87 return i.err 88 }