neoneo-go/pkg/database/leveldb.go

69 lines
1.5 KiB
Go
Raw Normal View History

2019-02-25 22:44:14 +00:00
package database
import (
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
)
// LDB represents a leveldb object
2019-02-25 22:44:14 +00:00
type LDB struct {
db *leveldb.DB
path string
}
// Database contains all methods needed for an object to be a database
2019-02-25 22:44:14 +00:00
type Database interface {
// Has checks whether the key is in the database
2019-02-25 22:44:14 +00:00
Has(key []byte) (bool, error)
// Put adds the key value pair into the pair
2019-02-25 22:44:14 +00:00
Put(key []byte, value []byte) error
// Get returns the value for the given key
2019-02-25 22:44:14 +00:00
Get(key []byte) ([]byte, error)
// Delete deletes the given value for the key from the database
2019-02-25 22:44:14 +00:00
Delete(key []byte) error
// Close closes the underlying db object
2019-02-25 22:44:14 +00:00
Close() error
}
// New will return a new leveldb instance
2019-02-25 22:44:14 +00:00
func New(path string) *LDB {
db, err := leveldb.OpenFile(path, nil)
if err != nil {
return nil
}
2019-02-25 22:44:14 +00:00
if _, corrupted := err.(*errors.ErrCorrupted); corrupted {
db, err = leveldb.RecoverFile(path, nil)
}
return &LDB{
db,
path,
}
}
// Has implements the database interface
2019-02-25 22:44:14 +00:00
func (l *LDB) Has(key []byte) (bool, error) {
return l.db.Has(key, nil)
}
// Put implements the database interface
2019-02-25 22:44:14 +00:00
func (l *LDB) Put(key []byte, value []byte) error {
return l.db.Put(key, value, nil)
}
// Get implements the database interface
2019-02-25 22:44:14 +00:00
func (l *LDB) Get(key []byte) ([]byte, error) {
return l.db.Get(key, nil)
}
// Delete implements the database interface
2019-02-25 22:44:14 +00:00
func (l *LDB) Delete(key []byte) error {
return l.db.Delete(key, nil)
}
// Close implements the database interface
2019-02-25 22:44:14 +00:00
func (l *LDB) Close() error {
return l.db.Close()
}