Implement namespace optional arg
This commit is contained in:
12
leveldb.go
12
leveldb.go
@@ -1,6 +1,8 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"path"
|
||||
|
||||
"github.com/syndtr/goleveldb/leveldb"
|
||||
"github.com/syndtr/goleveldb/leveldb/filter"
|
||||
"github.com/syndtr/goleveldb/leveldb/opt"
|
||||
@@ -19,14 +21,15 @@ func NewLevelDB(path string) (*LevelDB, error) {
|
||||
}, err
|
||||
}
|
||||
|
||||
func (ldb *LevelDB) Get(key string) ([]byte, error) {
|
||||
func (ldb *LevelDB) Get(key string, ns ...string) ([]byte, error) {
|
||||
namespace := resolveNamespace(ns)
|
||||
snapshot, err := ldb.db.GetSnapshot()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer snapshot.Release()
|
||||
|
||||
v, err := snapshot.Get([]byte(key), nil)
|
||||
v, err := snapshot.Get([]byte(path.Join(namespace, key)), nil)
|
||||
if err == leveldb.ErrNotFound {
|
||||
err = ErrNotFound
|
||||
} else if err != nil {
|
||||
@@ -36,9 +39,10 @@ func (ldb *LevelDB) Get(key string) ([]byte, error) {
|
||||
return v, err
|
||||
}
|
||||
|
||||
func (ldb *LevelDB) Set(key string, value []byte) error {
|
||||
func (ldb *LevelDB) Set(key string, value []byte, ns ...string) error {
|
||||
namespace := resolveNamespace(ns)
|
||||
batch := &leveldb.Batch{}
|
||||
batch.Put([]byte(key), value)
|
||||
batch.Put([]byte(path.Join(namespace, key)), value)
|
||||
return ldb.db.Write(batch, nil)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user