package db
|
|
|
|
import . "github.com/tendermint/go-common"
|
|
|
|
type DB interface {
|
|
Get([]byte) []byte
|
|
Set([]byte, []byte)
|
|
SetSync([]byte, []byte)
|
|
Delete([]byte)
|
|
DeleteSync([]byte)
|
|
Close()
|
|
NewBatch() Batch
|
|
|
|
// For debugging
|
|
Print()
|
|
}
|
|
|
|
type Batch interface {
|
|
Set(key, value []byte)
|
|
Delete(key []byte)
|
|
Write()
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const (
|
|
CLevelDBBackendStr = "goleveldb"
|
|
GoLevelDBBackendStr = "cleveldb"
|
|
MemDBBackendStr = "memdb"
|
|
)
|
|
|
|
type dbCreator func(name string, dir string) (DB, error)
|
|
|
|
var backends map[string]dbCreator
|
|
|
|
func registerDBCreator(backend string, creator dbCreator, force bool) {
|
|
_, ok := backends[backend]
|
|
if !force && ok {
|
|
return
|
|
}
|
|
backends[backend] = creator
|
|
}
|
|
|
|
func NewDB(name string, backend string, dir string) DB {
|
|
db, err := backends[backend](name, dir)
|
|
if err != nil {
|
|
PanicSanity(Fmt("Error initializing DB: %v", err))
|
|
}
|
|
return db
|
|
}
|