-
Notifications
You must be signed in to change notification settings - Fork 0
/
conflict.go
127 lines (110 loc) · 2.44 KB
/
conflict.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
package gosql
import "strings"
// On conflict query part
type conflict struct {
// object of conflict
object string
// action on conflict
action string
// set of changes
set expression
// condition
where Condition
// constraint
constraint string
}
// String conflict expression
func (c *conflict) String() string {
if c.IsEmpty() {
return ""
}
b := strings.Builder{}
b.WriteString("ON CONFLICT")
if c.object != "" {
b.WriteString(" (" + c.object + ")")
}
if c.constraint != "" {
b.WriteString(" ON CONSTRAINT " + c.constraint)
}
if c.set.Len() > 0 {
if c.action != "" {
b.WriteString(" DO " + c.action)
}
b.WriteString(" SET " + c.set.String(", "))
if !c.where.IsEmpty() {
b.WriteString(" WHERE " + c.where.String())
}
} else {
if !c.where.IsEmpty() {
b.WriteString(" WHERE " + c.where.String())
}
if c.action != "" {
b.WriteString(" DO " + c.action)
}
}
return b.String()
}
// GetArguments get all arguments
func (c *conflict) GetArguments() []any {
return append(c.set.GetArguments(), c.where.GetArguments()...)
}
// IsEmpty Is conflict empty
func (c *conflict) IsEmpty() bool {
return c.object == "" && c.action == "" && c.set.Len() == 0 && c.where.IsEmpty() && c.constraint == ""
}
// Object of conflict
func (c *conflict) Object(object string) *conflict {
c.object = object
return c
}
// GetObject get conflict object
func (c *conflict) GetObject() string {
return c.object
}
// ResetObject reset
func (c *conflict) ResetObject() *conflict {
c.object = ""
return c
}
// Action of conflict
func (c *conflict) Action(action string) *conflict {
c.action = action
return c
}
// GetAction get action
func (c *conflict) GetAction() string {
return c.action
}
// ResetAction reset action
func (c *conflict) ResetAction() *conflict {
c.action = ""
return c
}
// Set of expressions on conflict
func (c *conflict) Set() *expression {
return &c.set
}
// Where get condition
func (c *conflict) Where() *Condition {
return &c.where
}
// Constraint set constraint
func (c *conflict) Constraint(constraint string) *conflict {
c.constraint = constraint
return c
}
// GetConstraint get constraint
func (c *conflict) GetConstraint() string {
return c.constraint
}
// ResetConstraint reset constraint
func (c *conflict) ResetConstraint() *conflict {
c.constraint = ""
return c
}
// NewConflict conflict constructor
func NewConflict() *conflict {
return &conflict{
where: Condition{operator: ConditionOperatorAnd},
}
}