Skip to content

Commit 7e6d571

Browse files
committed
Move all criteria group support to the new collector
1 parent 6ee2536 commit 7e6d571

File tree

7 files changed

+107
-408
lines changed

7 files changed

+107
-408
lines changed

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ package org.mybatis.dynamic.sql.util.kotlin
1717

1818
import org.mybatis.dynamic.sql.BindableColumn
1919
import org.mybatis.dynamic.sql.ColumnAndConditionCriterion
20-
import org.mybatis.dynamic.sql.CriteriaGroup
2120
import org.mybatis.dynamic.sql.AndOrCriteriaGroup
2221
import org.mybatis.dynamic.sql.ExistsCriterion
2322
import org.mybatis.dynamic.sql.ExistsPredicate
@@ -40,9 +39,6 @@ class CriteriaCollector {
4039
fun and(existsPredicate: ExistsPredicate, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
4140
addCriteriaGroup("and", buildCriterion(existsPredicate), criteriaReceiver)
4241

43-
fun and(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver): CriteriaCollector =
44-
addCriteriaGroup("and", buildCriterion(criteriaGroup), criteriaReceiver)
45-
4642
fun <T> or(
4743
column: BindableColumn<T>,
4844
condition: VisitableCondition<T>,
@@ -53,9 +49,6 @@ class CriteriaCollector {
5349
fun or(existsPredicate: ExistsPredicate, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
5450
addCriteriaGroup("or", buildCriterion(existsPredicate), criteriaReceiver)
5551

56-
fun or(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver): CriteriaCollector =
57-
addCriteriaGroup("or", buildCriterion(criteriaGroup), criteriaReceiver)
58-
5952
private fun <T> buildCriterion(
6053
column: BindableColumn<T>,
6154
condition: VisitableCondition<T>
@@ -65,9 +58,6 @@ class CriteriaCollector {
6558
private fun buildCriterion(existsPredicate: ExistsPredicate): ExistsCriterion =
6659
ExistsCriterion.Builder().withExistsPredicate(existsPredicate).build()
6760

68-
private fun buildCriterion(criteriaGroup: CriteriaGroup): CriteriaGroup =
69-
CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build()
70-
7161
private fun addCriteriaGroup(
7262
connector: String,
7363
initialCriterion: SqlCriterion,

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package org.mybatis.dynamic.sql.util.kotlin
1818
import org.mybatis.dynamic.sql.BindableColumn
1919
import org.mybatis.dynamic.sql.AndOrCriteriaGroup
2020
import org.mybatis.dynamic.sql.ExistsPredicate
21-
import org.mybatis.dynamic.sql.SqlCriterion
2221
import org.mybatis.dynamic.sql.SqlTable
2322
import org.mybatis.dynamic.sql.VisitableCondition
2423
import org.mybatis.dynamic.sql.select.AbstractQueryExpressionDSL
@@ -67,11 +66,6 @@ abstract class KotlinBaseBuilder<D : AbstractWhereSupport<*>, B : KotlinBaseBuil
6766
where(existsPredicate, sc)
6867
}
6968

70-
fun where(initialCriterion: SqlCriterion, subCriteria: CriteriaReceiver = {}): B =
71-
applyToWhere(subCriteria) { sc ->
72-
where(initialCriterion, sc)
73-
}
74-
7569
fun applyWhere(whereApplier: WhereApplier): B =
7670
self().apply {
7771
whereApplier.invoke(this)
@@ -87,11 +81,6 @@ abstract class KotlinBaseBuilder<D : AbstractWhereSupport<*>, B : KotlinBaseBuil
8781
and(existsPredicate, sc)
8882
}
8983

90-
fun and(initialCriterion: SqlCriterion, subCriteria: CriteriaReceiver = {}): B =
91-
applyToWhere(subCriteria) { sc ->
92-
and(initialCriterion, sc)
93-
}
94-
9584
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, subCriteria: CriteriaReceiver = {}): B =
9685
applyToWhere(subCriteria) { sc ->
9786
or(column, condition, sc)
@@ -102,11 +91,6 @@ abstract class KotlinBaseBuilder<D : AbstractWhereSupport<*>, B : KotlinBaseBuil
10291
or(existsPredicate, sc)
10392
}
10493

105-
fun or(initialCriterion: SqlCriterion, subCriteria: CriteriaReceiver = {}): B =
106-
applyToWhere(subCriteria) { sc ->
107-
or(initialCriterion, sc)
108-
}
109-
11094
fun allRows(): B = self()
11195

11296
private fun applyToWhere(

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

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,11 @@ package org.mybatis.dynamic.sql.util.kotlin.elements
1919
import org.mybatis.dynamic.sql.BasicColumn
2020
import org.mybatis.dynamic.sql.BindableColumn
2121
import org.mybatis.dynamic.sql.Constant
22-
import org.mybatis.dynamic.sql.CriteriaGroup
2322
import org.mybatis.dynamic.sql.ExistsPredicate
24-
import org.mybatis.dynamic.sql.NotCriterion
2523
import org.mybatis.dynamic.sql.SortSpecification
2624
import org.mybatis.dynamic.sql.SqlBuilder
2725
import org.mybatis.dynamic.sql.SqlColumn
28-
import org.mybatis.dynamic.sql.SqlCriterion
2926
import org.mybatis.dynamic.sql.StringConstant
30-
import org.mybatis.dynamic.sql.VisitableCondition
3127
import org.mybatis.dynamic.sql.select.aggregate.Avg
3228
import org.mybatis.dynamic.sql.select.aggregate.Count
3329
import org.mybatis.dynamic.sql.select.aggregate.CountAll
@@ -45,8 +41,6 @@ import org.mybatis.dynamic.sql.select.function.Substring
4541
import org.mybatis.dynamic.sql.select.function.Subtract
4642
import org.mybatis.dynamic.sql.select.function.Upper
4743
import org.mybatis.dynamic.sql.select.join.EqualTo
48-
import org.mybatis.dynamic.sql.util.kotlin.CriteriaCollector
49-
import org.mybatis.dynamic.sql.util.kotlin.CriteriaReceiver
5044
import org.mybatis.dynamic.sql.util.kotlin.KotlinSubQueryBuilder
5145
import org.mybatis.dynamic.sql.where.condition.IsBetween
5246
import org.mybatis.dynamic.sql.where.condition.IsEqualTo
@@ -152,32 +146,6 @@ fun <T> substring(
152146

153147
fun <T> upper(column: BindableColumn<T>): Upper<T> = SqlBuilder.upper(column)
154148

155-
fun group(initialCriterion: SqlCriterion, subCriteria: CriteriaReceiver): CriteriaGroup =
156-
SqlBuilder.group(initialCriterion, CriteriaCollector().apply(subCriteria).criteria)
157-
158-
fun group(existsPredicate: ExistsPredicate, subCriteria: CriteriaReceiver): CriteriaGroup =
159-
SqlBuilder.group(existsPredicate, CriteriaCollector().apply(subCriteria).criteria)
160-
161-
fun <T> group(
162-
column: BindableColumn<T>,
163-
condition: VisitableCondition<T>,
164-
subCriteria: CriteriaReceiver
165-
): CriteriaGroup =
166-
SqlBuilder.group(column, condition, CriteriaCollector().apply(subCriteria).criteria)
167-
168-
fun not(initialCriterion: SqlCriterion, subCriteria: CriteriaReceiver = {}): NotCriterion =
169-
SqlBuilder.not(initialCriterion, CriteriaCollector().apply(subCriteria).criteria)
170-
171-
fun not(existsPredicate: ExistsPredicate, subCriteria: CriteriaReceiver = {}): NotCriterion =
172-
SqlBuilder.not(existsPredicate, CriteriaCollector().apply(subCriteria).criteria)
173-
174-
fun <T> not(
175-
column: BindableColumn<T>,
176-
condition: VisitableCondition<T>,
177-
subCriteria: CriteriaReceiver = {}
178-
): NotCriterion =
179-
SqlBuilder.not(column, condition, CriteriaCollector().apply(subCriteria).criteria)
180-
181149
// conditions for all data types
182150
fun <T> isNull(): IsNull<T> = SqlBuilder.isNull()
183151

src/test/kotlin/examples/kotlin/mybatis3/canonical/PersonMapperTest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import org.mybatis.dynamic.sql.util.kotlin.elements.isLike
4545
import org.mybatis.dynamic.sql.util.kotlin.elements.isNotLike
4646
import org.mybatis.dynamic.sql.util.kotlin.elements.isNull
4747
import org.mybatis.dynamic.sql.util.kotlin.elements.isTrue
48-
import org.mybatis.dynamic.sql.util.kotlin.elements.not
4948
import org.mybatis.dynamic.sql.util.kotlin.mybatis3.insertInto
5049
import org.mybatis.dynamic.sql.util.kotlin.mybatis3.select
5150
import java.io.InputStreamReader
@@ -176,7 +175,7 @@ class PersonMapperTest {
176175
val mapper = session.getMapper(PersonMapper::class.java)
177176

178177
val rows = mapper.select {
179-
where(not(firstName, isIn("Fred", "Barney")))
178+
where { not { firstName (isIn("Fred", "Barney")) }}
180179
}
181180

182181
assertThat(rows).hasSize(4)

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

Lines changed: 97 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ import org.assertj.core.api.Assertions.assertThat
2323
import org.junit.jupiter.api.Test
2424
import org.mybatis.dynamic.sql.SqlTable
2525
import org.mybatis.dynamic.sql.util.kotlin.elements.column
26-
import org.mybatis.dynamic.sql.util.kotlin.elements.exists
27-
import org.mybatis.dynamic.sql.util.kotlin.elements.group
26+
import org.mybatis.dynamic.sql.util.kotlin.elements.isBetween
2827
import org.mybatis.dynamic.sql.util.kotlin.elements.isEqualTo
2928
import org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThan
3029
import org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThanOrEqualTo
3130
import org.mybatis.dynamic.sql.util.kotlin.elements.isLessThan
32-
import org.mybatis.dynamic.sql.util.kotlin.elements.not
31+
import org.mybatis.dynamic.sql.util.kotlin.elements.isLessThanOrEqualTo
32+
import org.mybatis.dynamic.sql.util.kotlin.elements.isLike
3333
import org.mybatis.dynamic.sql.util.kotlin.mybatis3.select
3434

3535
object FooDynamicSqlSupport {
@@ -50,35 +50,45 @@ class KGroupingTest {
5050
fun testSimpleGrouping() {
5151
val selectStatement = select(A, B, C) {
5252
from(foo)
53-
where (A, isEqualTo(1)) {
54-
or(A, isEqualTo(2))
53+
where {
54+
A (isBetween(1).and(5).map { it + 3 }.filter{ _ -> true })
55+
or { A (isLessThanOrEqualTo(3).map { it + 6 }.filter { true }) }
56+
or { A (isEqualTo(9)) }
57+
or { C (isLike("Fred%")) }
5558
}
56-
and(B, isEqualTo(3))
59+
and { B (isEqualTo(3)) }
5760
}
5861

5962
val expected = "select A, B, C" +
6063
" from Foo" +
61-
" where (A = #{parameters.p1} or A = #{parameters.p2}) and B = #{parameters.p3}"
64+
" where (A between #{parameters.p1} and #{parameters.p2} or A <= #{parameters.p3} or" +
65+
" A = #{parameters.p4} or C like #{parameters.p5}) and B = #{parameters.p6}"
6266

6367
assertThat(selectStatement.selectStatement).isEqualTo(expected)
64-
assertThat(selectStatement.parameters).containsEntry("p1", 1)
65-
assertThat(selectStatement.parameters).containsEntry("p2", 2)
66-
assertThat(selectStatement.parameters).containsEntry("p3", 3)
68+
assertThat(selectStatement.parameters).containsEntry("p1", 4)
69+
assertThat(selectStatement.parameters).containsEntry("p2", 8)
70+
assertThat(selectStatement.parameters).containsEntry("p3", 9)
71+
assertThat(selectStatement.parameters).containsEntry("p4", 9)
72+
assertThat(selectStatement.parameters).containsEntry("p5", "Fred%")
73+
assertThat(selectStatement.parameters).containsEntry("p6", 3)
6774
}
6875

6976
@Test
7077
fun testComplexGrouping() {
7178
val selectStatement = select(A, B, C) {
7279
from(foo)
73-
where(group(A, isEqualTo(1)) {
74-
or(A, isGreaterThan(5))
75-
}) {
76-
and(B, isEqualTo(1))
77-
or(A, isLessThan(0)) {
78-
and(B, isEqualTo(2))
80+
where {
81+
group {
82+
A (isEqualTo(1))
83+
or { A (isGreaterThan(5)) }
84+
}
85+
and { B (isEqualTo(1)) }
86+
or {
87+
A (isLessThan(0))
88+
and { B (isEqualTo(2)) }
7989
}
8090
}
81-
and(C, isEqualTo("Fred"))
91+
and { C (isEqualTo("Fred")) }
8292
}
8393

8494
val expected = "select A, B, C" +
@@ -99,21 +109,24 @@ class KGroupingTest {
99109
fun testGroupAndExists() {
100110
val selectStatement = select(A, B, C) {
101111
from(foo)
102-
where(group(exists {
103-
select(foo.allColumns()) {
104-
from (foo)
105-
where(A, isEqualTo(3))
112+
where {
113+
group {
114+
exists {
115+
select(foo.allColumns()) {
116+
from(foo)
117+
where { A (isEqualTo(3)) }
118+
}
119+
}
120+
and { A (isEqualTo(1)) }
121+
or { A (isGreaterThan(5)) }
106122
}
107-
}) {
108-
and(A, isEqualTo((1)))
109-
or(A, isGreaterThan(5))
110-
}) {
111-
and(B, isEqualTo(1))
112-
or(A, isLessThan(0)) {
113-
and(B, isEqualTo(2))
123+
and { B (isEqualTo(1)) }
124+
or {
125+
A (isLessThan(0))
126+
and { B (isEqualTo(2)) }
114127
}
115128
}
116-
and(C, isEqualTo("Fred"))
129+
and { C (isEqualTo("Fred")) }
117130
}
118131

119132
val expected = "select A, B, C" +
@@ -136,27 +149,33 @@ class KGroupingTest {
136149
fun testNestedGrouping() {
137150
val selectStatement = select(A, B, C) {
138151
from(foo)
139-
where(
140-
group(group(A, isEqualTo(1)) {
141-
or(A, isGreaterThan(5))
142-
}) {
143-
and(A, isGreaterThan(5))
152+
where {
153+
group {
154+
group {
155+
A (isEqualTo(1))
156+
or { A (isGreaterThan(5)) }
157+
}
158+
and { A (isGreaterThan(5)) }
144159
}
145-
) {
146-
and(group(A, isEqualTo(1)) {
147-
or(A, isGreaterThan(5))
148-
}) {
149-
or(B, isEqualTo(1))
160+
and {
161+
group {
162+
A (isEqualTo(1))
163+
or { A (isGreaterThan(5)) }
164+
}
165+
or { B (isEqualTo(1)) }
150166
}
151-
or(group(A, isEqualTo(1)) {
152-
or(A, isGreaterThan(5))
153-
}) {
154-
and(A, isLessThan(0)) {
155-
and(B, isEqualTo(2))
167+
or {
168+
group {
169+
A (isEqualTo(1))
170+
or { A (isGreaterThan(5)) }
171+
}
172+
and {
173+
A (isLessThan(0))
174+
and { B (isEqualTo(2)) }
156175
}
157176
}
158177
}
159-
and(C, isEqualTo("Fred"))
178+
and { C (isEqualTo("Fred")) }
160179
}
161180

162181
val expected = "select A, B, C" +
@@ -184,18 +203,23 @@ class KGroupingTest {
184203
fun testAndOrCriteriaGroups() {
185204
val selectStatement = select(A, B, C) {
186205
from(foo)
187-
where(A, isEqualTo(6))
188-
and(C, isEqualTo("Fred"))
189-
and(group(A, isEqualTo(1)) {
190-
or(A, isGreaterThan(5))
191-
}) {
192-
or(B, isEqualTo(1))
206+
where { A (isEqualTo(6)) }
207+
and { C (isEqualTo("Fred")) }
208+
and {
209+
group {
210+
A (isEqualTo(1))
211+
or { A (isGreaterThan(5)) }
212+
}
213+
or { B (isEqualTo(1)) }
193214
}
194-
or(group(A, isEqualTo(1)) {
195-
or(A, isGreaterThan(5))
196-
}) {
197-
and(A, isLessThan(0)) {
198-
and(B, isEqualTo(2))
215+
or {
216+
group {
217+
A (isEqualTo(1))
218+
or { A (isGreaterThan(5)) }
219+
}
220+
and {
221+
A (isLessThan(0))
222+
and { B (isEqualTo(2)) }
199223
}
200224
}
201225
}
@@ -224,19 +248,24 @@ class KGroupingTest {
224248
fun testNotGroupAndOrCriteriaGroups() {
225249
val selectStatement = select(A, B, C) {
226250
from(foo)
227-
where(not(group(B, isEqualTo(4)) {
228-
and(A, isLessThan(5))
229-
}) {
230-
and(A, isGreaterThan(3))
231-
})
232-
and(not(A, isGreaterThan(4)))
233-
or(
234-
not(
235-
group(B, isLessThan(6)) {
236-
and(A, isGreaterThanOrEqualTo(7))
251+
where {
252+
not {
253+
group {
254+
B (isEqualTo(4))
255+
and { A (isLessThan(5)) }
237256
}
238-
)
239-
)
257+
and { A (isGreaterThan(3)) }
258+
}
259+
}
260+
and { not { A (isGreaterThan(4)) } }
261+
or {
262+
not {
263+
group {
264+
B (isLessThan(6))
265+
and { A (isGreaterThanOrEqualTo(7)) }
266+
}
267+
}
268+
}
240269
}
241270

242271
val expected = "select A, B, C" +

0 commit comments

Comments
 (0)