20
20
import static org .assertj .core .api .Assertions .assertThat ;
21
21
import static org .mybatis .dynamic .sql .SqlBuilder .*;
22
22
23
- import java .util .* ;
23
+ import java .util .Optional ;
24
24
import java .util .stream .Stream ;
25
25
26
+ import org .jspecify .annotations .NullMarked ;
27
+ import org .jspecify .annotations .Nullable ;
26
28
import org .junit .jupiter .api .Test ;
27
29
import org .junit .jupiter .params .ParameterizedTest ;
28
30
import org .junit .jupiter .params .provider .MethodSource ;
39
41
import org .mybatis .dynamic .sql .where .WhereDSL ;
40
42
import org .mybatis .dynamic .sql .where .render .WhereClauseProvider ;
41
43
44
+ @ NullMarked
42
45
class EmptyWhereTest {
46
+ private static final String FIRST_NAME = "Fred" ;
47
+ private static final String LAST_NAME = "Flintstone" ;
43
48
44
- static List <Variation > baseVariations () {
45
- String firstName = "Fred" ;
46
- String lastName = "Flintstone" ;
47
-
48
- Variation v1 = new Variation (firstName , lastName ,
49
+ static Stream <Variation > whereVariations () {
50
+ Variation v1 = new Variation (FIRST_NAME , LAST_NAME ,
49
51
"where first_name = #{parameters.p1} or last_name = #{parameters.p2}" );
50
52
51
- Variation v2 = new Variation (null , lastName ,
53
+ Variation v2 = new Variation (null , LAST_NAME ,
52
54
"where last_name = #{parameters.p1}" );
53
55
54
- Variation v3 = new Variation (firstName , null ,
56
+ Variation v3 = new Variation (FIRST_NAME , null ,
55
57
"where first_name = #{parameters.p1}" );
56
58
57
59
Variation v4 = new Variation (null , null , "" );
58
60
59
- return List .of (v1 , v2 , v3 , v4 );
60
- }
61
-
62
- static Stream <Variation > whereVariations () {
63
- return baseVariations ().stream ();
61
+ return Stream .of (v1 , v2 , v3 , v4 );
64
62
}
65
63
66
64
static Stream <Variation > joinWhereVariations () {
67
- List <Variation > baseVariations = baseVariations ();
65
+ Variation v1 = new Variation (FIRST_NAME , LAST_NAME ,
66
+ "where person.first_name = #{parameters.p1} or person.last_name = #{parameters.p2}" );
68
67
69
- baseVariations .get (0 ).whereClause =
70
- "where person.first_name = #{parameters.p1} or person.last_name = #{parameters.p2}" ;
71
- baseVariations .get (1 ).whereClause = "where person.last_name = #{parameters.p1}" ;
72
- baseVariations .get (2 ).whereClause = "where person.first_name = #{parameters.p1}" ;
68
+ Variation v2 = new Variation (null , LAST_NAME ,
69
+ "where person.last_name = #{parameters.p1}" );
73
70
74
- return baseVariations .stream ();
71
+ Variation v3 = new Variation (FIRST_NAME , null ,
72
+ "where person.first_name = #{parameters.p1}" );
73
+
74
+ Variation v4 = new Variation (null , null , "" );
75
+
76
+ return Stream .of (v1 , v2 , v3 , v4 );
75
77
}
76
78
77
79
static Stream <Variation > updateWhereVariations () {
78
- List <Variation > baseVariations = baseVariations ();
80
+ Variation v1 = new Variation (FIRST_NAME , LAST_NAME ,
81
+ "where first_name = #{parameters.p2} or last_name = #{parameters.p3}" );
79
82
80
- baseVariations .get (0 ).whereClause =
81
- "where first_name = #{parameters.p2} or last_name = #{parameters.p3}" ;
82
- baseVariations .get (1 ).whereClause ="where last_name = #{parameters.p2}" ;
83
- baseVariations .get (2 ).whereClause = "where first_name = #{parameters.p2}" ;
83
+ Variation v2 = new Variation (null , LAST_NAME ,
84
+ "where last_name = #{parameters.p2}" );
84
85
85
- return baseVariations .stream ();
86
+ Variation v3 = new Variation (FIRST_NAME , null ,
87
+ "where first_name = #{parameters.p2}" );
88
+
89
+ Variation v4 = new Variation (null , null , "" );
90
+
91
+ return Stream .of (v1 , v2 , v3 , v4 );
86
92
}
87
93
88
94
@ Test
89
95
void testDeleteThreeConditions () {
90
- String fName = "Fred" ;
91
- String lName = "Flintstone" ;
92
-
93
96
DeleteDSL <DeleteModel >.DeleteWhereBuilder builder = deleteFrom (person )
94
97
.where (id , isEqualTo (3 ));
95
98
96
- builder .and (firstName , isEqualTo (fName ). filter ( Objects :: nonNull ));
97
- builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (lName ). filter ( Objects :: nonNull ));
99
+ builder .and (firstName , isEqualTo (FIRST_NAME ));
100
+ builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (LAST_NAME ));
98
101
99
102
DeleteStatementProvider deleteStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
100
103
@@ -112,8 +115,8 @@ void testDeleteVariations(Variation variation) {
112
115
DeleteDSL <DeleteModel >.DeleteWhereBuilder builder = deleteFrom (person )
113
116
.where ();
114
117
115
- builder .and (firstName , isEqualTo (variation .firstName ). filter ( Objects :: nonNull ));
116
- builder .or (PersonDynamicSqlSupport .lastName , isEqualTo (variation .lastName ). filter ( Objects :: nonNull ));
118
+ builder .and (firstName , isEqualToWhenPresent (variation .firstName ));
119
+ builder .or (PersonDynamicSqlSupport .lastName , isEqualToWhenPresent (variation .lastName ));
117
120
builder .configureStatement (c -> c .setNonRenderingWhereClauseAllowed (true ));
118
121
119
122
DeleteStatementProvider deleteStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
@@ -125,15 +128,12 @@ void testDeleteVariations(Variation variation) {
125
128
126
129
@ Test
127
130
void testSelectThreeConditions () {
128
- String fName = "Fred" ;
129
- String lName = "Flintstone" ;
130
-
131
131
QueryExpressionDSL <SelectModel >.QueryExpressionWhereBuilder builder = select (id , firstName , PersonDynamicSqlSupport .lastName )
132
132
.from (person )
133
133
.where (id , isEqualTo (3 ));
134
134
135
- builder .and (firstName , isEqualTo (fName ). filter ( Objects :: nonNull ));
136
- builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (lName ). filter ( Objects :: nonNull ));
135
+ builder .and (firstName , isEqualTo (FIRST_NAME ));
136
+ builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (LAST_NAME ));
137
137
138
138
SelectStatementProvider selectStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
139
139
@@ -153,8 +153,8 @@ void testSelectVariations(Variation variation) {
153
153
.from (person )
154
154
.where ();
155
155
156
- builder .and (firstName , isEqualTo (variation .firstName ). filter ( Objects :: nonNull ));
157
- builder .or (PersonDynamicSqlSupport .lastName , isEqualTo (variation .lastName ). filter ( Objects :: nonNull ));
156
+ builder .and (firstName , isEqualToWhenPresent (variation .firstName ));
157
+ builder .or (PersonDynamicSqlSupport .lastName , isEqualToWhenPresent (variation .lastName ));
158
158
builder .configureStatement (c -> c .setNonRenderingWhereClauseAllowed (true ));
159
159
160
160
SelectStatementProvider selectStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
@@ -166,15 +166,12 @@ void testSelectVariations(Variation variation) {
166
166
167
167
@ Test
168
168
void testJoinThreeConditions () {
169
- String fName = "Fred" ;
170
- String lName = "Flintstone" ;
171
-
172
169
QueryExpressionDSL <SelectModel >.QueryExpressionWhereBuilder builder = select (id , firstName , PersonDynamicSqlSupport .lastName , orderDate )
173
170
.from (person ).join (order ).on (person .id , isEqualTo (order .personId ))
174
171
.where (id , isEqualTo (3 ));
175
172
176
- builder .and (firstName , isEqualTo (fName ). filter ( Objects :: nonNull ));
177
- builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (lName ). filter ( Objects :: nonNull ));
173
+ builder .and (firstName , isEqualTo (FIRST_NAME ));
174
+ builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (LAST_NAME ));
178
175
179
176
SelectStatementProvider selectStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
180
177
@@ -195,8 +192,8 @@ void testJoinVariations(Variation variation) {
195
192
.from (person ).join (order ).on (person .id , isEqualTo (order .personId ))
196
193
.where ();
197
194
198
- builder .and (firstName , isEqualTo (variation .firstName ). filter ( Objects :: nonNull ));
199
- builder .or (PersonDynamicSqlSupport .lastName , isEqualTo (variation .lastName ). filter ( Objects :: nonNull ));
195
+ builder .and (firstName , isEqualToWhenPresent (variation .firstName ));
196
+ builder .or (PersonDynamicSqlSupport .lastName , isEqualToWhenPresent (variation .lastName ));
200
197
builder .configureStatement (c -> c .setNonRenderingWhereClauseAllowed (true ));
201
198
202
199
SelectStatementProvider selectStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
@@ -211,15 +208,12 @@ void testJoinVariations(Variation variation) {
211
208
212
209
@ Test
213
210
void testUpdateThreeConditions () {
214
- String fName = "Fred" ;
215
- String lName = "Flintstone" ;
216
-
217
211
UpdateDSL <UpdateModel >.UpdateWhereBuilder builder = update (person )
218
212
.set (id ).equalTo (3 )
219
213
.where (id , isEqualTo (3 ));
220
214
221
- builder .and (firstName , isEqualTo (fName ). filter ( Objects :: nonNull ));
222
- builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (lName ). filter ( Objects :: nonNull ));
215
+ builder .and (firstName , isEqualTo (FIRST_NAME ));
216
+ builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (LAST_NAME ));
223
217
224
218
UpdateStatementProvider updateStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
225
219
@@ -239,8 +233,8 @@ void testUpdateVariations(Variation variation) {
239
233
.set (id ).equalTo (3 )
240
234
.where ();
241
235
242
- builder .and (firstName , isEqualTo (variation .firstName ). filter ( Objects :: nonNull ));
243
- builder .or (PersonDynamicSqlSupport .lastName , isEqualTo (variation .lastName ). filter ( Objects :: nonNull ));
236
+ builder .and (firstName , isEqualToWhenPresent (variation .firstName ));
237
+ builder .or (PersonDynamicSqlSupport .lastName , isEqualToWhenPresent (variation .lastName ));
244
238
builder .configureStatement (c -> c .setNonRenderingWhereClauseAllowed (true ));
245
239
246
240
UpdateStatementProvider updateStatement = builder .build ().render (RenderingStrategies .MYBATIS3 );
@@ -254,13 +248,10 @@ void testUpdateVariations(Variation variation) {
254
248
255
249
@ Test
256
250
void testWhereThreeConditions () {
257
- String fName = "Fred" ;
258
- String lName = "Flintstone" ;
259
-
260
251
WhereDSL .StandaloneWhereFinisher builder = where (id , isEqualTo (3 ));
261
252
262
- builder .and (firstName , isEqualTo (fName ). filter ( Objects :: nonNull ));
263
- builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (lName ). filter ( Objects :: nonNull ));
253
+ builder .and (firstName , isEqualTo (FIRST_NAME ));
254
+ builder .and (PersonDynamicSqlSupport .lastName , isEqualTo (LAST_NAME ));
264
255
265
256
Optional <WhereClauseProvider > whereClause = builder .build ().render (RenderingStrategies .MYBATIS3 );
266
257
@@ -278,8 +269,8 @@ void testWhereThreeConditions() {
278
269
void testWhereVariations (Variation variation ) {
279
270
WhereDSL .StandaloneWhereFinisher builder = where ();
280
271
281
- builder .and (firstName , isEqualTo (variation .firstName ). filter ( Objects :: nonNull ));
282
- builder .or (PersonDynamicSqlSupport .lastName , isEqualTo (variation .lastName ). filter ( Objects :: nonNull ));
272
+ builder .and (firstName , isEqualToWhenPresent (variation .firstName ));
273
+ builder .or (PersonDynamicSqlSupport .lastName , isEqualToWhenPresent (variation .lastName ));
283
274
builder .configureStatement (c -> c .setNonRenderingWhereClauseAllowed (true ));
284
275
285
276
Optional <WhereClauseProvider > whereClause = builder .build ().render (RenderingStrategies .MYBATIS3 );
@@ -293,15 +284,5 @@ void testWhereVariations(Variation variation) {
293
284
}
294
285
}
295
286
296
- private static class Variation {
297
- String firstName ;
298
- String lastName ;
299
- String whereClause ;
300
-
301
- public Variation (String firstName , String lastName , String whereClause ) {
302
- this .firstName = firstName ;
303
- this .lastName = lastName ;
304
- this .whereClause = whereClause ;
305
- }
306
- }
287
+ private record Variation (@ Nullable String firstName , @ Nullable String lastName , String whereClause ) {}
307
288
}
0 commit comments