Skip to content

Commit 8495687

Browse files
authored
Merge pull request #445 from jeffgbutler/where-dsl-improvements
[Kotlin] Where DSL improvements
2 parents c951c97 + 6567e08 commit 8495687

File tree

3 files changed

+44
-72
lines changed

3 files changed

+44
-72
lines changed

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

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
*/
1616
package org.mybatis.dynamic.sql.util.kotlin
1717

18+
import org.mybatis.dynamic.sql.AndOrCriteriaGroup
19+
import org.mybatis.dynamic.sql.BasicColumn
1820
import org.mybatis.dynamic.sql.BindableColumn
1921
import org.mybatis.dynamic.sql.ColumnAndConditionCriterion
2022
import org.mybatis.dynamic.sql.CriteriaGroup
21-
import org.mybatis.dynamic.sql.AndOrCriteriaGroup
22-
import org.mybatis.dynamic.sql.BasicColumn
2323
import org.mybatis.dynamic.sql.ExistsCriterion
2424
import org.mybatis.dynamic.sql.NotCriterion
2525
import org.mybatis.dynamic.sql.SqlBuilder
@@ -164,17 +164,17 @@ class GroupingCriteriaCollector {
164164
// receivers problem (https://youtrack.jetbrains.com/issue/KT-42435)
165165

166166
// conditions for all data types
167-
fun <T> BindableColumn<T>.isNull() = invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNull())
167+
fun BindableColumn<*>.isNull() = invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNull())
168168

169-
fun <T> BindableColumn<T>.isNotNull() = invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotNull())
169+
fun BindableColumn<*>.isNotNull() = invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotNull())
170170

171171
infix fun <T : Any> BindableColumn<T>.isEqualTo(value: T) =
172172
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isEqualTo(value))
173173

174-
infix fun <T> BindableColumn<T>.isEqualToSubQuery(subQuery: KotlinSubQueryBuilder.() -> Unit) =
174+
infix fun BindableColumn<*>.isEqualTo(subQuery: KotlinSubQueryBuilder.() -> Unit) =
175175
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isEqualTo(subQuery))
176176

177-
infix fun <T> BindableColumn<T>.isEqualTo(column: BasicColumn) =
177+
infix fun BindableColumn<*>.isEqualTo(column: BasicColumn) =
178178
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isEqualTo(column))
179179

180180
infix fun <T : Any> BindableColumn<T>.isEqualToWhenPresent(value: T?) =
@@ -183,10 +183,10 @@ class GroupingCriteriaCollector {
183183
infix fun <T : Any> BindableColumn<T>.isNotEqualTo(value: T) =
184184
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotEqualTo(value))
185185

186-
infix fun <T> BindableColumn<T>.isNotEqualToSubQuery(subQuery: KotlinSubQueryBuilder.() -> Unit) =
186+
infix fun BindableColumn<*>.isNotEqualTo(subQuery: KotlinSubQueryBuilder.() -> Unit) =
187187
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotEqualTo(subQuery))
188188

189-
infix fun <T> BindableColumn<T>.isNotEqualTo(column: BasicColumn) =
189+
infix fun BindableColumn<*>.isNotEqualTo(column: BasicColumn) =
190190
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotEqualTo(column))
191191

192192
infix fun <T : Any> BindableColumn<T>.isNotEqualToWhenPresent(value: T?) =
@@ -195,10 +195,10 @@ class GroupingCriteriaCollector {
195195
infix fun <T : Any> BindableColumn<T>.isGreaterThan(value: T) =
196196
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThan(value))
197197

198-
infix fun <T> BindableColumn<T>.isGreaterThanSubQuery(subQuery: KotlinSubQueryBuilder.() -> Unit) =
198+
infix fun BindableColumn<*>.isGreaterThan(subQuery: KotlinSubQueryBuilder.() -> Unit) =
199199
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThan(subQuery))
200200

201-
infix fun <T> BindableColumn<T>.isGreaterThan(column: BasicColumn) =
201+
infix fun BindableColumn<*>.isGreaterThan(column: BasicColumn) =
202202
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThan(column))
203203

