db: cleveldb iterator

This commit is contained in:
Ethan Buchman 2017-12-12 20:58:35 -05:00
parent 3e5dbef6a2
commit bcacaf164b
2 changed files with 22 additions and 15 deletions

View File

@ -17,6 +17,8 @@ func init() {
registerDBCreator(CLevelDBBackendStr, dbCreator, false) registerDBCreator(CLevelDBBackendStr, dbCreator, false)
} }
var _ DB = (*CLevelDB)(nil)
type CLevelDB struct { type CLevelDB struct {
db *levigo.DB db *levigo.DB
ro *levigo.ReadOptions ro *levigo.ReadOptions
@ -158,13 +160,17 @@ func (mBatch *cLevelDBBatch) Write() {
// Iterator // Iterator
func (db *CLevelDB) Iterator(start, end []byte) Iterator { func (db *CLevelDB) Iterator(start, end []byte) Iterator {
/*
XXX
itr := db.db.NewIterator(db.ro) itr := db.db.NewIterator(db.ro)
itr.Seek([]byte{0x00}) if len(start) > 0 {
return cLevelDBIterator{itr} itr.Seek(start)
*/ } else {
return nil itr.SeekToFirst()
}
return cLevelDBIterator{
itr: itr,
start: start,
end: end,
}
} }
func (db *CLevelDB) ReverseIterator(start, end []byte) Iterator { func (db *CLevelDB) ReverseIterator(start, end []byte) Iterator {
@ -172,15 +178,15 @@ func (db *CLevelDB) ReverseIterator(start, end []byte) Iterator {
return nil return nil
} }
var _ Iterator = (*cLevelDBIterator)(nil)
type cLevelDBIterator struct { type cLevelDBIterator struct {
itr *levigo.Iterator itr *levigo.Iterator
start, end []byte
} }
func (c cLevelDBIterator) Seek(key []byte) { func (c cLevelDBIterator) Domain() ([]byte, []byte) {
if key == nil { return c.start, c.end
key = []byte{0x00}
}
c.itr.Seek(key)
} }
func (c cLevelDBIterator) Valid() bool { func (c cLevelDBIterator) Valid() bool {

View File

@ -5,18 +5,19 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
cmn "github.com/tendermint/tmlibs/common" cmn "github.com/tendermint/tmlibs/common"
) )
func checkValid(t *testing.T, itr Iterator, expected bool) { func checkValid(t *testing.T, itr Iterator, expected bool) {
valid := itr.Valid() valid := itr.Valid()
assert.Equal(t, expected, valid) require.Equal(t, expected, valid)
} }
func checkNext(t *testing.T, itr Iterator, expected bool) { func checkNext(t *testing.T, itr Iterator, expected bool) {
itr.Next() itr.Next()
valid := itr.Valid() valid := itr.Valid()
assert.Equal(t, expected, valid) require.Equal(t, expected, valid)
} }
func checkNextPanics(t *testing.T, itr Iterator) { func checkNextPanics(t *testing.T, itr Iterator) {