Skip to content

Commit 15b31f8

Browse files
committed
Coverage
1 parent 79547d5 commit 15b31f8

File tree

7 files changed

+131
-16
lines changed

7 files changed

+131
-16
lines changed

src/main/java/org/mybatis/dynamic/sql/SqlBuilder.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ static <T> WhereDSL where(BindableColumn<T> column, VisitableCondition<T> condit
219219
return WhereDSL.where().where(column, condition, subCriteria);
220220
}
221221

222+
static WhereDSL where(CriteriaGroup criteriaGroup, AndOrCriteriaGroup... subCriteria) {
223+
return WhereDSL.where().where(criteriaGroup, subCriteria);
224+
}
225+
222226
static WhereDSL where(ExistsPredicate existsPredicate, AndOrCriteriaGroup... subCriteria) {
223227
return WhereDSL.where().where(existsPredicate, subCriteria);
224228
}
@@ -250,13 +254,13 @@ static CriteriaGroup group(ExistsPredicate existsPredicate, List<AndOrCriteriaGr
250254
.build();
251255
}
252256

253-
static CriteriaGroup group(CriteriaGroup criterionGroup, AndOrCriteriaGroup...subCriteria) {
254-
return group(criterionGroup, Arrays.asList(subCriteria));
257+
static CriteriaGroup group(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
258+
return group(criteriaGroup, Arrays.asList(subCriteria));
255259
}
256260

257-
static CriteriaGroup group(CriteriaGroup criterionGroup, List<AndOrCriteriaGroup> subCriteria) {
261+
static CriteriaGroup group(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
258262
return new CriteriaGroup.Builder()
259-
.withInitialCriterion(criterionGroup)
263+
.withInitialCriterion(criteriaGroup)
260264
.withSubCriteria(subCriteria)
261265
.build();
262266
}
@@ -281,10 +285,10 @@ static AndOrCriteriaGroup or(ExistsPredicate existsPredicate, AndOrCriteriaGroup
281285
.build();
282286
}
283287

284-
static AndOrCriteriaGroup or(CriteriaGroup criterionGroup, AndOrCriteriaGroup...subCriteria) {
288+
static AndOrCriteriaGroup or(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
285289
return new AndOrCriteriaGroup.Builder()
286290
.withConnector("or") //$NON-NLS-1$
287-
.withInitialCriterion(criterionGroup)
291+
.withInitialCriterion(criteriaGroup)
288292
.withSubCriteria(Arrays.asList(subCriteria))
289293
.build();
290294
}
@@ -309,10 +313,10 @@ static AndOrCriteriaGroup and(ExistsPredicate existsPredicate, AndOrCriteriaGrou
309313
.build();
310314
}
311315

312-
static AndOrCriteriaGroup and(CriteriaGroup criterionGroup, AndOrCriteriaGroup...subCriteria) {
316+
static AndOrCriteriaGroup and(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
313317
return new AndOrCriteriaGroup.Builder()
314318
.withConnector("and") //$NON-NLS-1$
315-
.withInitialCriterion(criterionGroup)
319+
.withInitialCriterion(criteriaGroup)
316320
.withSubCriteria(Arrays.asList(subCriteria))
317321
.build();
318322
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/CriteriaCollector.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class CriteriaCollector {
4040
fun and(existsPredicate: ExistsPredicate, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
4141
addCriteriaGroup("and", buildCriterion(existsPredicate), criteriaReceiver)
4242

43-
fun and(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
43+
fun and(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver): CriteriaCollector =
4444
addCriteriaGroup("and", buildCriterion(criteriaGroup), criteriaReceiver)
4545

4646
fun <T> or(
@@ -53,7 +53,7 @@ class CriteriaCollector {
5353
fun or(existsPredicate: ExistsPredicate, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
5454
addCriteriaGroup("or", buildCriterion(existsPredicate), criteriaReceiver)
5555

56-
fun or(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
56+
fun or(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver): CriteriaCollector =
5757
addCriteriaGroup("or", buildCriterion(criteriaGroup), criteriaReceiver)
5858

5959
private fun <T> buildCriterion(

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinBaseBuilders.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ abstract class KotlinBaseBuilder<D : AbstractWhereSupport<*>, B : KotlinBaseBuil
4949
where(existsPredicate, sc)
5050
}
5151

52-
fun where(criteriaGroup: CriteriaGroup, subCriteria: CriteriaReceiver = {}): B =
52+
fun where(criteriaGroup: CriteriaGroup, subCriteria: CriteriaReceiver): B =
5353
applyToWhere(subCriteria) { sc ->
5454
where(criteriaGroup, sc)
5555
}
@@ -69,7 +69,7 @@ abstract class KotlinBaseBuilder<D : AbstractWhereSupport<*>, B : KotlinBaseBuil
6969
and(existsPredicate, sc)
7070
}
7171

72-
fun and(criteriaGroup: CriteriaGroup, subCriteria: CriteriaReceiver = {}): B =
72+
fun and(criteriaGroup: CriteriaGroup, subCriteria: CriteriaReceiver): B =
7373
applyToWhere(subCriteria) { sc ->
7474
and(criteriaGroup, sc)
7575
}
@@ -84,7 +84,7 @@ abstract class KotlinBaseBuilder<D : AbstractWhereSupport<*>, B : KotlinBaseBuil
8484
or(existsPredicate, sc)
8585
}
8686

87-
fun or(criteriaGroup: CriteriaGroup, subCriteria: CriteriaReceiver = {}): B =
87+
fun or(criteriaGroup: CriteriaGroup, subCriteria: CriteriaReceiver): B =
8888
applyToWhere(subCriteria) { sc ->
8989
or(criteriaGroup, sc)
9090
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/elements/SqlElements.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,16 @@ fun <T> substring(
150150

151151
fun <T> upper(column: BindableColumn<T>): Upper<T> = SqlBuilder.upper(column)
152152

153-
fun group(initialCriterion: CriteriaGroup, subCriteria: CriteriaReceiver = {}): CriteriaGroup =
153+
fun group(initialCriterion: CriteriaGroup, subCriteria: CriteriaReceiver): CriteriaGroup =
154154
SqlBuilder.group(initialCriterion, CriteriaCollector().apply(subCriteria).criteria)
155155

156-
fun group(existsPredicate: ExistsPredicate, subCriteria: CriteriaReceiver = {}): CriteriaGroup =
156+
fun group(existsPredicate: ExistsPredicate, subCriteria: CriteriaReceiver): CriteriaGroup =
157157
SqlBuilder.group(existsPredicate, CriteriaCollector().apply(subCriteria).criteria)
158158

159159
fun <T> group(
160160
column: BindableColumn<T>,
161161
condition: VisitableCondition<T>,
162-
subCriteria: CriteriaReceiver = {}
162+
subCriteria: CriteriaReceiver
163163
): CriteriaGroup =
164164
SqlBuilder.group(column, condition, CriteriaCollector().apply(subCriteria).criteria)
165165

src/test/java/examples/complexquery/GroupingTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,34 @@ void testNestedGrouping() {
149149
assertThat(selectStatement.getParameters()).containsEntry("p10", 2);
150150
assertThat(selectStatement.getParameters()).containsEntry("p11", 1);
151151
}
152+
153+
@Test
154+
void testAndOrCriteriaGroups() {
155+
SelectStatementProvider selectStatement = select(A, B, C)
156+
.from(foo)
157+
.where(A, isEqualTo(6))
158+
.and(C, isEqualTo(1))
159+
.and(group(A, isEqualTo(1), or(A, isGreaterThan(5))), or(B, isEqualTo(1)))
160+
.or(group(A, isEqualTo(1), or(A, isGreaterThan(5))), and(A, isLessThan(0), and(B, isEqualTo(2))))
161+
.build()
162+
.render(RenderingStrategies.MYBATIS3);
163+
164+
String expected = "select A, B, C"
165+
+ " from Foo"
166+
+ " where A = #{parameters.p1}"
167+
+ " and C = #{parameters.p2}"
168+
+ " and ((A = #{parameters.p3} or A > #{parameters.p4}) or B = #{parameters.p5})"
169+
+ " or ((A = #{parameters.p6} or A > #{parameters.p7}) and (A < #{parameters.p8} and B = #{parameters.p9}))";
170+
171+
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
172+
assertThat(selectStatement.getParameters()).containsEntry("p1", 6);
173+
assertThat(selectStatement.getParameters()).containsEntry("p2", 1);
174+
assertThat(selectStatement.getParameters()).containsEntry("p3", 1);
175+
assertThat(selectStatement.getParameters()).containsEntry("p4", 5);
176+
assertThat(selectStatement.getParameters()).containsEntry("p5", 1);
177+
assertThat(selectStatement.getParameters()).containsEntry("p6", 1);
178+
assertThat(selectStatement.getParameters()).containsEntry("p7", 5);
179+
assertThat(selectStatement.getParameters()).containsEntry("p8", 0);
180+
assertThat(selectStatement.getParameters()).containsEntry("p9", 2);
181+
}
152182
}

src/test/java/org/mybatis/dynamic/sql/where/render/OptionalCriterionRenderTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,4 +301,46 @@ void testWhereExistsAndAnd() {
301301
assertThat(whereClause.getParameters()).containsExactly(entry("p1", 3), entry("p2", 4), entry("p3", 5));
302302
assertThat(whereClause.getWhereClause()).isEqualTo(expected);
303303
}
304+
305+
@Test
306+
void testCollapsingCriteriaGroup1() {
307+
String name1 = null;
308+
309+
WhereClauseProvider whereClause = where(
310+
group(firstName, isEqualToWhenPresent(name1)), or(lastName, isEqualToWhenPresent(name1)))
311+
.build()
312+
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
313+
314+
assertThat(whereClause.getWhereClause()).isEmpty();
315+
}
316+
317+
@Test
318+
void testCollapsingCriteriaGroup2() {
319+
String name1 = null;
320+
321+
WhereClauseProvider whereClause = where(
322+
group(firstName, isEqualTo("Fred")), or(lastName, isEqualToWhenPresent(name1)))
323+
.build()
324+
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
325+
326+
String expected = "where first_name = :p1";
327+
328+
assertThat(whereClause.getParameters()).containsExactly(entry("p1", "Fred"));
329+
assertThat(whereClause.getWhereClause()).isEqualTo(expected);
330+
}
331+
332+
@Test
333+
void testCollapsingCriteriaGroup3() {
334+
String name1 = null;
335+
336+
WhereClauseProvider whereClause = where(
337+
group(firstName, isEqualTo("Fred")), or(lastName, isEqualToWhenPresent(name1)), or(firstName, isEqualTo("Betty")))
338+
.build()
339+
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
340+
341+
String expected = "where (first_name = :p1 or first_name = :p2)";
342+
343+
assertThat(whereClause.getParameters()).containsExactly(entry("p1", "Fred"), entry("p2", "Betty"));
344+
assertThat(whereClause.getWhereClause()).isEqualTo(expected);
345+
}
304346
}

src/test/kotlin/examples/kotlin/mybatis3/general/KGroupingTest.kt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,43 @@ class KGroupingTest {
169169
assertThat(selectStatement.parameters).containsEntry("p10", 2)
170170
assertThat(selectStatement.parameters).containsEntry("p11", 1)
171171
}
172+
173+
@Test
174+
fun testAndOrCriteriaGroups() {
175+
val selectStatement = select(A, B, C) {
176+
from(foo)
177+
where(A, isEqualTo(6))
178+
and(C, isEqualTo(1))
179+
and(group(A, isEqualTo(1)) {
180+
or(A, isGreaterThan(5))
181+
}) {
182+
or(B, isEqualTo(1))
183+
}
184+
or(group(A, isEqualTo(1)) {
185+
or(A, isGreaterThan(5))
186+
}) {
187+
and(A, isLessThan(0)) {
188+
and(B, isEqualTo(2))
189+
}
190+
}
191+
}
192+
193+
val expected = "select A, B, C" +
194+
" from Foo" +
195+
" where A = #{parameters.p1}" +
196+
" and C = #{parameters.p2}" +
197+
" and ((A = #{parameters.p3} or A > #{parameters.p4}) or B = #{parameters.p5})" +
198+
" or ((A = #{parameters.p6} or A > #{parameters.p7}) and (A < #{parameters.p8} and B = #{parameters.p9}))"
199+
200+
assertThat(selectStatement.selectStatement).isEqualTo(expected)
201+
assertThat(selectStatement.parameters).containsEntry("p1", 6)
202+
assertThat(selectStatement.parameters).containsEntry("p2", 1)
203+
assertThat(selectStatement.parameters).containsEntry("p3", 1)
204+
assertThat(selectStatement.parameters).containsEntry("p4", 5)
205+
assertThat(selectStatement.parameters).containsEntry("p5", 1)
206+
assertThat(selectStatement.parameters).containsEntry("p6", 1)
207+
assertThat(selectStatement.parameters).containsEntry("p7", 5)
208+
assertThat(selectStatement.parameters).containsEntry("p8", 0)
209+
assertThat(selectStatement.parameters).containsEntry("p9", 2)
210+
}
172211
}

0 commit comments

Comments
 (0)