-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathengine_badger.go
More file actions
92 lines (69 loc) · 1.63 KB
/
engine_badger.go
File metadata and controls
92 lines (69 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package gokvadmin
import (
"github.com/dgraph-io/badger"
"github.com/pkg/errors"
)
type EngineBadger struct {
db *badger.DB
bucket []byte
}
func init() {
RegisterEngine(engineBadger, &EngineBadger{})
}
func (e *EngineBadger) SetDB(db interface{}) error {
edb, ok := db.(*badger.DB)
if !ok {
return errors.New("db must be an instance of *badger.DB")
}
e.db = edb
return nil
}
func (e EngineBadger) GetName() string {
return "badger"
}
func (e EngineBadger) Get(key []byte, bucket []byte) ([]byte, error) {
var value []byte
err := e.db.View(func(txn *badger.Txn) error {
item, err := txn.Get(key)
if err != nil {
return err
}
value, err = item.Value()
return err
})
return value, err
}
func (e EngineBadger) GetByPrefix(prefix []byte, bucket []byte, limit int, offset int) ([]Record, error) {
var records []Record
err := e.db.View(func(txn *badger.Txn) error {
it := txn.NewIterator(badger.DefaultIteratorOptions)
defer it.Close()
outer : for it.Seek(prefix); it.ValidForPrefix(prefix) && limit > 0; it.Next() {
offset--;
for offset >= 0 {
continue outer
}
item := it.Item()
k := item.Key()
v, err := item.Value()
if err == nil {
records = append(records, Record{Key: k, Value:v})
}
limit--
continue outer
}
return nil
})
return records, err
}
func (e EngineBadger) Set(key []byte, value []byte, bucket []byte) error {
return e.db.Update(func(txn *badger.Txn) error {
err := txn.Set(key, value)
return err
})
}
func (e EngineBadger) Delete(key []byte, bucket []byte) error {
return e.db.Update(func(txn *badger.Txn) error {
return txn.Delete(key)
})
}