1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package issues.gh100;
17
18 import static org.assertj.core.api.Assertions.assertThat;
19 import static org.mybatis.dynamic.sql.SqlBuilder.count;
20 import static org.mybatis.dynamic.sql.SqlBuilder.select;
21
22 import org.junit.jupiter.api.Test;
23 import org.mybatis.dynamic.sql.render.RenderingStrategies;
24 import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
25 import org.mybatis.dynamic.sql.select.SelectDSL;
26 import org.mybatis.dynamic.sql.select.SelectModel;
27 import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
28
29 class FromGroupByTest {
30
31 @Test
32 void testFromGroupByB1() {
33 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
34 .from(StudentDynamicSqlSupport.student);
35
36 builder1.groupBy(StudentDynamicSqlSupport.name);
37
38 String expected = "select name, count(*)"
39 + " from student"
40 + " group by name";
41
42 SelectStatementProvider selectStatement = builder1.build().render(RenderingStrategies.MYBATIS3);
43
44 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
45 }
46
47 @Test
48 void testFromGroupByB2() {
49 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
50 .from(StudentDynamicSqlSupport.student);
51
52 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
53
54 String expected = "select name, count(*)"
55 + " from student"
56 + " group by name";
57
58 SelectStatementProvider selectStatement = builder2.build().render(RenderingStrategies.MYBATIS3);
59
60 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
61 }
62
63 @Test
64 void testFromGroupByLimitB1() {
65 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
66 .from(StudentDynamicSqlSupport.student);
67
68 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
69
70 builder2.limit(3);
71
72 String expected = "select name, count(*)"
73 + " from student"
74 + " group by name"
75 + " limit #{parameters.p1}";
76
77 SelectStatementProvider selectStatement = builder1.build().render(RenderingStrategies.MYBATIS3);
78
79 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
80 }
81
82 @Test
83 void testFromGroupByLimitB2() {
84 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
85 .from(StudentDynamicSqlSupport.student);
86
87 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
88
89 builder2.limit(3);
90
91 String expected = "select name, count(*)"
92 + " from student"
93 + " group by name"
94 + " limit #{parameters.p1}";
95
96 SelectStatementProvider selectStatement = builder2.build().render(RenderingStrategies.MYBATIS3);
97
98 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
99 }
100
101 @Test
102 void testFromGroupByLimitB3() {
103 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
104 .from(StudentDynamicSqlSupport.student);
105
106 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
107
108 var builder3 = builder2.limit(3);
109
110 String expected = "select name, count(*)"
111 + " from student"
112 + " group by name"
113 + " limit #{parameters.p1}";
114
115 SelectStatementProvider selectStatement = builder3.build().render(RenderingStrategies.MYBATIS3);
116
117 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
118 }
119
120 @Test
121 void testFromGroupByOffsetB1() {
122 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
123 .from(StudentDynamicSqlSupport.student);
124
125 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
126
127 builder2.offset(3);
128
129 String expected = "select name, count(*)"
130 + " from student"
131 + " group by name"
132 + " offset #{parameters.p1} rows";
133
134 SelectStatementProvider selectStatement = builder1.build().render(RenderingStrategies.MYBATIS3);
135
136 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
137 }
138
139 @Test
140 void testFromGroupByOffsetB2() {
141 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
142 .from(StudentDynamicSqlSupport.student);
143
144 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
145
146 builder2.offset(3);
147
148 String expected = "select name, count(*)"
149 + " from student"
150 + " group by name"
151 + " offset #{parameters.p1} rows";
152
153 SelectStatementProvider selectStatement = builder2.build().render(RenderingStrategies.MYBATIS3);
154
155 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
156 }
157
158 @Test
159 void testFromGroupByOffsetB3() {
160 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
161 .from(StudentDynamicSqlSupport.student);
162
163 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
164
165 var builder3 = builder2.offset(3);
166
167 String expected = "select name, count(*)"
168 + " from student"
169 + " group by name"
170 + " offset #{parameters.p1} rows";
171
172 SelectStatementProvider selectStatement = builder3.build().render(RenderingStrategies.MYBATIS3);
173
174 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
175 }
176
177 @Test
178 void testFromGroupByFetchFirstB1() {
179 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
180 .from(StudentDynamicSqlSupport.student);
181
182 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
183
184 builder2.fetchFirst(2).rowsOnly();
185
186 String expected = "select name, count(*)"
187 + " from student"
188 + " group by name"
189 + " fetch first #{parameters.p1} rows only";
190
191 SelectStatementProvider selectStatement = builder1.build().render(RenderingStrategies.MYBATIS3);
192
193 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
194 }
195
196 @Test
197 void testFromGroupByFetchFirstB2() {
198 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
199 .from(StudentDynamicSqlSupport.student);
200
201 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
202
203 builder2.fetchFirst(2).rowsOnly();
204
205 String expected = "select name, count(*)"
206 + " from student"
207 + " group by name"
208 + " fetch first #{parameters.p1} rows only";
209
210 SelectStatementProvider selectStatement = builder2.build().render(RenderingStrategies.MYBATIS3);
211
212 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
213 }
214
215 @Test
216 void testFromGroupByFetchFirstB3() {
217 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
218 .from(StudentDynamicSqlSupport.student);
219
220 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
221
222 var builder3 = builder2.fetchFirst(2).rowsOnly();
223
224 String expected = "select name, count(*)"
225 + " from student"
226 + " group by name"
227 + " fetch first #{parameters.p1} rows only";
228
229 SelectStatementProvider selectStatement = builder3.build().render(RenderingStrategies.MYBATIS3);
230
231 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
232 }
233
234 @Test
235 void testFromGroupByOrderByB1() {
236 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
237 .from(StudentDynamicSqlSupport.student);
238
239 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
240
241 builder2.orderBy(StudentDynamicSqlSupport.name);
242
243 String expected = "select name, count(*)"
244 + " from student"
245 + " group by name"
246 + " order by name";
247
248 SelectStatementProvider selectStatement = builder1.build().render(RenderingStrategies.MYBATIS3);
249
250 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
251 }
252
253 @Test
254 void testFromGroupByOrderByB2() {
255 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
256 .from(StudentDynamicSqlSupport.student);
257
258 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
259
260 builder2.orderBy(StudentDynamicSqlSupport.name);
261
262 String expected = "select name, count(*)"
263 + " from student"
264 + " group by name"
265 + " order by name";
266
267 SelectStatementProvider selectStatement = builder2.build().render(RenderingStrategies.MYBATIS3);
268
269 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
270 }
271
272 @Test
273 void testFromGroupByOrderByB3() {
274 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
275 .from(StudentDynamicSqlSupport.student);
276
277 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
278
279 SelectDSL<SelectModel> builder3 = builder2.orderBy(StudentDynamicSqlSupport.name);
280
281 String expected = "select name, count(*)"
282 + " from student"
283 + " group by name"
284 + " order by name";
285
286 SelectStatementProvider selectStatement = builder3.build().render(RenderingStrategies.MYBATIS3);
287
288 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
289 }
290
291 @Test
292 void testFromGroupByOrderByOffsetB1() {
293 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
294 .from(StudentDynamicSqlSupport.student);
295
296 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
297
298 SelectDSL<SelectModel> builder3 = builder2.orderBy(StudentDynamicSqlSupport.name);
299
300 builder3.offset(2);
301
302 String expected = "select name, count(*)"
303 + " from student"
304 + " group by name"
305 + " order by name"
306 + " offset #{parameters.p1} rows";
307
308 SelectStatementProvider selectStatement = builder1.build().render(RenderingStrategies.MYBATIS3);
309
310 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
311 }
312
313 @Test
314 void testFromGroupByOrderByOffsetB2() {
315 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
316 .from(StudentDynamicSqlSupport.student);
317
318 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
319
320 SelectDSL<SelectModel> builder3 = builder2.orderBy(StudentDynamicSqlSupport.name);
321
322 builder3.offset(2);
323
324 String expected = "select name, count(*)"
325 + " from student"
326 + " group by name"
327 + " order by name"
328 + " offset #{parameters.p1} rows";
329
330 SelectStatementProvider selectStatement = builder2.build().render(RenderingStrategies.MYBATIS3);
331
332 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
333 }
334
335 @Test
336 void testFromGroupByOrderByOffsetB3() {
337 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
338 .from(StudentDynamicSqlSupport.student);
339
340 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
341
342 SelectDSL<SelectModel> builder3 = builder2.orderBy(StudentDynamicSqlSupport.name);
343
344 builder3.offset(2);
345
346 String expected = "select name, count(*)"
347 + " from student"
348 + " group by name"
349 + " order by name"
350 + " offset #{parameters.p1} rows";
351
352 SelectStatementProvider selectStatement = builder3.build().render(RenderingStrategies.MYBATIS3);
353
354 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
355 }
356
357 @Test
358 void testFromGroupByOrderByOffsetB4() {
359 QueryExpressionDSL<SelectModel> builder1 = select(StudentDynamicSqlSupport.name, count())
360 .from(StudentDynamicSqlSupport.student);
361
362 QueryExpressionDSL<SelectModel>.GroupByFinisher builder2 = builder1.groupBy(StudentDynamicSqlSupport.name);
363
364 SelectDSL<SelectModel> builder3 = builder2.orderBy(StudentDynamicSqlSupport.name);
365
366 var builder4 = builder3.offset(2);
367
368 String expected = "select name, count(*)"
369 + " from student"
370 + " group by name"
371 + " order by name"
372 + " offset #{parameters.p1} rows";
373
374 SelectStatementProvider selectStatement = builder4.build().render(RenderingStrategies.MYBATIS3);
375
376 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
377 }
378 }