From c2d1b2f9d5337950dea5f623313cec255c8708a1 Mon Sep 17 00:00:00 2001 From: Wolfgang Welz <welzwo@gmail.com> Date: Wed, 13 Nov 2019 14:43:31 +0100 Subject: [PATCH] Add ForEachWithPrefix database function --- go.sum | 1 + packages/database/database.go | 12 ++++++++++-- packages/database/interfaces.go | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/go.sum b/go.sum index 24c61a4e..3df10278 100644 --- a/go.sum +++ b/go.sum @@ -43,6 +43,7 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/iotaledger/iota.go v1.0.0-beta.7 h1:OaUNahPvOdQz2nKcgeAfcUdxlEDlEV3xwLIkwzZ1B/U= github.com/iotaledger/iota.go v1.0.0-beta.7/go.mod h1:dMps6iMVU1pf5NDYNKIw4tRsPeC8W3ZWjOvYHOO1PMg= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= diff --git a/packages/database/database.go b/packages/database/database.go index e6183af0..913ffc3f 100644 --- a/packages/database/database.go +++ b/packages/database/database.go @@ -100,10 +100,10 @@ func (this *prefixDb) Delete(key []byte) error { return err } -func (this *prefixDb) ForEach(consumer func([]byte, []byte)) error { +func (this *prefixDb) forEach(prefix []byte, consumer func([]byte, []byte)) error { err := this.db.View(func(txn *badger.Txn) error { iteratorOptions := badger.DefaultIteratorOptions - iteratorOptions.Prefix = this.prefix // filter by prefix + iteratorOptions.Prefix = prefix // filter by prefix // create an iterator the default options it := txn.NewIterator(iteratorOptions) @@ -124,3 +124,11 @@ func (this *prefixDb) ForEach(consumer func([]byte, []byte)) error { }) return err } + +func (this *prefixDb) ForEachWithPrefix(prefix []byte, consumer func([]byte, []byte)) error { + return this.forEach(append(this.prefix, prefix...), consumer) +} + +func (this *prefixDb) ForEach(consumer func([]byte, []byte)) error { + return this.forEach(this.prefix, consumer) +} diff --git a/packages/database/interfaces.go b/packages/database/interfaces.go index cdbc1aab..56d2b957 100644 --- a/packages/database/interfaces.go +++ b/packages/database/interfaces.go @@ -7,6 +7,7 @@ type Database interface { SetWithTTL(key []byte, value []byte, ttl time.Duration) error Contains(key []byte) (bool, error) Get(key []byte) ([]byte, error) - ForEach(func(key []byte, value []byte)) error + ForEach(consumer func(key []byte, value []byte)) error + ForEachWithPrefix(prefix []byte, consumer func(key []byte, value []byte)) error Delete(key []byte) error } -- GitLab