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