Skip to content

Commit a907072

Browse files
committed
Failing tests for issues 100 and 102
1 parent d548fbc commit a907072

File tree

6 files changed

+1356
-0
lines changed

6 files changed

+1356
-0
lines changed

src/test/java/issues/gh100/FromJoinWhereTest.java

Lines changed: 739 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
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.SelectModel;
25+
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
26+
27+
/**
28+
* This set of tests is related to issues raised in https://github.com/mybatis/mybatis-dynamic-sql/issues/100 and
29+
* https://github.com/mybatis/mybatis-dynamic-sql/issues/102.
30+
*
31+
* The basic idea is that we want to enable the user to call the build() method from any object along the
32+
* DSL chain and have predictable results.
33+
*
34+
* So this set of test cases tests calling the build() method at various points along the chain.
35+
*
36+
* @author Jeff Butler
37+
*
38+
*/
39+
public class Issue100Test {
40+
41+
@Test
42+
public void testNormalUsage() {
43+
SelectStatementProvider selectStatement = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
44+
.from(StudentDynamicSqlSupport.student)
45+
.join(StudentRegDynamicSqlSupport.studentReg)
46+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
47+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
48+
.union()
49+
.select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
50+
.from(StudentDynamicSqlSupport.student)
51+
.orderBy(StudentDynamicSqlSupport.id)
52+
.limit(3)
53+
.offset(2)
54+
.build()
55+
.render(RenderingStrategy.MYBATIS3);
56+
57+
String expected = "select student.id, student.name, student.idcard"
58+
+ " from student join student_reg on student.id = student_reg.studentId"
59+
+ " where student.idcard = #{parameters.p1}"
60+
+ " union"
61+
+ " select id, name, idcard"
62+
+ " from student"
63+
+ " order by id"
64+
+ " limit #{parameters._limit}"
65+
+ " offset #{parameters._offset}";
66+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
67+
}
68+
69+
@Test
70+
public void testSuccessiveBuild01() {
71+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
72+
.from(StudentDynamicSqlSupport.student);
73+
74+
builder.join(StudentRegDynamicSqlSupport.studentReg)
75+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid));
76+
77+
SelectStatementProvider selectStatement = builder.build()
78+
.render(RenderingStrategy.MYBATIS3);
79+
80+
String expected = "select student.id, student.name, student.idcard"
81+
+ " from student join student_reg on student.id = student_reg.studentId";
82+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
83+
}
84+
85+
@Test
86+
public void testSuccessiveBuild02() {
87+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
88+
.from(StudentDynamicSqlSupport.student);
89+
90+
builder.join(StudentRegDynamicSqlSupport.studentReg)
91+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
92+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"));
93+
94+
SelectStatementProvider selectStatement = builder.build()
95+
.render(RenderingStrategy.MYBATIS3);
96+
97+
String expected = "select student.id, student.name, student.idcard"
98+
+ " from student join student_reg on student.id = student_reg.studentId"
99+
+ " where student.idcard = #{parameters.p1}";
100+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
101+
}
102+
103+
@Test
104+
public void testSuccessiveBuild03() {
105+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
106+
.from(StudentDynamicSqlSupport.student);
107+
108+
builder.join(StudentRegDynamicSqlSupport.studentReg)
109+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
110+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
111+
.orderBy(StudentDynamicSqlSupport.id);
112+
113+
SelectStatementProvider selectStatement = builder.build()
114+
.render(RenderingStrategy.MYBATIS3);
115+
116+
String expected = "select student.id, student.name, student.idcard"
117+
+ " from student join student_reg on student.id = student_reg.studentId"
118+
+ " where student.idcard = #{parameters.p1}"
119+
+ " order by id";
120+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
121+
}
122+
123+
@Test
124+
public void testSuccessiveBuild04() {
125+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
126+
.from(StudentDynamicSqlSupport.student);
127+
128+
builder.join(StudentRegDynamicSqlSupport.studentReg)
129+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
130+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
131+
.orderBy(StudentDynamicSqlSupport.id)
132+
.limit(3);
133+
134+
SelectStatementProvider selectStatement = builder.build()
135+
.render(RenderingStrategy.MYBATIS3);
136+
137+
String expected = "select student.id, student.name, student.idcard"
138+
+ " from student join student_reg on student.id = student_reg.studentId"
139+
+ " where student.idcard = #{parameters.p1}"
140+
+ " order by id"
141+
+ " limit #{parameters._limit}";
142+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
143+
}
144+
145+
@Test
146+
public void testSuccessiveBuild05() {
147+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
148+
.from(StudentDynamicSqlSupport.student);
149+
150+
builder.join(StudentRegDynamicSqlSupport.studentReg)
151+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
152+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
153+
.orderBy(StudentDynamicSqlSupport.id)
154+
.limit(3)
155+
.offset(2);
156+
157+
SelectStatementProvider selectStatement = builder.build()
158+
.render(RenderingStrategy.MYBATIS3);
159+
160+
String expected = "select student.id, student.name, student.idcard"
161+
+ " from student join student_reg on student.id = student_reg.studentId"
162+
+ " where student.idcard = #{parameters.p1}"
163+
+ " order by id"
164+
+ " limit #{parameters._limit}"
165+
+ " offset #{parameters._offset}";
166+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
167+
}
168+
169+
@Test
170+
public void testSuccessiveBuild06() {
171+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
172+
.from(StudentDynamicSqlSupport.student);
173+
174+
builder.join(StudentRegDynamicSqlSupport.studentReg)
175+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
176+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
177+
.orderBy(StudentDynamicSqlSupport.id)
178+
.offset(2);
179+
180+
SelectStatementProvider selectStatement = builder.build()
181+
.render(RenderingStrategy.MYBATIS3);
182+
183+
String expected = "select student.id, student.name, student.idcard"
184+
+ " from student join student_reg on student.id = student_reg.studentId"
185+
+ " where student.idcard = #{parameters.p1}"
186+
+ " order by id"
187+
+ " offset #{parameters._offset} rows";
188+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
189+
}
190+
191+
@Test
192+
public void testSuccessiveBuild07() {
193+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
194+
.from(StudentDynamicSqlSupport.student);
195+
196+
builder.join(StudentRegDynamicSqlSupport.studentReg)
197+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
198+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
199+
.orderBy(StudentDynamicSqlSupport.id)
200+
.offset(2)
201+
.fetchFirst(3).rowsOnly();
202+
203+
SelectStatementProvider selectStatement = builder.build()
204+
.render(RenderingStrategy.MYBATIS3);
205+
206+
String expected = "select student.id, student.name, student.idcard"
207+
+ " from student join student_reg on student.id = student_reg.studentId"
208+
+ " where student.idcard = #{parameters.p1}"
209+
+ " order by id"
210+
+ " offset #{parameters._offset} rows"
211+
+ " fetch first #{parameters._fetchFirstRows} rows only";
212+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
213+
}
214+
215+
@Test
216+
public void testSuccessiveBuild08() {
217+
QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
218+
.from(StudentDynamicSqlSupport.student);
219+
220+
builder.join(StudentRegDynamicSqlSupport.studentReg)
221+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
222+
.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
223+
.orderBy(StudentDynamicSqlSupport.id)
224+
.fetchFirst(3).rowsOnly();
225+
226+
SelectStatementProvider selectStatement = builder.build()
227+
.render(RenderingStrategy.MYBATIS3);
228+
229+
String expected = "select student.id, student.name, student.idcard"
230+
+ " from student join student_reg on student.id = student_reg.studentId"
231+
+ " where student.idcard = #{parameters.p1}"
232+
+ " order by id"
233+
+ " fetch first #{parameters._fetchFirstRows} rows only";
234+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
235+
}
236+
237+
@Test
238+
public void test3() {
239+
QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher on = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
240+
.from(StudentDynamicSqlSupport.student)
241+
.join(StudentRegDynamicSqlSupport.studentReg)
242+
.on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid));
243+
244+
on.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"));
245+
246+
SelectStatementProvider selectStatement = on
247+
.build()
248+
.render(RenderingStrategy.MYBATIS3);
249+
250+
assertThat(selectStatement.getSelectStatement())
251+
.isEqualTo("select student.id, student.name, student.idcard from student join student_reg on student.id = student_reg.studentId where student.idcard = #{parameters.p1}");
252+
}
253+
}

0 commit comments

Comments
 (0)