db: goleveldb iterator

This commit is contained in:
Ethan Buchman
2017-12-12 20:38:03 -05:00
parent 39e40ff5ce
commit 3e5dbef6a2
3 changed files with 23 additions and 21 deletions

View File

@ -80,11 +80,6 @@ func TestDBIteratorTwoKeys(t *testing.T) {
itr := db.Iterator(BeginningKey(), EndingKey()) itr := db.Iterator(BeginningKey(), EndingKey())
checkValid(t, itr, true) checkValid(t, itr, true)
for i := 0; i < 10; i++ {
checkNext(t, itr, true)
checkValid(t, itr, true)
}
checkNext(t, itr, true) checkNext(t, itr, true)
checkValid(t, itr, true) checkValid(t, itr, true)

View File

@ -20,6 +20,8 @@ func init() {
registerDBCreator(GoLevelDBBackendStr, dbCreator, false) registerDBCreator(GoLevelDBBackendStr, dbCreator, false)
} }
var _ DB = (*GoLevelDB)(nil)
type GoLevelDB struct { type GoLevelDB struct {
db *leveldb.DB db *leveldb.DB
} }
@ -168,15 +170,13 @@ func (mBatch *goLevelDBBatch) Write() {
// Iterator // Iterator
func (db *GoLevelDB) Iterator(start, end []byte) Iterator { func (db *GoLevelDB) Iterator(start, end []byte) Iterator {
/* itr := &goLevelDBIterator{
XXX source: db.db.NewIterator(nil, nil),
itr := &goLevelDBIterator{ start: start,
source: db.db.NewIterator(nil, nil), end: end,
} }
itr.Seek(nil) itr.source.Seek(start)
return itr return itr
*/
return nil
} }
func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator { func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator {
@ -184,9 +184,16 @@ func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator {
return nil return nil
} }
var _ Iterator = (*goLevelDBIterator)(nil)
type goLevelDBIterator struct { type goLevelDBIterator struct {
source iterator.Iterator source iterator.Iterator
invalid bool invalid bool
start, end []byte
}
func (it *goLevelDBIterator) Domain() ([]byte, []byte) {
return it.start, it.end
} }
// Key returns a copy of the current key. // Key returns a copy of the current key.
@ -217,10 +224,6 @@ func (it *goLevelDBIterator) GetError() error {
return it.source.Error() return it.source.Error()
} }
func (it *goLevelDBIterator) Seek(key []byte) {
it.source.Seek(key)
}
func (it *goLevelDBIterator) Valid() bool { func (it *goLevelDBIterator) Valid() bool {
if it.invalid { if it.invalid {
return false return false
@ -246,3 +249,7 @@ func (it *goLevelDBIterator) Prev() {
func (it *goLevelDBIterator) Close() { func (it *goLevelDBIterator) Close() {
it.source.Release() it.source.Release()
} }
func (it *goLevelDBIterator) Release() {
it.source.Release()
}

View File

@ -50,7 +50,7 @@ func TestPrefixIteratorMatch3(t *testing.T) {
t.Run(fmt.Sprintf("Prefix w/ backend %s", backend), func(t *testing.T) { t.Run(fmt.Sprintf("Prefix w/ backend %s", backend), func(t *testing.T) {
db := newTempDB(t, backend) db := newTempDB(t, backend)
db.SetSync(bz("3"), bz("value_3")) db.SetSync(bz("3"), bz("value_3"))
itr := IteratePrefix(db, []byte("2")) itr := IteratePrefix(db, []byte("4"))
// Once invalid... // Once invalid...
checkInvalid(t, itr) checkInvalid(t, itr)