aboutsummaryrefslogtreecommitdiffstats
path: root/ethdb
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2015-08-18 19:42:21 +0800
committerFelix Lange <fjl@twurst.com>2015-09-15 05:36:30 +0800
commit8b32f10f16f19c0b8985399fafdfe31af29493a1 (patch)
treec8fc463ce665286c7e604fc56e0a7f1ac7c6fa9a /ethdb
parent8c4dab77ba48dc68073fe1df79e7000043c0f966 (diff)
downloaddexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.gz
dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.zst
dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.zip
ethdb: add NewBatch
Diffstat (limited to 'ethdb')
-rw-r--r--ethdb/database.go20
-rw-r--r--ethdb/interface.go6
-rw-r--r--ethdb/memory_database.go23
3 files changed, 49 insertions, 0 deletions
diff --git a/ethdb/database.go b/ethdb/database.go
index 9e80e5409..ad87f853d 100644
--- a/ethdb/database.go
+++ b/ethdb/database.go
@@ -268,3 +268,23 @@ func (self *LDBDatabase) meter(refresh time.Duration) {
}
}
}
+
+// TODO: remove this stuff and expose leveldb directly
+
+func (db *LDBDatabase) NewBatch() Batch {
+ return &ldbBatch{db: db.db, b: new(leveldb.Batch)}
+}
+
+type ldbBatch struct {
+ db *leveldb.DB
+ b *leveldb.Batch
+}
+
+func (b *ldbBatch) Put(key, value []byte) error {
+ b.b.Put(key, value)
+ return nil
+}
+
+func (b *ldbBatch) Write() error {
+ return b.db.Write(b.b, nil)
+}
diff --git a/ethdb/interface.go b/ethdb/interface.go
index 598e8eaa3..acb1b57c0 100644
--- a/ethdb/interface.go
+++ b/ethdb/interface.go
@@ -22,4 +22,10 @@ type Database interface {
Delete(key []byte) error
Close()
Flush() error
+ NewBatch() Batch
+}
+
+type Batch interface {
+ Put(key, value []byte) error
+ Write() error
}
diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go
index d50f8f9d4..4fcce1812 100644
--- a/ethdb/memory_database.go
+++ b/ethdb/memory_database.go
@@ -95,3 +95,26 @@ func (db *MemDatabase) LastKnownTD() []byte {
func (db *MemDatabase) Flush() error {
return nil
}
+
+func (db *MemDatabase) NewBatch() Batch {
+ return &memBatch{db: db}
+}
+
+type kv struct{ k, v []byte }
+
+type memBatch struct {
+ db *MemDatabase
+ writes []kv
+}
+
+func (w *memBatch) Put(key, value []byte) error {
+ w.writes = append(w.writes, kv{key, common.CopyBytes(value)})
+ return nil
+}
+
+func (w *memBatch) Write() error {
+ for _, kv := range w.writes {
+ w.db.db[string(kv.k)] = kv.v
+ }
+ return nil
+}