Skip to content

Commit 544aaf7

Browse files
authored
Merge pull request #781 from jeffgbutler/array-methods
Add Array Based Methods to Kotlin DSL
2 parents ad48f44 + 2a8bda0 commit 544aaf7

File tree

7 files changed

+326
-15
lines changed

7 files changed

+326
-15
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ types - which is a rare usage. Please let us know if this causes an undo hardshi
6565
as rendering empty lists). This change should be transparent to users unless they have implemented custom conditions.
6666
4. Added a configuration setting to allow empty list conditions to render. This could generate invalid SQL, but might be
6767
a good safety measure in some cases.
68+
5. Added Array based functions for the "in" and "not in" conditions in the Kotlin DSL. These functions allow a more
69+
natural use of an Array as an input for an "in" condition. They also allow easy reuse of a vararg argument in a
70+
function. ([#781](https://github.com/mybatis/mybatis-dynamic-sql/pull/781))
6871

6972
## Release 1.5.0 - April 21, 2023
7073

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

+32
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,10 @@ open class GroupingCriteriaCollector : SubCriteriaCollector() {
317317

318318
fun <T> BindableColumn<T>.isIn(vararg values: T & Any) = isIn(values.asList())
319319

320+
@JvmName("isInArray")
321+
infix fun <T> BindableColumn<T>.isIn(values: Array<out T & Any>) =
322+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isIn(values))
323+
320324
infix fun <T> BindableColumn<T>.isIn(values: Collection<T & Any>) =
321325
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isIn(values))
322326

@@ -325,11 +329,19 @@ open class GroupingCriteriaCollector : SubCriteriaCollector() {
325329

326330
fun <T> BindableColumn<T>.isInWhenPresent(vararg values: T?) = isInWhenPresent(values.asList())
327331

332+
@JvmName("isInArrayWhenPresent")
333+
infix fun <T> BindableColumn<T>.isInWhenPresent(values: Array<out T?>?) =
334+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isInWhenPresent(values))
335+
328336
infix fun <T> BindableColumn<T>.isInWhenPresent(values: Collection<T?>?) =
329337
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isInWhenPresent(values))
330338

331339
fun <T> BindableColumn<T>.isNotIn(vararg values: T & Any) = isNotIn(values.asList())
332340

341+
@JvmName("isNotInArray")
342+
infix fun <T> BindableColumn<T>.isNotIn(values: Array<out T & Any>) =
343+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotIn(values))
344+
333345
infix fun <T> BindableColumn<T>.isNotIn(values: Collection<T & Any>) =
334346
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotIn(values))
335347

@@ -338,6 +350,10 @@ open class GroupingCriteriaCollector : SubCriteriaCollector() {
338350

339351
fun <T> BindableColumn<T>.isNotInWhenPresent(vararg values: T?) = isNotInWhenPresent(values.asList())
340352

353+
@JvmName("isNotInArrayWhenPresent")
354+
infix fun <T> BindableColumn<T>.isNotInWhenPresent(values: Array<out T?>?) =
355+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInWhenPresent(values))
356+
341357
infix fun <T> BindableColumn<T>.isNotInWhenPresent(values: Collection<T?>?) =
342358
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInWhenPresent(values))
343359

@@ -394,24 +410,40 @@ open class GroupingCriteriaCollector : SubCriteriaCollector() {
394410

395411
fun BindableColumn<String>.isInCaseInsensitive(vararg values: String) = isInCaseInsensitive(values.asList())
396412

413+
@JvmName("isInArrayCaseInsensitive")
414+
infix fun BindableColumn<String>.isInCaseInsensitive(values: Array<out String>) =
415+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isInCaseInsensitive(values))
416+
397417
infix fun BindableColumn<String>.isInCaseInsensitive(values: Collection<String>) =
398418
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isInCaseInsensitive(values))
399419

400420
fun BindableColumn<String>.isInCaseInsensitiveWhenPresent(vararg values: String?) =
401421
isInCaseInsensitiveWhenPresent(values.asList())
402422

