-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject.go
144 lines (125 loc) · 3.4 KB
/
object.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package orm
import (
"strings"
)
// Objects 数据对象操作
type Objects interface {
// normal
Filter(M) Objects // 搜索结果
Count() (int, error) // 数目
Limit(int) Objects // 限制
Skip(int) Objects // 跳过
Sort(...string) Objects // 排序
Group(...string) Objects // 去重
Meta() (*Meta, error) // 摘要信息
All(result interface{}) error // 保存搜索结果至
One(result interface{}) error // 取一条记录
Create(insert interface{}) error // 插入一条记录
Update(record interface{}) error // 更改(输入struct或map) *** struct为覆盖更新,map为局部更新
UpdateOne(obj interface{}) error // 只确保更改一条(输入struct或map)
Delete() error // 删除
DeleteOne() error // 删除一条记录
// 事务操作
TLockUpdate(t Trans) error // 行锁
TCount(t Trans) (int, error) // 数目
TAll(result interface{}, t Trans) error // 保存搜索结果至
TOne(result interface{}, t Trans) error // 取一条记录
TCreate(insert interface{}, t Trans) error // 插入一条记录
TUpdate(obj interface{}, t Trans) error // 更改
TUpdateOne(obj interface{}, t Trans) error // 更改一条
TDelete(t Trans) error // 删除
TDeleteOne(t Trans) error // 删除一条记录
// result
GetResult() (Result, error) // 取返回结果
// other
With(opt *ArgObjects) Objects // 以新的日志级别运行
}
// MetaReader Meta对象操作
type MetaReader interface {
Meta() (*Meta, error) // 摘要信息
}
// DataReader Data对象操作
type DataReader interface {
All(result interface{}) error // 保存搜索结果至
}
// ResultReader Data对象操作
type ResultReader interface {
MetaReader
DataReader
}
// M 搜索条件
type M map[string]interface{}
// Scrape 按黑名单,白名单,默认值过滤自己
func (m M) Scrape(
whiteList map[string]interface{},
blackList map[string]interface{},
defaultVals map[string]interface{}) error {
return HookParseSafe(m, whiteList, blackList, defaultVals)
}
// SQL prefix: for pg syntax
func (m M) SQL(driverName string, prefixIndex int) (sql string, vals []interface{}, err error) {
return HookParseSQL[driverName](m, prefixIndex)
}
// Map 返回自己
func (m M) Map() (n map[string]interface{}) {
return m
}
// IsEmpty 判断是否为空
func (m M) IsEmpty() bool {
if m == nil {
return true
} else if len(m) == 0 {
return true
} else {
return false
}
}
// Set 搜索条件基本方法
func (m M) Set(k string, v interface{}) {
m[k] = v
}
// SetNotExist 尝试添加
func (m M) SetNotExist(k string, v interface{}) {
if !m.Hav(k) {
m.Set(k, v)
}
}
// SetExist 尝试更改
func (m M) SetExist(k string, v interface{}) {
if m.Hav(k) {
m.Set(k, v)
}
}
// Del 删除
func (m M) Del(k string) {
delete(m, k)
}
// Get 取值
func (m M) Get(k string) interface{} {
return m[k]
}
// GetString 取字符串
func (m M) GetString(k string) (s string) {
if v, ok := m[k]; ok {
if _s, _ok := v.(string); _ok {
s = _s
}
}
return
}
// Hav 判断是否存在
func (m M) Hav(k string) (ok bool) {
_, ok = m[k]
return
}
// Update 更新
func (m M) Update(t *M) (err error) {
for k, v := range *t {
m[strings.ToLower(k)] = v
}
return
}
// NewM 新建并初始化
func NewM() M {
return M(make(map[string]interface{}))
}