204204
infix fun <T : Any> BindableColumn<T>.isGreaterThanWhenPresent(value: T?) =
@@ -207,10 +207,10 @@ class GroupingCriteriaCollector {
207207
infix fun <T : Any> BindableColumn<T>.isGreaterThanOrEqualTo(value: T) =
208208
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThanOrEqualTo(value))
209209

210-
infix fun <T> BindableColumn<T>.isGreaterThanOrEqualToSubQuery(subQuery: KotlinSubQueryBuilder.() -> Unit) =
210+
infix fun BindableColumn<*>.isGreaterThanOrEqualTo(subQuery: KotlinSubQueryBuilder.() -> Unit) =
211211
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThanOrEqualTo(subQuery))
212212

213-
infix fun <T> BindableColumn<T>.isGreaterThanOrEqualTo(column: BasicColumn) =
213+
infix fun BindableColumn<*>.isGreaterThanOrEqualTo(column: BasicColumn) =
214214
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThanOrEqualTo(column))
215215

216216
infix fun <T : Any> BindableColumn<T>.isGreaterThanOrEqualToWhenPresent(value: T?) =
@@ -219,10 +219,10 @@ class GroupingCriteriaCollector {
219219
infix fun <T : Any> BindableColumn<T>.isLessThan(value: T) =
220220
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isLessThan(value))
221221

222-
infix fun <T> BindableColumn<T>.isLessThanSubQuery(subQuery: KotlinSubQueryBuilder.() -> Unit) =
222+
infix fun BindableColumn<*>.isLessThan(subQuery: KotlinSubQueryBuilder.() -> Unit) =
223223
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isLessThan(subQuery))
224224

225-
infix fun <T> BindableColumn<T>.isLessThan(column: BasicColumn) =
225+
infix fun BindableColumn<*>.isLessThan(column: BasicColumn) =
226226
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isLessThan(column))
227227

228228
infix fun <T : Any> BindableColumn<T>.isLessThanWhenPresent(value: T?) =
@@ -231,10 +231,10 @@ class GroupingCriteriaCollector {
231231
infix fun <T : Any> BindableColumn<T>.isLessThanOrEqualTo(value: T) =
232232
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isLessThanOrEqualTo(value))
233233

234-
infix fun <T> BindableColumn<T>.isLessThanOrEqualToSubQuery(subQuery: KotlinSubQueryBuilder.() -> Unit) =
234+
infix fun BindableColumn<*>.isLessThanOrEqualTo(subQuery: KotlinSubQueryBuilder.() -> Unit) =
235235
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isLessThanOrEqualTo(subQuery))
236236

237-
infix fun <T> BindableColumn<T>.isLessThanOrEqualTo(column: BasicColumn) =
237+
infix fun BindableColumn<*>.isLessThanOrEqualTo(column: BasicColumn) =
238238
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isLessThanOrEqualTo(column))
239239

240240
infix fun <T : Any> BindableColumn<T>.isLessThanOrEqualToWhenPresent(value: T?) =
@@ -245,7 +245,7 @@ class GroupingCriteriaCollector {
245245
infix fun <T : Any> BindableColumn<T>.isIn(values: Collection<T>) =
246246
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isIn(values))
247247

248-
infix fun <T> BindableColumn<T>.isIn(subQuery: KotlinSubQueryBuilder.() -> Unit) =
248+
infix fun BindableColumn<*>.isIn(subQuery: KotlinSubQueryBuilder.() -> Unit) =
249249
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isIn(subQuery))
250250

251251
fun <T : Any> BindableColumn<T>.isInWhenPresent(vararg values: T?) = isInWhenPresent(values.asList())
@@ -258,7 +258,7 @@ class GroupingCriteriaCollector {
258258
infix fun <T : Any> BindableColumn<T>.isNotIn(values: Collection<T>) =
259259
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotIn(values))
260260

261-
infix fun <T> BindableColumn<T>.isNotIn(subQuery: KotlinSubQueryBuilder.() -> Unit) =
261+
infix fun BindableColumn<*>.isNotIn(subQuery: KotlinSubQueryBuilder.() -> Unit) =
262262
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotIn(subQuery))
263263

264264
fun <T : Any> BindableColumn<T>.isNotInWhenPresent(vararg values: T?) = isNotInWhenPresent(values.asList())
@@ -267,16 +267,24 @@ class GroupingCriteriaCollector {
267267
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInWhenPresent(values))
268268

