From 7e8c1e3394f27c86eeddf60d4e9ac6d4267035ec Mon Sep 17 00:00:00 2001 From: Sunny Aggarwal Date: Mon, 19 Mar 2018 21:04:52 +0100 Subject: [PATCH] added Substore --- Gopkg.lock | 2 +- store/iavlstore.go | 7 +++++++ store/iavlstore_test.go | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Gopkg.lock b/Gopkg.lock index c9e3eb67e5..bff5e924da 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -463,6 +463,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "3d1aebf798b51882ed5281b0ca0a3766c32cdb08592de57dd3d574a4b3e67987" + inputs-digest = "64881873c2a0899c3d6920de588c06a2b59e6b072e1a3d7e676e906cb7d5ad0e" solver-name = "gps-cdcl" solver-version = 1 diff --git a/store/iavlstore.go b/store/iavlstore.go index e63585a16b..87b0863884 100644 --- a/store/iavlstore.go +++ b/store/iavlstore.go @@ -119,6 +119,13 @@ func (st *iavlStore) Iterator(start, end []byte) Iterator { return newIAVLIterator(st.tree.Tree(), start, end, true) } +func (st *iavlStore) Subspace(prefix []byte) Iterator { + end := make([]byte, len(prefix)) + copy(end, prefix) + end[len(end)-1]++ + return st.Iterator(prefix, end) +} + // Implements IterKVStore. func (st *iavlStore) ReverseIterator(start, end []byte) Iterator { return newIAVLIterator(st.tree.Tree(), start, end, false) diff --git a/store/iavlstore_test.go b/store/iavlstore_test.go index c426e4d8a8..7adae625ea 100644 --- a/store/iavlstore_test.go +++ b/store/iavlstore_test.go @@ -82,6 +82,26 @@ func TestIAVLIterator(t *testing.T) { } } +func TestIAVLSubspace(t *testing.T) { + db := dbm.NewMemDB() + tree, _ := newTree(t, db) + iavlStore := newIAVLStore(tree, numHistory) + + iavlStore.Set([]byte("test1"), []byte("test1")) + iavlStore.Set([]byte("test2"), []byte("test2")) + iavlStore.Set([]byte("test3"), []byte("test3")) + + iter := iavlStore.Subspace([]byte("test")) + expected := []string{"test1", "test2", "test3"} + for i := 0; iter.Valid(); iter.Next() { + expectedKey := expected[i] + key, value := iter.Key(), iter.Value() + assert.EqualValues(t, key, expectedKey) + assert.EqualValues(t, value, expectedKey) + i += 1 + } +} + func TestIAVLStoreQuery(t *testing.T) { db := dbm.NewMemDB() tree := iavl.NewVersionedTree(db, cacheSize)