90 lines
2.0 KiB
Go
90 lines
2.0 KiB
Go
package dbadapter
|
|
|
|
import (
|
|
"io"
|
|
|
|
dbm "github.com/tendermint/tm-db"
|
|
|
|
"github.com/cosmos/cosmos-sdk/store/cachekv"
|
|
"github.com/cosmos/cosmos-sdk/store/tracekv"
|
|
"github.com/cosmos/cosmos-sdk/store/types"
|
|
)
|
|
|
|
// Wrapper type for dbm.Db with implementation of KVStore
|
|
type Store struct {
|
|
dbm.DB
|
|
}
|
|
|
|
// Get wraps the underlying DB's Get method panicing on error.
|
|
func (dsa Store) Get(key []byte) []byte {
|
|
v, err := dsa.DB.Get(key)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// Has wraps the underlying DB's Has method panicing on error.
|
|
func (dsa Store) Has(key []byte) bool {
|
|
ok, err := dsa.DB.Has(key)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return ok
|
|
}
|
|
|
|
// Set wraps the underlying DB's Set method panicing on error.
|
|
func (dsa Store) Set(key, value []byte) {
|
|
types.AssertValidKey(key)
|
|
if err := dsa.DB.Set(key, value); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// Delete wraps the underlying DB's Delete method panicing on error.
|
|
func (dsa Store) Delete(key []byte) {
|
|
if err := dsa.DB.Delete(key); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// Iterator wraps the underlying DB's Iterator method panicing on error.
|
|
func (dsa Store) Iterator(start, end []byte) types.Iterator {
|
|
iter, err := dsa.DB.Iterator(start, end)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return iter
|
|
}
|
|
|
|
// ReverseIterator wraps the underlying DB's ReverseIterator method panicing on error.
|
|
func (dsa Store) ReverseIterator(start, end []byte) types.Iterator {
|
|
iter, err := dsa.DB.ReverseIterator(start, end)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return iter
|
|
}
|
|
|
|
// GetStoreType returns the type of the store.
|
|
func (Store) GetStoreType() types.StoreType {
|
|
return types.StoreTypeDB
|
|
}
|
|
|
|
// CacheWrap cache wraps the underlying store.
|
|
func (dsa Store) CacheWrap() types.CacheWrap {
|
|
return cachekv.NewStore(dsa)
|
|
}
|
|
|
|
// CacheWrapWithTrace implements KVStore.
|
|
func (dsa Store) CacheWrapWithTrace(w io.Writer, tc types.TraceContext) types.CacheWrap {
|
|
return cachekv.NewStore(tracekv.NewStore(dsa, w, tc))
|
|
}
|
|
|
|
// dbm.DB implements KVStore so we can CacheKVStore it.
|
|
var _ types.KVStore = Store{}
|