Skip to content

Commit b1ce938

Browse files
committed
More tests and a couple of missed spots
1 parent e3c982e commit b1ce938

File tree

6 files changed

+3409
-164
lines changed

6 files changed

+3409
-164
lines changed

src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,14 @@ public GroupByFinisher groupBy(BasicColumn...columns) {
300300
}
301301

302302
public SelectDSL<R>.LimitFinisher limit(long limit) {
303+
buildDelegateMethod = selectDSL::build;
303304
whereModel = buildWhereModel();
304305
selectDSL.addQueryExpression(buildModel());
305306
return selectDSL.limit(limit);
306307
}
307308

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

0 commit comments

Comments
 (0)