View Javadoc
1   /*
2    *    Copyright 2016-2025 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    *       https://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.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 }