-
Notifications
You must be signed in to change notification settings - Fork 0
/
stmt_update.go
62 lines (49 loc) · 1.14 KB
/
stmt_update.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
package sqlbuilder
import (
"context"
"github.com/pkg/errors"
)
var (
UpdateNeedLimitByWhere = errors.New("no where limit for update")
)
func Update(table Table, modifiers ...string) *StmtUpdate {
return &StmtUpdate{
table: table,
modifiers: modifiers,
}
}
type StmtUpdate struct {
table Table
modifiers []string
assignments []Assignment
additions []Addition
}
func (s *StmtUpdate) IsNil() bool {
return s == nil || IsNilExpr(s.table) || len(s.assignments) == 0
}
func (s StmtUpdate) Set(assignments ...Assignment) *StmtUpdate {
s.assignments = assignments
return &s
}
func (s StmtUpdate) Where(c SqlExpr, additions ...Addition) *StmtUpdate {
s.additions = []Addition{Where(c)}
if len(additions) > 0 {
s.additions = append(s.additions, additions...)
}
return &s
}
func (s *StmtUpdate) Ex(ctx context.Context) *Ex {
e := Expr("UPDATE")
if len(s.modifiers) > 0 {
for i := range s.modifiers {
e.WriteQueryByte(' ')
e.WriteQuery(s.modifiers[i])
}
}
e.WriteQueryByte(' ')
e.WriteExpr(s.table)
e.WriteQuery(" SET ")
WriteAssignments(e, s.assignments...)
WriteAdditions(e, s.additions...)
return e.Ex(ctx)
}