-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgkv.go
More file actions
102 lines (87 loc) · 2.27 KB
/
gkv.go
File metadata and controls
102 lines (87 loc) · 2.27 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
90
91
92
93
94
95
96
97
98
99
100
101
102
package gkv
import "errors"
// DefaultTableName the default name of table.
const DefaultTableName = "gkv"
// ErrTableName illegal table name error
var ErrTableName = errors.New("illegal table name")
// KV short for key-value,
// interface contains all behaviors for key-value adapter.
type KV interface {
// DB returns the native DB of the adapter.
DB() interface{}
// Close releases all database resources.
Close() error
// Register creates a new storage if it doesn't already exist.
Register([]byte) error
// Put sets the value for a key.
Put([]byte, []byte) error
// Get retrieves the value for a key.
Get([]byte) []byte
// Delete deletes the given key from the database resources.
Delete([]byte) error
// Count returns the total number of all the keys.
Count() int
// Iterator creates an iterator for iterating over all the keys.
Iterator(func([]byte, []byte) bool) error
}
// Instance is a function create a new KV Instance
type Instance func(paths ...string) KV
var inst Instance
// Register makes a KV adapter available by the adapter name.
// Only the last one can take effect.
func Register(i Instance) {
inst = i
}
var db KV
// Open creates a new KV driver by table name and storage file path.
// table is the name of storage.
// paths are storage file paths.
func Open(table []byte, paths ...string) error {
if inst == nil {
return errors.New("forgot to import the driver")
}
db = inst(paths...)
return db.Register(table)
}
// Close releases all database resources.
func Close() error {
if db != nil {
return db.Close()
}
return nil
}
// Put sets the value for a key.
func Put(key, value []byte) error {
if db == nil {
return errors.New("the db service is not started")
}
return db.Put(key, value)
}
// Get retrieves the value for a key.
func Get(key []byte) []byte {
if db == nil {
return nil
}
return db.Get(key)
}
// Delete deletes the given key from the database resources.
func Delete(key []byte) error {
if db == nil {
return nil
}
return db.Delete(key)
}
// Count returns the total number of all the keys.
func Count() int {
if db == nil {
return 0
}
return db.Count()
}
// Iterator creates an iterator for iterating over all the keys.
func Iterator(f func([]byte, []byte) bool) error {
if db == nil {
return nil
}
return db.Iterator(f)
}