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.SelectDSL;
25 import org.mybatis.dynamic.sql.select.SelectModel;
26 import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
27
28 class Issue100StartAfterJoinTest {
29
30 @Test
31 void testSuccessiveBuild02() {
32 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
33 .from(StudentDynamicSqlSupport.student)
34 .join(StudentRegDynamicSqlSupport.studentReg)
35 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
36
37 builder.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"));
38
39 SelectStatementProvider selectStatement = builder.build()
40 .render(RenderingStrategies.MYBATIS3);
41
42 String expected = "select student.id, student.name, student.idcard"
43 + " from student join student_reg on student.id = student_reg.studentId"
44 + " where student.idcard = #{parameters.p1}";
45 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
46 }
47
48 @Test
49 void testSuccessiveBuild03() {
50 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
51 .from(StudentDynamicSqlSupport.student)
52 .join(StudentRegDynamicSqlSupport.studentReg)
53 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
54
55 SelectDSL<SelectModel> selectModel = builder.orderBy(StudentDynamicSqlSupport.id);
56
57 SelectStatementProvider selectStatement = builder.build()
58 .render(RenderingStrategies.MYBATIS3);
59
60 String expected = "select student.id, student.name, student.idcard"
61 + " from student join student_reg on student.id = student_reg.studentId"
62 + " order by id";
63 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
64
65 selectStatement = selectModel.build().render(RenderingStrategies.MYBATIS3);
66 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
67 }
68
69 @Test
70 void testSuccessiveBuild04() {
71 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
72 .from(StudentDynamicSqlSupport.student)
73 .join(StudentRegDynamicSqlSupport.studentReg)
74 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
75
76 builder.limit(3);
77
78 SelectStatementProvider selectStatement = builder.build()
79 .render(RenderingStrategies.MYBATIS3);
80
81 String expected = "select student.id, student.name, student.idcard"
82 + " from student join student_reg on student.id = student_reg.studentId"
83 + " limit #{parameters.p1}";
84 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
85 }
86
87 @Test
88 void testSuccessiveBuild05() {
89 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
90 .from(StudentDynamicSqlSupport.student)
91 .join(StudentRegDynamicSqlSupport.studentReg)
92 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
93
94 builder.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
95 .orderBy(StudentDynamicSqlSupport.id)
96 .limit(3)
97 .offset(2);
98
99 SelectStatementProvider selectStatement = builder.build()
100 .render(RenderingStrategies.MYBATIS3);
101
102 String expected = "select student.id, student.name, student.idcard"
103 + " from student join student_reg on student.id = student_reg.studentId"
104 + " where student.idcard = #{parameters.p1}"
105 + " order by id"
106 + " limit #{parameters.p2}"
107 + " offset #{parameters.p3}";
108 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
109 }
110
111 @Test
112 void testSuccessiveBuild06() {
113 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
114 .from(StudentDynamicSqlSupport.student)
115 .join(StudentRegDynamicSqlSupport.studentReg)
116 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
117
118 builder.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
119 .orderBy(StudentDynamicSqlSupport.id)
120 .offset(2);
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 + " offset #{parameters.p2} rows";
130 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
131 }
132
133 @Test
134 void testSuccessiveBuild07() {
135 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
136 .from(StudentDynamicSqlSupport.student)
137 .join(StudentRegDynamicSqlSupport.studentReg)
138 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
139
140 builder.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
141 .orderBy(StudentDynamicSqlSupport.id)
142 .offset(2)
143 .fetchFirst(3).rowsOnly();
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 + " offset #{parameters.p2} rows"
153 + " fetch first #{parameters.p3} rows only";
154 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
155 }
156
157 @Test
158 void testSuccessiveBuild08() {
159 QueryExpressionDSL<SelectModel>.JoinSpecificationFinisher builder = select(StudentDynamicSqlSupport.id, StudentDynamicSqlSupport.name, StudentDynamicSqlSupport.idcard)
160 .from(StudentDynamicSqlSupport.student)
161 .join(StudentRegDynamicSqlSupport.studentReg)
162 .on(StudentDynamicSqlSupport.id, isEqualTo(StudentRegDynamicSqlSupport.studentid));
163
164 builder.where(StudentDynamicSqlSupport.idcard, isEqualTo("fred"))
165 .orderBy(StudentDynamicSqlSupport.id)
166 .fetchFirst(3).rowsOnly();
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 + " fetch first #{parameters.p2} rows only";
176 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
177 }
178 }