Skip to content

Commit 8b32f10

Browse files
committed
ethdb: add NewBatch
1 parent 8c4dab7 commit 8b32f10

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

ethdb/database.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,23 @@ func (self *LDBDatabase) meter(refresh time.Duration) {
268268
}
269269
}
270270
}
271+
272+
// TODO: remove this stuff and expose leveldb directly
273+
274+
func (db *LDBDatabase) NewBatch() Batch {
275+
return &ldbBatch{db: db.db, b: new(leveldb.Batch)}
276+
}
277+
278+
type ldbBatch struct {
279+
db *leveldb.DB
280+
b *leveldb.Batch
281+
}
282+
283+
func (b *ldbBatch) Put(key, value []byte) error {
284+
b.b.Put(key, value)
285+
return nil
286+
}
287+
288+
func (b *ldbBatch) Write() error {
289+
return b.db.Write(b.b, nil)
290+
}

ethdb/interface.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ type Database interface {
2222
Delete(key []byte) error
2323
Close()
2424
Flush() error
25+
NewBatch() Batch
26+
}
27+
28+
type Batch interface {
29+
Put(key, value []byte) error
30+
Write() error
2531
}

ethdb/memory_database.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,26 @@ func (db *MemDatabase) LastKnownTD() []byte {
9595
func (db *MemDatabase) Flush() error {
9696
return nil
9797
}
98+
99+
func (db *MemDatabase) NewBatch() Batch {
100+
return &memBatch{db: db}
101+
}
102+
103+
type kv struct{ k, v []byte }
104+
105+
type memBatch struct {
106+
db *MemDatabase
107+
writes []kv
108+
}
109+
110+
func (w *memBatch) Put(key, value []byte) error {
111+
w.writes = append(w.writes, kv{key, common.CopyBytes(value)})
112+
return nil
113+
}
114+
115+
func (w *memBatch) Write() error {
116+
for _, kv := range w.writes {
117+
w.db.db[string(kv.k)] = kv.v
118+
}
119+
return nil
120+
}

0 commit comments

Comments
 (0)