-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcondition.go
102 lines (81 loc) · 2.5 KB
/
condition.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
package gormqy
import "fmt"
type Condition struct {
query *Query
logic *Logic
onceWrappers []ConditionExprWrapper
exprs []string
vals []interface{}
}
func NewCondition(q *Query) *Condition {
logic := &Logic{}
cond := &Condition{
query: q,
}
logic.cond = cond
cond.logic = logic
return cond
}
func (c *Condition) WithLeftBracket() *Condition {
c.onceWrappers = append(c.onceWrappers, ConditionExprWithLeftBracket())
return c
}
func (c *Condition) withRightBracket() *Condition {
if l := len(c.exprs); l != 0 {
c.exprs[l-1] = ConditionExprWithRightBracket()(c.exprs[l-1])
}
return c
}
type ConditionExprWrapper func(string) string
func ConditionExprWithLeftBracket() ConditionExprWrapper {
return func(expr string) string {
return fmt.Sprintf("(%s", expr)
}
}
func ConditionExprWithRightBracket() ConditionExprWrapper {
return func(expr string) string {
return fmt.Sprintf("%s)", expr)
}
}
func (c *Condition) Eq(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s = ?", column), val)
}
func (c *Condition) NotEq(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s != ?", column), val)
}
func (c *Condition) Ge(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s >= ?", column), val)
}
func (c *Condition) Le(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s <= ?", column), val)
}
func (c *Condition) Gt(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s > ?", column), val)
}
func (c *Condition) Lt(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s < ?", column), val)
}
func (c *Condition) Contain(column string, val string) *Logic {
return c.add(fmt.Sprintf("%s LIKE ?", column), fmt.Sprintf("%%%s%%", val))
}
func (c *Condition) Prefix(column string, val string) *Logic {
return c.add(fmt.Sprintf("%s LIKE ?", column), fmt.Sprintf("%s%%", val))
}
func (c *Condition) Suffix(column string, val string) *Logic {
return c.add(fmt.Sprintf("%s LIKE ?", column), fmt.Sprintf("%%%s", val))
}
func (c *Condition) In(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s IN (?)", column), val)
}
func (c *Condition) NotIn(column string, val interface{}) *Logic {
return c.add(fmt.Sprintf("%s NOT IN (?)", column), val)
}
func (c *Condition) add(expr string, val interface{}) *Logic {
for _, w := range c.onceWrappers {
expr = w(expr)
}
c.onceWrappers = nil
c.exprs = append(c.exprs, expr)
c.vals = append(c.vals, val)
return c.logic
}