forked from go-rel/rel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
join_query.go
88 lines (73 loc) · 2.14 KB
/
join_query.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
package rel
// JoinQuery defines join clause in query.
type JoinQuery struct {
Mode string
Table string
From string
To string
Arguments []interface{}
}
// Build query.
func (jq JoinQuery) Build(query *Query) {
query.JoinQuery = append(query.JoinQuery, jq)
}
// NewJoinWith query with custom join mode, table and field.
func NewJoinWith(mode string, table string, from string, to string) JoinQuery {
return JoinQuery{
Mode: mode,
Table: table,
From: from,
To: to,
}
}
// NewJoinFragment defines a join clause using raw query.
func NewJoinFragment(expr string, args ...interface{}) JoinQuery {
if args == nil {
// prevent buildJoin to populate From and To variable.
args = []interface{}{}
}
return JoinQuery{
Mode: expr,
Arguments: args,
}
}
// NewJoin with given table.
func NewJoin(table string) JoinQuery {
return NewJoinWith("JOIN", table, "", "")
}
// NewJoinOn table with given field.
func NewJoinOn(table string, from string, to string) JoinQuery {
return NewJoinWith("JOIN", table, from, to)
}
// NewInnerJoin with given table.
func NewInnerJoin(table string) JoinQuery {
return NewInnerJoinOn(table, "", "")
}
// NewInnerJoinOn table with given field.
func NewInnerJoinOn(table string, from string, to string) JoinQuery {
return NewJoinWith("INNER JOIN", table, from, to)
}
// NewLeftJoin with given table.
func NewLeftJoin(table string) JoinQuery {
return NewLeftJoinOn(table, "", "")
}
// NewLeftJoinOn table with given field.
func NewLeftJoinOn(table string, from string, to string) JoinQuery {
return NewJoinWith("LEFT JOIN", table, from, to)
}
// NewRightJoin with given table.
func NewRightJoin(table string) JoinQuery {
return NewRightJoinOn(table, "", "")
}
// NewRightJoinOn table with given field.
func NewRightJoinOn(table string, from string, to string) JoinQuery {
return NewJoinWith("RIGHT JOIN", table, from, to)
}
// NewFullJoin with given table.
func NewFullJoin(table string) JoinQuery {
return NewFullJoinOn(table, "", "")
}
// NewFullJoinOn table with given field.
func NewFullJoinOn(table string, from string, to string) JoinQuery {
return NewJoinWith("FULL JOIN", table, from, to)
}