Add IteratorPrefix method to Iterator
This commit is contained in:
parent
296d223545
commit
219d4e8427
1
db/db.go
1
db/db.go
|
@ -11,6 +11,7 @@ type DB interface {
|
|||
Close()
|
||||
NewBatch() Batch
|
||||
Iterator() Iterator
|
||||
IteratorPrefix([]byte) Iterator
|
||||
|
||||
// For debugging
|
||||
Print()
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/syndtr/goleveldb/leveldb"
|
||||
"github.com/syndtr/goleveldb/leveldb/errors"
|
||||
"github.com/syndtr/goleveldb/leveldb/opt"
|
||||
"github.com/syndtr/goleveldb/leveldb/util"
|
||||
|
||||
. "github.com/tendermint/tmlibs/common"
|
||||
)
|
||||
|
@ -119,6 +120,10 @@ func (db *GoLevelDB) Iterator() Iterator {
|
|||
return db.db.NewIterator(nil, nil)
|
||||
}
|
||||
|
||||
func (db *GoLevelDB) IteratorPrefix(prefix []byte) Iterator {
|
||||
return db.db.NewIterator(util.BytesPrefix(prefix), nil)
|
||||
}
|
||||
|
||||
func (db *GoLevelDB) NewBatch() Batch {
|
||||
batch := new(leveldb.Batch)
|
||||
return &goLevelDBBatch{db, batch}
|
||||
|
|
|
@ -2,6 +2,7 @@ package db
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
|
@ -108,6 +109,10 @@ func (it *memDBIterator) Error() error {
|
|||
}
|
||||
|
||||
func (db *MemDB) Iterator() Iterator {
|
||||
return db.IteratorPrefix([]byte{})
|
||||
}
|
||||
|
||||
func (db *MemDB) IteratorPrefix(prefix []byte) Iterator {
|
||||
it := newMemDBIterator()
|
||||
it.db = db
|
||||
it.last = -1
|
||||
|
@ -117,7 +122,9 @@ func (db *MemDB) Iterator() Iterator {
|
|||
|
||||
// unfortunately we need a copy of all of the keys
|
||||
for key, _ := range db.db {
|
||||
it.keys = append(it.keys, key)
|
||||
if strings.HasPrefix(key, string(prefix)) {
|
||||
it.keys = append(it.keys, key)
|
||||
}
|
||||
}
|
||||
return it
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue