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 examples.animal.data;
17  
18  import static examples.animal.data.AnimalDataDynamicSqlSupport.animalData;
19  import static examples.animal.data.AnimalDataDynamicSqlSupport.id;
20  import static org.assertj.core.api.Assertions.assertThat;
21  import static org.mybatis.dynamic.sql.SqlBuilder.deleteFrom;
22  import static org.mybatis.dynamic.sql.SqlBuilder.isLessThan;
23  import static org.mybatis.dynamic.sql.SqlBuilder.select;
24  import static org.mybatis.dynamic.sql.SqlBuilder.update;
25  
26  import org.junit.jupiter.api.Test;
27  import org.mybatis.dynamic.sql.render.RenderingStrategies;
28  
29  class VariousPagingAndLimitScenariosTest {
30  
31      @Test
32      void testOptionalLimitOnDelete() {
33          var deleteStatement = deleteFrom(animalData)
34                  .limitWhenPresent(null)
35                  .build()
36                  .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
37  
38          assertThat(deleteStatement.getDeleteStatement()).isEqualTo("delete from AnimalData");
39      }
40  
41      @Test
42      void testOptionalLimitOnDeleteWithWhere() {
43          var deleteStatement = deleteFrom(animalData)
44                  .where(id, isLessThan(22))
45                  .limitWhenPresent(null)
46                  .build()
47                  .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
48  
49          assertThat(deleteStatement.getDeleteStatement())
50                  .isEqualTo("delete from AnimalData where id < :p1");
51      }
52  
53      @Test
54      void testOptionalLimitOnUpdate() {
55          var updateStatement = update(animalData)
56                  .set(id).equalTo(1)
57                  .limitWhenPresent(null)
58                  .build()
59                  .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
60  
61          assertThat(updateStatement.getUpdateStatement()).isEqualTo("update AnimalData set id = :p1");
62      }
63  
64      @Test
65      void testOptionalLimitOnUpdateWithWhere() {
66          var updateStatement = update(animalData)
67                  .set(id).equalTo(1)
68                  .where(id, isLessThan(22))
69                  .limitWhenPresent(null)
70                  .build()
71                  .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
72  
73          assertThat(updateStatement.getUpdateStatement()).isEqualTo("update AnimalData set id = :p1 where id < :p2");
74     }
75  
76      @Test
77      void testOptionalLimitOnSelect() {
78          var selectStatement = select(animalData.allColumns())
79                  .from(animalData)
80                  .limitWhenPresent(null)
81                  .build()
82                  .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
83  
84          assertThat(selectStatement.getSelectStatement()).isEqualTo("select * from AnimalData");
85      }
86  
87      @Test
88      void testOptionalOffsetOnSelect() {
89          var selectStatement = select(animalData.allColumns())
90                  .from(animalData)
91                  .offsetWhenPresent(null)
92                  .build()
93                  .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
94  
95          assertThat(selectStatement.getSelectStatement()).isEqualTo("select * from AnimalData");
96      }
97  
98      @Test
99      void testOptionalFetchFirstOnSelect() {
100         var selectStatement = select(animalData.allColumns())
101                 .from(animalData)
102                 .fetchFirstWhenPresent(null).rowsOnly()
103                 .build()
104                 .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
105 
106         assertThat(selectStatement.getSelectStatement()).isEqualTo("select * from AnimalData");
107     }
108 
109     @Test
110     void testOptionalLimitAndOffsetOnSelect() {
111         var selectStatement = select(animalData.allColumns())
112                 .from(animalData)
113                 .limitWhenPresent(null)
114                 .offsetWhenPresent(null)
115                 .build()
116                 .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
117 
118         assertThat(selectStatement.getSelectStatement()).isEqualTo("select * from AnimalData");
119     }
120 
121     @Test
122     void testOptionalOffsetAndFetchOnSelect() {
123         var selectStatement = select(animalData.allColumns())
124                 .from(animalData)
125                 .offsetWhenPresent(null)
126                 .fetchFirstWhenPresent(null).rowsOnly()
127                 .build()
128                 .render(RenderingStrategies.SPRING_NAMED_PARAMETER);
129 
130         assertThat(selectStatement.getSelectStatement()).isEqualTo("select * from AnimalData");
131     }
132 }