diff options
author | Felix Lange <fjl@twurst.com> | 2015-08-18 19:42:21 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-09-15 05:36:30 +0800 |
commit | 8b32f10f16f19c0b8985399fafdfe31af29493a1 (patch) | |
tree | c8fc463ce665286c7e604fc56e0a7f1ac7c6fa9a | |
parent | 8c4dab77ba48dc68073fe1df79e7000043c0f966 (diff) | |
download | dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.gz dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.bz2 dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.lz dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.xz dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.tar.zst dexon-8b32f10f16f19c0b8985399fafdfe31af29493a1.zip |
ethdb: add NewBatch
-rw-r--r-- | ethdb/database.go | 20 | ||||
-rw-r--r-- | ethdb/interface.go | 6 | ||||
-rw-r--r-- | ethdb/memory_database.go | 23 |
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 +} |