423+
@JvmName("isInArrayCaseInsensitiveWhenPresent")
424+
infix fun BindableColumn<String>.isInCaseInsensitiveWhenPresent(values: Array<out String?>?) =
425+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isInCaseInsensitiveWhenPresent(values))
426+
403427
infix fun BindableColumn<String>.isInCaseInsensitiveWhenPresent(values: Collection<String?>?) =
404428
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isInCaseInsensitiveWhenPresent(values))
405429

406430
fun BindableColumn<String>.isNotInCaseInsensitive(vararg values: String) =
407431
isNotInCaseInsensitive(values.asList())
408432

433+
@JvmName("isNotInArrayCaseInsensitive")
434+
infix fun BindableColumn<String>.isNotInCaseInsensitive(values: Array<out String>) =
435+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInCaseInsensitive(values))
436+
409437
infix fun BindableColumn<String>.isNotInCaseInsensitive(values: Collection<String>) =
410438
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInCaseInsensitive(values))
411439

412440
fun BindableColumn<String>.isNotInCaseInsensitiveWhenPresent(vararg values: String?) =
413441
isNotInCaseInsensitiveWhenPresent(values.asList())
414442

443+
@JvmName("isNotInArrayCaseInsensitiveWhenPresent")
444+
infix fun BindableColumn<String>.isNotInCaseInsensitiveWhenPresent(values: Array<out String?>?) =
445+
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInCaseInsensitiveWhenPresent(values))
446+
415447
infix fun BindableColumn<String>.isNotInCaseInsensitiveWhenPresent(values: Collection<String?>?) =
416448
invoke(org.mybatis.dynamic.sql.util.kotlin.elements.isNotInCaseInsensitiveWhenPresent(values))
417449

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

+27
Original file line numberDiff line numberDiff line change
@@ -262,24 +262,36 @@ fun <T> isLessThanOrEqualToWhenPresent(value: T?): IsLessThanOrEqualTo<T> =
262262

263263
fun <T> isIn(vararg values: T & Any): IsIn<T> = isIn(values.asList())
264264

265+
@JvmName("isInArray")
266+
fun <T> isIn(values: Array<out T & Any>): IsIn<T> = SqlBuilder.isIn(values.asList())
267+
265268
fun <T> isIn(values: Collection<T & Any>): IsIn<T> = SqlBuilder.isIn(values)
266269

267270
fun <T> isIn(subQuery: KotlinSubQueryBuilder.() -> Unit): IsInWithSubselect<T> =
268271
SqlBuilder.isIn(KotlinSubQueryBuilder().apply(subQuery))
269272

270273
fun <T> isInWhenPresent(vararg values: T?): IsIn<T> = isInWhenPresent(values.asList())
271274

275+
@JvmName("isInArrayWhenPresent")
276+
fun <T> isInWhenPresent(values: Array<out T?>?): IsIn<T> = SqlBuilder.isInWhenPresent(values?.asList())
277+
272278
fun <T> isInWhenPresent(values: Collection<T?>?): IsIn<T> = SqlBuilder.isInWhenPresent(values)
273279

274280
fun <T> isNotIn(vararg values: T & Any): IsNotIn<T> = isNotIn(values.asList())
275281

282+
@JvmName("isNotInArray")
283+
fun <T> isNotIn(values: Array<out T & Any>): IsNotIn<T> = SqlBuilder.isNotIn(values.asList())
284+
276285
fun <T> isNotIn(values: Collection<T & Any>): IsNotIn<T> = SqlBuilder.isNotIn(values)
277286

278287
fun <T> isNotIn(subQuery: KotlinSubQueryBuilder.() -> Unit): IsNotInWithSubselect<T> =
279288
SqlBuilder.isNotIn(KotlinSubQueryBuilder().apply(subQuery))
280289

281290
fun <T> isNotInWhenPresent(vararg values: T?): IsNotIn<T> = isNotInWhenPresent(values.asList())
282291

