/
where_condition.go
61 lines (52 loc) · 1.66 KB
/
where_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
package mysql
import (
"fmt"
"strings"
"github.com/HarrisonEagle/HawkORM/utils"
)
type WhereCondition struct {
parser *utils.Parser
andConds []string
orConds []string
notConds []string
}
func newWhereCondition(parser *utils.Parser) *WhereCondition {
return &WhereCondition{parser: parser}
}
func (c *WhereCondition) SetAND(conditions interface{}) {
fields := c.parser.ExtractAllColumnsFromStructOrSlice(conditions, true)
values := c.parser.ExtractAllValuesFromStruct(conditions, true)
for i := 0; i < len(fields); i++ {
condPair := fmt.Sprintf("%s = \"%s\"", fields[i], values[i])
c.andConds = append(c.andConds, condPair)
}
}
func (c *WhereCondition) SetOR(conditions interface{}) {
fields := c.parser.ExtractAllColumnsFromStructOrSlice(conditions, true)
values := c.parser.ExtractAllValuesFromStruct(conditions, true)
for i := 0; i < len(fields); i++ {
condPair := fmt.Sprintf("%s = \"%s\"", fields[i], values[i])
c.orConds = append(c.orConds, condPair)
}
}
func (c *WhereCondition) SetNOT(conditions interface{}) {
fields := c.parser.ExtractAllColumnsFromStructOrSlice(conditions, true)
values := c.parser.ExtractAllValuesFromStruct(conditions, true)
for i := 0; i < len(fields); i++ {
condPair := fmt.Sprintf("%s <> \"%s\"", fields[i], values[i])
c.notConds = append(c.notConds, condPair)
}
}
func (c *WhereCondition) getConditionQuery() string {
orCondsStr := ""
allConds := c.andConds
if len(c.orConds) > 0 {
orCondsStr = "(" + strings.Join(c.orConds, " OR ") + ")"
allConds = append(allConds, orCondsStr)
}
allConds = append(allConds, c.notConds...)
if len(allConds) == 0 {
return ""
}
return "WHERE " + strings.Join(allConds, " AND ")
}