ethdb: add Putter interface and Has method

This commit is contained in:
Felix Lange 2017-07-14 17:36:52 +02:00
parent c4d21bc8e5
commit 2ea88e168c
3 changed files with 23 additions and 4 deletions

View file

@ -109,6 +109,10 @@ func (db *LDBDatabase) Put(key []byte, value []byte) error {
return db.db.Put(key, value, nil) return db.db.Put(key, value, nil)
} }
func (db *LDBDatabase) Has(key []byte) (bool, error) {
return db.db.Has(key, nil)
}
// Get returns the given key if it's present. // Get returns the given key if it's present.
func (db *LDBDatabase) Get(key []byte) ([]byte, error) { func (db *LDBDatabase) Get(key []byte) ([]byte, error) {
// Measure the database get latency, if requested // Measure the database get latency, if requested
@ -271,8 +275,6 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
} }
} }
// TODO: remove this stuff and expose leveldb directly
func (db *LDBDatabase) NewBatch() Batch { func (db *LDBDatabase) NewBatch() Batch {
return &ldbBatch{db: db.db, b: new(leveldb.Batch)} return &ldbBatch{db: db.db, b: new(leveldb.Batch)}
} }
@ -309,6 +311,10 @@ func (dt *table) Put(key []byte, value []byte) error {
return dt.db.Put(append([]byte(dt.prefix), key...), value) return dt.db.Put(append([]byte(dt.prefix), key...), value)
} }
func (dt *table) Has(key []byte) (bool, error) {
return dt.db.Has(append([]byte(dt.prefix), key...))
}
func (dt *table) Get(key []byte) ([]byte, error) { func (dt *table) Get(key []byte) ([]byte, error) {
return dt.db.Get(append([]byte(dt.prefix), key...)) return dt.db.Get(append([]byte(dt.prefix), key...))
} }

View file

@ -16,15 +16,20 @@
package ethdb package ethdb
type Database interface { type Putter interface {
Put(key []byte, value []byte) error Put(key []byte, value []byte) error
}
type Database interface {
Putter
Get(key []byte) ([]byte, error) Get(key []byte) ([]byte, error)
Has(key []byte) (bool, error)
Delete(key []byte) error Delete(key []byte) error
Close() Close()
NewBatch() Batch NewBatch() Batch
} }
type Batch interface { type Batch interface {
Put(key, value []byte) error Putter
Write() error Write() error
} }

View file

@ -45,6 +45,14 @@ func (db *MemDatabase) Put(key []byte, value []byte) error {
return nil return nil
} }
func (db *MemDatabase) Has(key []byte) (bool, error) {
db.lock.Lock()
defer db.lock.Unlock()
_, ok := db.db[string(key)]
return ok, nil
}
func (db *MemDatabase) Get(key []byte) ([]byte, error) { func (db *MemDatabase) Get(key []byte) ([]byte, error) {
db.lock.RLock() db.lock.RLock()
defer db.lock.RUnlock() defer db.lock.RUnlock()