292+
@JvmName("isNotInArrayWhenPresent")
293+
fun <T> isNotInWhenPresent(values: Array<out T?>?): IsNotIn<T> = SqlBuilder.isNotInWhenPresent(values?.asList())
294+
283295
fun <T> isNotInWhenPresent(values: Collection<T?>?): IsNotIn<T> = SqlBuilder.isNotInWhenPresent(values)
284296

285297
fun <T> isBetween(value1: T & Any): BetweenBuilder<T & Any> = BetweenBuilder(value1)
@@ -318,22 +330,37 @@ fun isNotLikeCaseInsensitiveWhenPresent(value: String?): IsNotLikeCaseInsensitiv
318330

319331
fun isInCaseInsensitive(vararg values: String): IsInCaseInsensitive = isInCaseInsensitive(values.asList())
320332

333+
@JvmName("isInArrayCaseInsensitive")
334+
fun isInCaseInsensitive(values: Array<out String>): IsInCaseInsensitive = SqlBuilder.isInCaseInsensitive(values.asList())
335+
321336
fun isInCaseInsensitive(values: Collection<String>): IsInCaseInsensitive = SqlBuilder.isInCaseInsensitive(values)
322337

323338
fun isInCaseInsensitiveWhenPresent(vararg values: String?): IsInCaseInsensitive =
324339
isInCaseInsensitiveWhenPresent(values.asList())
325340

341+
@JvmName("isInArrayCaseInsensitiveWhenPresent")
342+
fun isInCaseInsensitiveWhenPresent(values: Array<out String?>?): IsInCaseInsensitive =
343+
SqlBuilder.isInCaseInsensitiveWhenPresent(values?.asList())
344+
326345
fun isInCaseInsensitiveWhenPresent(values: Collection<String?>?): IsInCaseInsensitive =
327346
SqlBuilder.isInCaseInsensitiveWhenPresent(values)
328347

329348
fun isNotInCaseInsensitive(vararg values: String): IsNotInCaseInsensitive = isNotInCaseInsensitive(values.asList())
330349

350+
@JvmName("isNotInArrayCaseInsensitive")
351+
fun isNotInCaseInsensitive(values: Array<out String>): IsNotInCaseInsensitive =
352+
SqlBuilder.isNotInCaseInsensitive(values.asList())
353+
331354
fun isNotInCaseInsensitive(values: Collection<String>): IsNotInCaseInsensitive =
332355
SqlBuilder.isNotInCaseInsensitive(values)
333356

334357
fun isNotInCaseInsensitiveWhenPresent(vararg values: String?): IsNotInCaseInsensitive =
335358
isNotInCaseInsensitiveWhenPresent(values.asList())
336359

360+
@JvmName("isNotInArrayCaseInsensitiveWhenPresent")
361+
fun isNotInCaseInsensitiveWhenPresent(values: Array<out String?>?): IsNotInCaseInsensitive =
362+
SqlBuilder.isNotInCaseInsensitiveWhenPresent(values?.asList())
363+
337364
fun isNotInCaseInsensitiveWhenPresent(values: Collection<String?>?): IsNotInCaseInsensitive =
338365
SqlBuilder.isNotInCaseInsensitiveWhenPresent(values)
339366

src/site/markdown/docs/kotlinWhereClauses.md

+7-6
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,10 @@ where clauses with and/or/not phrases. See the following example of a complex wh
8585
select(foo) {
8686
from(bar)
8787
where {
88-
id isEqualTo 3
89-
and { id isEqualTo 4 }
88+
id isEqualTo 3
89+
or { id isEqualTo 4 }
90+
and { not { id isEqualTo 6 } }
9091
}
91-
or { id isEqualTo 4 }
92-
and { not { id isEqualTo 6 } }
9392
}
9493
```
9594

@@ -215,8 +214,10 @@ These criteria should be updated by moving the column and condition into a lambd
215214
```kotlin
216215
select(foo) {
217216
from(bar)
218-
where { id isEqualTo 3 }
219-
or { id isEqualTo 4 }
217+
where {
218+
id isEqualTo 3
219+
or { id isEqualTo 4 }
220+
}
220221
}
221222
```
222223

0 commit comments

Comments
 (0)