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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy