diff --git a/packages/database/database.go b/packages/database/database.go index 9ac44a31685a017dd62785b16996f089540b15c8..5ac305d61bd4dcb798282ebdea49fb5edb443010 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 26b3a5863a360404ac48baff94f41ed3423bc2a4..064e311bc9f9b263538afb036bc30368ccd7f15e 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 }