269269
infix fun <T : Any> BindableColumn<T>.isBetween(value1: T) =
270-
InfixBetweenBuilder(value1) { invoke(it) }
270+
SecondValueCollector<T> {
271+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isBetween(value1).and(it))
272+
}
271273

272274
infix fun <T : Any> BindableColumn<T>.isBetweenWhenPresent(value1: T?) =
273-
InfixBetweenWhenPresentBuilder(value1) { invoke(it) }
275+
NullableSecondValueCollector<T> {
276+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isBetweenWhenPresent(value1).and(it))
277+
}
274278

275279
infix fun <T : Any> BindableColumn<T>.isNotBetween(value1: T) =
276-
InfixNotBetweenBuilder(value1) { invoke(it) }
280+
SecondValueCollector<T> {
281+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotBetween(value1).and(it))
282+
}
277283

278284
infix fun <T : Any> BindableColumn<T>.isNotBetweenWhenPresent(value1: T?) =
279-
InfixNotBetweenWhenPresentBuilder(value1) { invoke(it) }
285+
NullableSecondValueCollector<T> {
286+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotBetweenWhenPresent(value1).and(it))
287+
}
280288

281289
// for string columns, but generic for columns with type handlers
282290
infix fun <T : Any> BindableColumn<T>.isLike(value: T) =
@@ -332,3 +340,11 @@ class GroupingCriteriaCollector {
332340
infix fun BindableColumn<String>.isNotInCaseInsensitiveWhenPresent(values: Collection<String?>?) =
333341
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInCaseInsensitiveWhenPresent(values))
334342
}
343+
344+
class SecondValueCollector<T> (private val consumer: (T) -> Unit) {
345+
infix fun and(value2: T) = consumer.invoke(value2)
346+
}
347+
348+
class NullableSecondValueCollector<T> (private val consumer: (T?) -> Unit) {
349+
infix fun and(value2: T?) = consumer.invoke(value2)
350+
}

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

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/test/kotlin/examples/kotlin/spring/canonical/InfixSubQueriesTest.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ open class InfixSubQueriesTest {
4747
val selectStatement = select(id, firstName, lastName, birthDate, employed, occupation, addressId) {
4848
from(person)
4949
where {
50-
id isEqualToSubQuery {
50+
id isEqualTo {
5151
select(max(id)) {
5252
from(person)
5353
}
@@ -78,7 +78,7 @@ open class InfixSubQueriesTest {
7878
fun testSelectNotEqualSubQuery() {
7979
val selectStatement = select(id, firstName, lastName, birthDate, employed, occupation, addressId) {
8080
from(person)
81-
where { id isNotEqualToSubQuery {
81+
where { id isNotEqualTo {
8282
select(max(id)) {
8383
from(person)
8484
}
@@ -184,7 +184,7 @@ open class InfixSubQueriesTest {
184184
val selectStatement = select(id, firstName, lastName, birthDate, employed, occupation, addressId) {
185185
from(person)
186186
where {
187-
id isLessThanSubQuery {
187+
id isLessThan {
188188
select(max(id)) {
189189
from(person)
190190
}
@@ -218,7 +218,7 @@ open class InfixSubQueriesTest {
218218
val selectStatement = select(id, firstName, lastName, birthDate, employed, occupation, addressId) {
219219
from(person)
220220
where {
221-
id isLessThanOrEqualToSubQuery {
221+
id isLessThanOrEqualTo {
222222
select(max(id)) {
223223
from(person)
224224
}
@@ -252,7 +252,7 @@ open class InfixSubQueriesTest {
252252
val selectStatement = select(id, firstName, lastName, birthDate, employed, occupation, addressId) {
253253
from(person)
254254
where {
255-
id isGreaterThanSubQuery {
255+
id isGreaterThan {
256256
select(min(id)) {
257257
from(person)
258258
}
@@ -286,7 +286,7 @@ open class InfixSubQueriesTest {
286286
val selectStatement = select(id, firstName, lastName, birthDate, employed, occupation, addressId) {
287287
from(person)
288288
where {
289-
id isGreaterThanOrEqualToSubQuery {
289+
id isGreaterThanOrEqualTo {
290290
select(min(id)) {
291291
from(person)
292292
}

0 commit comments

Comments
 (0)