-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathstatement.go
94 lines (80 loc) · 2.37 KB
/
statement.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
package pgq
// StatementBuilder for WHERE parts.
type StatementBuilder struct {
whereParts []SQLizer
}
// Select returns a SelectBuilder for this StatementBuilder.
func (b StatementBuilder) Select(columns ...string) SelectBuilder {
builder := SelectBuilder{}.Columns(columns...)
builder.whereParts = b.whereParts
return builder
}
// Update returns a UpdateBuilder for this StatementBuilder.
func (b StatementBuilder) Update(table string) UpdateBuilder {
builder := UpdateBuilder{}.Table(table)
builder.whereParts = b.whereParts
return builder
}
// Delete returns a DeleteBuilder for this StatementBuilder.
func (b StatementBuilder) Delete(from string) DeleteBuilder {
builder := DeleteBuilder{}.From(from)
builder.whereParts = b.whereParts
return builder
}
// Where adds WHERE expressions to the query.
//
// See SelectBuilder.Where for more information.
func (b StatementBuilder) Where(pred any, args ...any) StatementBuilder {
b.whereParts = []SQLizer{newWherePart(pred, args...)}
return b
}
// Statement returns a new StatementBuilder, which can be used to create SQL WHERE parts.
func Statement() StatementBuilder {
return StatementBuilder{}
}
// Select returns a new SelectBuilder, optionally setting some result columns.
//
// See SelectBuilder.Columns.
func Select(columns ...string) SelectBuilder {
return SelectBuilder{}.Columns(columns...)
}
// Insert returns a new InsertBuilder with the given table name.
//
// See InsertBuilder.Into.
func Insert(into string) InsertBuilder {
return InsertBuilder{into: into}
}
// Replace returns a new InsertBuilder with the statement keyword set to
// "REPLACE" and with the given table name.
//
// See InsertBuilder.Into.
func Replace(into string) InsertBuilder {
builder := InsertBuilder{}
builder.verb = "REPLACE"
return builder.Into(into)
}
// Update returns a new UpdateBuilder with the given table name.
//
// See UpdateBuilder.Table.
func Update(table string) UpdateBuilder {
return UpdateBuilder{table: table}
}
// Delete returns a new DeleteBuilder with the given table name.
//
// See DeleteBuilder.Table.
func Delete(from string) DeleteBuilder {
return DeleteBuilder{from: from}
}
// Case returns a new CaseBuilder
// "what" represents case value
func Case(what ...any) CaseBuilder {
b := CaseBuilder{}
switch len(what) {
case 0:
case 1:
b = b.what(what[0])
default:
b = b.what(newPart(what[0], what[1:]...))
}
return b
}