-
Notifications
You must be signed in to change notification settings - Fork 333
/
Copy pathxdb.go
107 lines (91 loc) · 2.16 KB
/
xdb.go
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
103
104
105
106
107
package xdb
import (
"github.com/brokercap/Bifrost/xdb/driver"
"encoding/json"
)
import (
_ "github.com/brokercap/Bifrost/xdb/leveldb"
_ "github.com/brokercap/Bifrost/xdb/redis"
)
const DEFAULT_PREFIX = "xdb"
type Client struct {
prefix string
client driver.XdbDriver
}
func NewClient(name ,uri string) (*Client,error){
client,err := driver.Open(name,uri)
if err != nil{
return nil,err
}
return &Client{
client:client,
prefix:DEFAULT_PREFIX,
},nil
}
func (This *Client) SetPrefix(prefix string) *Client{
This.prefix = prefix
return This
}
func (This *Client) GetKeyVal(table,key string,data interface{}) ([]byte,error){
myKey := []byte(This.prefix+"-"+table+"-"+key)
s,err := This.client.GetKeyVal(myKey)
if err != nil{
return nil,err
}
err2 := json.Unmarshal(s,data)
if err2 != nil{
return nil,err2
}
return s,err
}
func (This *Client) PutKeyVal(table,key string,data interface{}) error{
myKey := []byte(This.prefix+"-"+table+"-"+key)
val,err := json.Marshal(data)
if err != nil{
return err
}
err = This.client.PutKeyVal(myKey, val)
return err
}
func (This *Client) GetKeyValBytes(table,key string) ([]byte,error){
myKey := []byte(This.prefix+"-"+table+"-"+key)
s,err := This.client.GetKeyVal(myKey)
return s,err
}
func (This *Client) PutKeyValBytes(table,key string,val []byte) error{
myKey := []byte(This.prefix+"-"+table+"-"+key)
err := This.client.PutKeyVal(myKey, val)
return err
}
func (This *Client) DelKeyVal(table,key string) error{
myKey := []byte(This.prefix+"-"+table+"-"+key)
return This.client.DelKeyVal(myKey)
}
func (This *Client) GetListByKeyPrefix(table,key string,data interface{}) ([]driver.ListValue,error){
prefix := This.prefix+"-"+table+"-"
prefixLen := len(prefix)
myKey := []byte(prefix+key)
s,err := This.client.GetListByKeyPrefix(myKey)
if err != nil{
return s,err
}
var val = ""
for k, v := range s {
if data != nil {
if val == "" {
val = v.Value
} else {
val += "," + v.Value
}
}
s[k].Key = s[k].Key[prefixLen:]
}
if data != nil {
val = "[" + val + "]"
err = json.Unmarshal([]byte(val), &data)
}
return s,err
}
func (This *Client) Close() error{
return This.client.Close()
}