From f1a9fc7722dd2d7a50d28fd165070d761be88c20 Mon Sep 17 00:00:00 2001 From: Wolfgang Welz <welzwo@gmail.com> Date: Wed, 12 Jun 2019 20:24:05 +0200 Subject: [PATCH] Add delete and iterator functionality to database --- packages/database/database.go | 31 +++++++++++++++++++++++++++++++ packages/database/interfaces.go | 4 +++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/database/database.go b/packages/database/database.go index 9ac44a31..5ac305d6 100644 --- a/packages/database/database.go +++ b/packages/database/database.go @@ -112,6 +112,37 @@ func (this *databaseImpl) Get(key []byte) ([]byte, error) { return result, err } +func (this *databaseImpl) Delete(key []byte) error { + err := this.db.Update(func(txn *badger.Txn) error { + err := txn.Delete(key) + return err + }) + return err +} + +func (this *databaseImpl) ForEach(consumer func(key []byte, value []byte)) error { + err := this.db.View(func(txn *badger.Txn) error { + // create an iterator the default options + it := txn.NewIterator(badger.DefaultIteratorOptions) + defer it.Close() + + // loop through every key-value-pair and call the function + for it.Rewind(); it.Valid(); it.Next() { + item := it.Item() + + key := item.Key() + value, err := item.ValueCopy(nil) + if err != nil { + return err + } + + consumer(key, value) + } + return nil + }) + return err +} + func (this *databaseImpl) Close() error { this.openLock.Lock() defer this.openLock.Unlock() diff --git a/packages/database/interfaces.go b/packages/database/interfaces.go index 26b3a586..064e311b 100644 --- a/packages/database/interfaces.go +++ b/packages/database/interfaces.go @@ -3,7 +3,9 @@ package database type Database interface { Open() error Set(key []byte, value []byte) error - Get(key []byte) ([]byte, error) Contains(key []byte) (bool, error) + Get(key []byte) ([]byte, error) + ForEach(func(key []byte, value []byte)) error + Delete(key []byte) error Close() error } -- GitLab