Skip to content

Commit 25b45f7

Browse files
author
José Carlos
authored
Merge pull request #339 from upper/issue-338
Fix DISTINCT and provide examples for DISTINCT ON
2 parents 7cab69c + e217b36 commit 25b45f7

File tree

12 files changed

+672
-544
lines changed

12 files changed

+672
-544
lines changed

internal/sqladapter/exql/default.go

+88-85
Original file line numberDiff line numberDiff line change
@@ -25,47 +25,50 @@ const (
2525
defaultSortByColumnLayout = `{{.Column}} {{.Order}}`
2626

2727
defaultOrderByLayout = `
28-
{{if .SortColumns}}
29-
ORDER BY {{.SortColumns}}
30-
{{end}}
31-
`
28+
{{if .SortColumns}}
29+
ORDER BY {{.SortColumns}}
30+
{{end}}
31+
`
3232

3333
defaultWhereLayout = `
34-
{{if .Conds}}
35-
WHERE {{.Conds}}
36-
{{end}}
37-
`
34+
{{if .Conds}}
35+
WHERE {{.Conds}}
36+
{{end}}
37+
`
3838

3939
defaultUsingLayout = `
40-
{{if .Columns}}
41-
USING ({{.Columns}})
42-
{{end}}
43-
`
40+
{{if .Columns}}
41+
USING ({{.Columns}})
42+
{{end}}
43+
`
4444

4545
defaultJoinLayout = `
46-
{{if .Table}}
47-
{{ if .On }}
48-
{{.Type}} JOIN {{.Table}}
49-
{{.On}}
50-
{{ else if .Using }}
51-
{{.Type}} JOIN {{.Table}}
52-
{{.Using}}
53-
{{ else if .Type | eq "CROSS" }}
54-
{{.Type}} JOIN {{.Table}}
55-
{{else}}
56-
NATURAL {{.Type}} JOIN {{.Table}}
57-
{{end}}
58-
{{end}}
59-
`
46+
{{if .Table}}
47+
{{ if .On }}
48+
{{.Type}} JOIN {{.Table}}
49+
{{.On}}
50+
{{ else if .Using }}
51+
{{.Type}} JOIN {{.Table}}
52+
{{.Using}}
53+
{{ else if .Type | eq "CROSS" }}
54+
{{.Type}} JOIN {{.Table}}
55+
{{else}}
56+
NATURAL {{.Type}} JOIN {{.Table}}
57+
{{end}}
58+
{{end}}
59+
`
6060

6161
defaultOnLayout = `
62-
{{if .Conds}}
63-
ON {{.Conds}}
64-
{{end}}
65-
`
62+
{{if .Conds}}
63+
ON {{.Conds}}
64+
{{end}}
65+
`
6666

6767
defaultSelectLayout = `
6868
SELECT
69+
{{if .Distinct}}
70+
DISTINCT
71+
{{end}}
6972
7073
{{if .Columns}}
7174
{{.Columns}}
@@ -92,7 +95,7 @@ const (
9295
{{if .Offset}}
9396
OFFSET {{.Offset}}
9497
{{end}}
95-
`
98+
`
9699
defaultDeleteLayout = `
97100
DELETE
98101
FROM {{.Table}}
@@ -103,92 +106,92 @@ const (
103106
{{if .Offset}}
104107
OFFSET {{.Offset}}
105108
{{end}}
106-
`
109+
`
107110
defaultUpdateLayout = `
108-
UPDATE
109-
{{.Table}}
110-
SET {{.ColumnValues}}
111-
{{ .Where }}
112-
`
111+
UPDATE
112+
{{.Table}}
113+
SET {{.ColumnValues}}
114+
{{ .Where }}
115+
`
113116

114117
defaultCountLayout = `
115-
SELECT
116-
COUNT(1) AS _t
117-
FROM {{.Table}}
118-
{{.Where}}
118+
SELECT
119+
COUNT(1) AS _t
120+
FROM {{.Table}}
121+
{{.Where}}
119122
120-
{{if .Limit}}
121-
LIMIT {{.Limit}}
122-
{{end}}
123+
{{if .Limit}}
124+
LIMIT {{.Limit}}
125+
{{end}}
123126
124-
{{if .Offset}}
125-
OFFSET {{.Offset}}
126-
{{end}}
127-
`
127+
{{if .Offset}}
128+
OFFSET {{.Offset}}
129+
{{end}}
130+
`
128131

129132
defaultInsertLayout = `
130133
INSERT INTO {{.Table}}
131134
{{if .Columns }}({{.Columns}}){{end}}
132135
VALUES
133136
{{.Values}}
134-
{{if .Returning}}
135-
RETURNING {{.Returning}}
136-
{{end}}
137-
`
137+
{{if .Returning}}
138+
RETURNING {{.Returning}}
139+
{{end}}
140+
`
138141

139142
defaultTruncateLayout = `
140-
TRUNCATE TABLE {{.Table}}
141-
`
143+
TRUNCATE TABLE {{.Table}}
144+
`
142145

143146
defaultDropDatabaseLayout = `
144-
DROP DATABASE {{.Database}}
145-
`
147+
DROP DATABASE {{.Database}}
148+
`
146149

147150
defaultDropTableLayout = `
148-
DROP TABLE {{.Table}}
149-
`
151+
DROP TABLE {{.Table}}
152+
`
150153

151154
defaultGroupByColumnLayout = `{{.Column}}`
152155

153156
defaultGroupByLayout = `
154-
{{if .GroupColumns}}
155-
GROUP BY {{.GroupColumns}}
156-
{{end}}
157-
`
157+
{{if .GroupColumns}}
158+
GROUP BY {{.GroupColumns}}
159+
{{end}}
160+
`
158161
)
159162

160163
var defaultTemplate = &Template{
161-
ColumnSeparator: defaultColumnSeparator,
162-
IdentifierSeparator: defaultIdentifierSeparator,
163-
IdentifierQuote: defaultIdentifierQuote,
164-
ValueSeparator: defaultValueSeparator,
165-
ValueQuote: defaultValueQuote,
166164
AndKeyword: defaultAndKeyword,
167-
OrKeyword: defaultOrKeyword,
168-
NotKeyword: defaultNotKeyword,
169-
DescKeyword: defaultDescKeyword,
170165
AscKeyword: defaultAscKeyword,
171-
DefaultOperator: defaultDefaultOperator,
172166
AssignmentOperator: defaultAssignmentOperator,
173167
ClauseGroup: defaultClauseGroup,
174168
ClauseOperator: defaultClauseOperator,
175-
ColumnValue: defaultColumnValue,
176-
TableAliasLayout: defaultTableAliasLayout,
177169
ColumnAliasLayout: defaultColumnAliasLayout,
178-
SortByColumnLayout: defaultSortByColumnLayout,
179-
WhereLayout: defaultWhereLayout,
180-
OnLayout: defaultOnLayout,
181-
UsingLayout: defaultUsingLayout,
182-
JoinLayout: defaultJoinLayout,
183-
OrderByLayout: defaultOrderByLayout,
184-
InsertLayout: defaultInsertLayout,
185-
SelectLayout: defaultSelectLayout,
186-
UpdateLayout: defaultUpdateLayout,
170+
ColumnSeparator: defaultColumnSeparator,
171+
ColumnValue: defaultColumnValue,
172+
CountLayout: defaultCountLayout,
187173
DeleteLayout: defaultDeleteLayout,
188-
TruncateLayout: defaultTruncateLayout,
174+
DescKeyword: defaultDescKeyword,
189175
DropDatabaseLayout: defaultDropDatabaseLayout,
190176
DropTableLayout: defaultDropTableLayout,
191-
CountLayout: defaultCountLayout,
192177
GroupByLayout: defaultGroupByLayout,
193-
Cache: cache.NewCache(),
178+
IdentifierQuote: defaultIdentifierQuote,
179+
IdentifierSeparator: defaultIdentifierSeparator,
180+
InsertLayout: defaultInsertLayout,
181+
JoinLayout: defaultJoinLayout,
182+
NotKeyword: defaultNotKeyword,
183+
OnLayout: defaultOnLayout,
184+
OrKeyword: defaultOrKeyword,
185+
OrderByLayout: defaultOrderByLayout,
186+
SelectLayout: defaultSelectLayout,
187+
SortByColumnLayout: defaultSortByColumnLayout,
188+
TableAliasLayout: defaultTableAliasLayout,
189+
TruncateLayout: defaultTruncateLayout,
190+
UpdateLayout: defaultUpdateLayout,
191+
UsingLayout: defaultUsingLayout,
192+
ValueQuote: defaultValueQuote,
193+
ValueSeparator: defaultValueSeparator,
194+
WhereLayout: defaultWhereLayout,
195+
196+
Cache: cache.NewCache(),
194197
}

internal/sqladapter/exql/statement.go

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type Statement struct {
1717
ColumnValues Fragment
1818
OrderBy Fragment
1919
GroupBy Fragment
20+
Distinct bool
2021
Joins Fragment
2122
Where Fragment
2223
Returning Fragment
@@ -38,6 +39,7 @@ type statementT struct {
3839
ColumnValues string
3940
OrderBy string
4041
GroupBy string
42+
Distinct bool
4143
Where string
4244
Joins string
4345
Returning string
@@ -89,6 +91,7 @@ func (s *Statement) Compile(layout *Template) (compiled string) {
8991
data := statementT{
9092
Table: layout.doCompile(s.Table),
9193
Database: layout.doCompile(s.Database),
94+
Distinct: s.Distinct,
9295
Limit: s.Limit,
9396
Offset: s.Offset,
9497
Columns: layout.doCompile(s.Columns),

internal/sqladapter/exql/template.go

+23-22
Original file line numberDiff line numberDiff line change
@@ -38,38 +38,39 @@ var (
3838

3939
// Template is an SQL template.
4040
type Template struct {
41-
ColumnSeparator string
42-
IdentifierSeparator string
43-
IdentifierQuote string
44-
ValueSeparator string
45-
ValueQuote string
4641
AndKeyword string
47-
OrKeyword string
48-
NotKeyword string
49-
DescKeyword string
5042
AscKeyword string
51-
DefaultOperator string
5243
AssignmentOperator string
5344
ClauseGroup string
5445
ClauseOperator string
55-
ColumnValue string
56-
TableAliasLayout string
5746
ColumnAliasLayout string
58-
SortByColumnLayout string
59-
WhereLayout string
60-
OnLayout string
61-
UsingLayout string
62-
JoinLayout string
63-
OrderByLayout string
64-
InsertLayout string
65-
SelectLayout string
66-
UpdateLayout string
47+
ColumnSeparator string
48+
ColumnValue string
49+
CountLayout string
50+
DefaultOperator string
6751
DeleteLayout string
68-
TruncateLayout string
52+
DescKeyword string
6953
DropDatabaseLayout string
7054
DropTableLayout string
71-
CountLayout string
7255
GroupByLayout string
56+
IdentifierQuote string
57+
IdentifierSeparator string
58+
InsertLayout string
59+
JoinLayout string
60+
NotKeyword string
61+
OnLayout string
62+
OrKeyword string
63+
OrderByLayout string
64+
SelectLayout string
65+
SortByColumnLayout string
66+
TableAliasLayout string
67+
TruncateLayout string
68+
UpdateLayout string
69+
UsingLayout string
70+
ValueQuote string
71+
ValueSeparator string
72+
WhereLayout string
73+
7374
*cache.Cache
7475
}
7576

0 commit comments

Comments
 (0)