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.*;
20
21 import org.junit.jupiter.api.Test;
22 import org.mybatis.dynamic.sql.render.RenderingStrategies;
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 class Issue100Test {
28
29 @Test
30 void testNormalUsage() {
31 SelectStatementProvider selectStatement = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
32 .from(StudentDynamicSqlSupport.student)
33 .join(StudentRegDynamicSqlSupport.studentReg)
34 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
35 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
36 .union()
37 .select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
38 .from(StudentDynamicSqlSupport.student)
39 .orderBy(StudentDynamicSqlSupport.id)
40 .limit(3)
41 .offset(2)
42 .build()
43 .render(RenderingStrategies.MYBATIS3);
44
45 String expected = "select student.id, student.name, student.idcard"
46 + " from student join student_reg on student.id = student_reg.studentId"
47 + " where student.idcard = #{parameters.p1}"
48 + " union"
49 + " select id, name, idcard"
50 + " from student"
51 + " order by id"
52 + " limit #{parameters.p2}"
53 + " offset #{parameters.p3}";
54 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
55 }
56
57 @Test
58 void testSuccessiveBuild01() {
59 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
60 .from(StudentDynamicSqlSupport.student);
61
62 builder.join(StudentRegDynamicSqlSupport.studentReg)
63 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
64
65 SelectStatementProvider selectStatement = builder.build()
66 .render(RenderingStrategies.MYBATIS3);
67
68 String expected = "select student.id, student.name, student.idcard"
69 + " from student join student_reg on student.id = student_reg.studentId";
70 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
71 }
72
73 @Test
74 void testSuccessiveBuild02() {
75 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
76 .from(StudentDynamicSqlSupport.student);
77
78 builder.join(StudentRegDynamicSqlSupport.studentReg)
79 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
80 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"));
81
82 SelectStatementProvider selectStatement = builder.build()
83 .render(RenderingStrategies.MYBATIS3);
84
85 String expected = "select student.id, student.name, student.idcard"
86 + " from student join student_reg on student.id = student_reg.studentId"
87 + " where student.idcard = #{parameters.p1}";
88 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
89 }
90
91 @Test
92 void testSuccessiveBuild03() {
93 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
94 .from(StudentDynamicSqlSupport.student);
95
96 builder.join(StudentRegDynamicSqlSupport.studentReg)
97 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
98 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
99 .orderBy(StudentDynamicSqlSupport.id);
100
101 SelectStatementProvider selectStatement = builder.build()
102 .render(RenderingStrategies.MYBATIS3);
103
104 String expected = "select student.id, student.name, student.idcard"
105 + " from student join student_reg on student.id = student_reg.studentId"
106 + " where student.idcard = #{parameters.p1}"
107 + " order by id";
108 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
109 }
110
111 @Test
112 void testSuccessiveBuild04() {
113 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
114 .from(StudentDynamicSqlSupport.student);
115
116 builder.join(StudentRegDynamicSqlSupport.studentReg)
117 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
118 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
119 .orderBy(StudentDynamicSqlSupport.id)
120 .limit(3);
121
122 SelectStatementProvider selectStatement = builder.build()
123 .render(RenderingStrategies.MYBATIS3);
124
125 String expected = "select student.id, student.name, student.idcard"
126 + " from student join student_reg on student.id = student_reg.studentId"
127 + " where student.idcard = #{parameters.p1}"
128 + " order by id"
129 + " limit #{parameters.p2}";
130 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
131 }
132
133 @Test
134 void testSuccessiveBuild05() {
135 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
136 .from(StudentDynamicSqlSupport.student);
137
138 builder.join(StudentRegDynamicSqlSupport.studentReg)
139 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
140 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
141 .orderBy(StudentDynamicSqlSupport.id)
142 .limit(3)
143 .offset(2);
144
145 SelectStatementProvider selectStatement = builder.build()
146 .render(RenderingStrategies.MYBATIS3);
147
148 String expected = "select student.id, student.name, student.idcard"
149 + " from student join student_reg on student.id = student_reg.studentId"
150 + " where student.idcard = #{parameters.p1}"
151 + " order by id"
152 + " limit #{parameters.p2}"
153 + " offset #{parameters.p3}";
154 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
155 }
156
157 @Test
158 void testSuccessiveBuild06() {
159 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
160 .from(StudentDynamicSqlSupport.student);
161
162 builder.join(StudentRegDynamicSqlSupport.studentReg)
163 .on(StudentDynamicSqlSupport.id, equalTo(StudentRegDynamicSqlSupport.studentid))
164 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
165 .orderBy(StudentDynamicSqlSupport.id)
166 .offset(2);
167
168 SelectStatementProvider selectStatement = builder.build()
169 .render(RenderingStrategies.MYBATIS3);
170
171 String expected = "select student.id, student.name, student.idcard"
172 + " from student join student_reg on student.id = student_reg.studentId"
173 + " where student.idcard = #{parameters.p1}"
174 + " order by id"
175 + " offset #{parameters.p2} rows";
176 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
177 }
178
179 @Test
180 void testSuccessiveBuild07() {
181 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
182 .from(StudentDynamicSqlSupport.student);
183
184 builder.join(StudentRegDynamicSqlSupport.studentReg)
185 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
186 .where(StudentDynamicSqlSupport.idcard, equalTo("fred"))
187 .orderBy(StudentDynamicSqlSupport.id)
188 .offset(2)
189 .fetchFirst(3).rowsOnly();
190
191 SelectStatementProvider selectStatement = builder.build()
192 .render(RenderingStrategies.MYBATIS3);
193
194 String expected = "select student.id, student.name, student.idcard"
195 + " from student join student_reg on student.id = student_reg.studentId"
196 + " where student.idcard = #{parameters.p1}"
197 + " order by id"
198 + " offset #{parameters.p2} rows"
199 + " fetch first #{parameters.p3} rows only";
200 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
201 }
202
203 @Test
204 void testSuccessiveBuild08() {
205 QueryExpressionDSL<SelectModel> builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
206 .from(StudentDynamicSqlSupport.student);
207
208 builder.join(StudentRegDynamicSqlSupport.studentReg)
209 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid))
210 .where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
211 .orderBy(StudentDynamicSqlSupport.id)
212 .fetchFirst(3).rowsOnly();
213
214 SelectStatementProvider selectStatement = builder.build()
215 .render(RenderingStrategies.MYBATIS3);
216
217 String expected = "select student.id, student.name, student.idcard"
218 + " from student join student_reg on student.id = student_reg.studentId"
219 + " where student.idcard = #{parameters.p1}"
220 + " order by id"
221 + " fetch first #{parameters.p2} rows only";
222 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
223 }
224
225 @Test
226 void test3() {
227 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher on = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
228 .from(StudentDynamicSqlSupport.student)
229 .join(StudentRegDynamicSqlSupport.studentReg)
230 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
231
232 on.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"));
233
234 SelectStatementProvider selectStatement = on
235 .build()
236 .render(RenderingStrategies.MYBATIS3);
237
238 assertThat(selectStatement.getSelectStatement())
239 .isEqualTo("select student.id, student.name, student.idcard from student join student_reg on student.id = student_reg.studentId where student.idcard = #{parameters.p1}");
240 }
241 }