-
Notifications
You must be signed in to change notification settings - Fork 40
/
qm.go
129 lines (106 loc) · 3.09 KB
/
qm.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
128
129
package sm
import (
"github.com/stephenafamo/bob"
"github.com/stephenafamo/bob/clause"
"github.com/stephenafamo/bob/dialect/sqlite/dialect"
"github.com/stephenafamo/bob/mods"
)
func With(name string, columns ...string) dialect.CTEChain[*dialect.SelectQuery] {
return dialect.With[*dialect.SelectQuery](name, columns...)
}
func Recursive(r bool) bob.Mod[*dialect.SelectQuery] {
return mods.Recursive[*dialect.SelectQuery](r)
}
func Distinct() bob.Mod[*dialect.SelectQuery] {
return mods.QueryModFunc[*dialect.SelectQuery](func(q *dialect.SelectQuery) {
q.Distinct = true
})
}
func Columns(clauses ...any) bob.Mod[*dialect.SelectQuery] {
return mods.Select[*dialect.SelectQuery](clauses)
}
func From(table any) dialect.FromChain[*dialect.SelectQuery] {
return dialect.From[*dialect.SelectQuery](table)
}
func InnerJoin(e any) dialect.JoinChain[*dialect.SelectQuery] {
return dialect.InnerJoin[*dialect.SelectQuery](e)
}
func LeftJoin(e any) dialect.JoinChain[*dialect.SelectQuery] {
return dialect.LeftJoin[*dialect.SelectQuery](e)
}
func RightJoin(e any) dialect.JoinChain[*dialect.SelectQuery] {
return dialect.RightJoin[*dialect.SelectQuery](e)
}
func FullJoin(e any) dialect.JoinChain[*dialect.SelectQuery] {
return dialect.FullJoin[*dialect.SelectQuery](e)
}
func CrossJoin(e any) bob.Mod[*dialect.SelectQuery] {
return dialect.CrossJoin[*dialect.SelectQuery](e)
}
func Where(e bob.Expression) mods.Where[*dialect.SelectQuery] {
return mods.Where[*dialect.SelectQuery]{E: e}
}
func Having(e any) bob.Mod[*dialect.SelectQuery] {
return mods.Having[*dialect.SelectQuery]{e}
}
func GroupBy(e any) bob.Mod[*dialect.SelectQuery] {
return mods.GroupBy[*dialect.SelectQuery]{
E: e,
}
}
func Window(name string) dialect.WindowsMod[*dialect.SelectQuery] {
m := dialect.WindowsMod[*dialect.SelectQuery]{
Name: name,
}
m.WindowChain = &dialect.WindowChain[*dialect.WindowsMod[*dialect.SelectQuery]]{
Wrap: &m,
}
return m
}
func OrderBy(e any) dialect.OrderBy[*dialect.SelectQuery] {
return dialect.OrderBy[*dialect.SelectQuery](func() clause.OrderDef {
return clause.OrderDef{
Expression: e,
}
})
}
// Sqlite can use an clauseession for the limit
func Limit(count any) bob.Mod[*dialect.SelectQuery] {
return mods.Limit[*dialect.SelectQuery]{
Count: count,
}
}
// Sqlite can use an clauseession for the offset
func Offset(count any) bob.Mod[*dialect.SelectQuery] {
return mods.Offset[*dialect.SelectQuery]{
Count: count,
}
}
func Union(q bob.Query) bob.Mod[*dialect.SelectQuery] {
return mods.Combine[*dialect.SelectQuery]{
Strategy: clause.Union,
Query: q,
All: false,
}
}
func UnionAll(q bob.Query) bob.Mod[*dialect.SelectQuery] {
return mods.Combine[*dialect.SelectQuery]{
Strategy: clause.Union,
Query: q,
All: true,
}
}
func Intersect(q bob.Query) bob.Mod[*dialect.SelectQuery] {
return mods.Combine[*dialect.SelectQuery]{
Strategy: clause.Intersect,
Query: q,
All: false,
}
}
func Except(q bob.Query) bob.Mod[*dialect.SelectQuery] {
return mods.Combine[*dialect.SelectQuery]{
Strategy: clause.Except,
Query: q,
All: false,
}
}