Skip to content

Commit 4df9175

Browse files
committed
Update the Kotlin join syntax
1 parent 8495687 commit 4df9175

File tree

7 files changed

+85
-46
lines changed

7 files changed

+85
-46
lines changed

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

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

1818
import org.mybatis.dynamic.sql.BasicColumn
19+
import org.mybatis.dynamic.sql.SqlBuilder
1920
import org.mybatis.dynamic.sql.select.join.JoinCondition
2021
import org.mybatis.dynamic.sql.select.join.JoinCriterion
2122

@@ -27,6 +28,25 @@ class JoinCollector {
2728
val andJoinCriteria = mutableListOf<JoinCriterion>()
2829
private lateinit var internalOnCriterion: JoinCriterion
2930

31+
fun on(leftColumn: BasicColumn): RightColumnCollector = RightColumnCollector {
32+
internalOnCriterion = JoinCriterion.Builder()
33+
.withConnector("on")
34+
.withJoinColumn(leftColumn)
35+
.withJoinCondition(it)
36+
.build()
37+
}
38+
39+
fun and(leftColumn: BasicColumn): RightColumnCollector = RightColumnCollector {
40+
andJoinCriteria.add(
41+
JoinCriterion.Builder()
42+
.withConnector("and")
43+
.withJoinColumn(leftColumn)
44+
.withJoinCondition(it)
45+
.build()
46+
)
47+
}
48+
49+
@Deprecated("Please use: on(leftColumn) equalTo rightColumn")
3050
fun on(column: BasicColumn, condition: JoinCondition): JoinCollector =
3151
apply {
3252
internalOnCriterion = JoinCriterion.Builder()
@@ -36,6 +56,7 @@ class JoinCollector {
3656
.build()
3757
}
3858

59+
@Deprecated("Please use: and(leftColumn) equalTo rightColumn")
3960
fun and(column: BasicColumn, condition: JoinCondition): JoinCollector =
4061
apply {
4162
andJoinCriteria.add(
@@ -47,3 +68,7 @@ class JoinCollector {
4768
)
4869
}
4970
}
71+
72+
class RightColumnCollector(private val joinConditionConsumer: (JoinCondition) -> Unit) {
73+
infix fun equalTo(rightColumn: BasicColumn) = joinConditionConsumer.invoke(SqlBuilder.equalTo(rightColumn))
74+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ import org.mybatis.dynamic.sql.where.condition.IsNotNull
7676
import org.mybatis.dynamic.sql.where.condition.IsNull
7777

7878
// join support
79+
@Deprecated("Please use the infix function in the JoinCollector")
7980
fun equalTo(column: BasicColumn): EqualTo = SqlBuilder.equalTo(column)
8081

8182
// aggregate support

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import examples.kotlin.mybatis3.canonical.PersonDynamicSqlSupport.id
2424
import examples.kotlin.mybatis3.canonical.PersonDynamicSqlSupport.lastName
2525
import examples.kotlin.mybatis3.canonical.PersonDynamicSqlSupport.occupation
2626
import org.mybatis.dynamic.sql.util.kotlin.SelectCompleter
27-
import org.mybatis.dynamic.sql.util.kotlin.elements.equalTo
2827
import org.mybatis.dynamic.sql.util.kotlin.mybatis3.select
2928
import org.mybatis.dynamic.sql.util.kotlin.mybatis3.selectDistinct
3029

@@ -36,7 +35,7 @@ fun PersonWithAddressMapper.selectOne(completer: SelectCompleter): PersonWithAdd
3635
select(columnList) {
3736
from(person)
3837
fullJoin(address) {
39-
on(person.addressId, equalTo(address.id))
38+
on(person.addressId) equalTo address.id
4039
}
4140
completer()
4241
}.run(this::selectOne)
@@ -45,7 +44,7 @@ fun PersonWithAddressMapper.select(completer: SelectCompleter): List<PersonWithA
4544
select(columnList) {
4645
from(person, "p")
4746
fullJoin(address) {
48-
on(person.addressId, equalTo(address.id))
47+
on(person.addressId) equalTo address.id
4948
}
5049
completer()
5150
}.run(this::selectMany)
@@ -54,7 +53,7 @@ fun PersonWithAddressMapper.selectDistinct(completer: SelectCompleter): List<Per
5453
selectDistinct(columnList) {
5554
from(person)
5655
fullJoin(address) {
57-
on(person.addressId, equalTo(address.id))
56+
on(person.addressId) equalTo address.id
5857
}
5958
completer()
6059
}.run(this::selectMany)

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import org.assertj.core.api.Assertions.assertThat
4242
import org.assertj.core.api.Assertions.assertThatExceptionOfType
4343
import org.junit.jupiter.api.Test
4444
import org.mybatis.dynamic.sql.util.kotlin.elements.count
45-
import org.mybatis.dynamic.sql.util.kotlin.elements.equalTo
4645
import org.mybatis.dynamic.sql.util.kotlin.elements.insert
4746
import org.mybatis.dynamic.sql.util.kotlin.elements.insertMultiple
4847
import org.mybatis.dynamic.sql.util.kotlin.mybatis3.count
@@ -453,7 +452,7 @@ class GeneralKotlinTest {
453452
) {
454453
from(person)
455454
join(address) {
456-
on(addressId, equalTo(address.id))
455+
on(addressId) equalTo address.id
457456
}
458457
where { id isLessThan 4 }
459458
orderBy(id)
@@ -489,7 +488,7 @@ class GeneralKotlinTest {
489488
) {
490489
from(person)
491490
join(address) {
492-
on(addressId, equalTo(address.id))
491+
on(addressId) equalTo address.id
493492
}
494493
where { id isLessThan 5 }
495494
and {
@@ -530,7 +529,7 @@ class GeneralKotlinTest {
530529
) {
531530
from(person)
532531
join(address) {
533-
on(addressId, equalTo(address.id))
532+
on(addressId) equalTo address.id
534533
}
535534
where { id isEqualTo 5 }
536535
or {

src/test/kotlin/examples/kotlin/mybatis3/joins/JoinMapperTest.kt

Lines changed: 51 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class JoinMapperTest {
6565
) {
6666
from(orderMaster, "om")
6767
join(orderDetail, "od") {
68-
on(orderMaster.orderId, equalTo(orderDetail.orderId))
68+
on(orderMaster.orderId) equalTo orderDetail.orderId
6969
}
7070
}
7171

@@ -102,8 +102,8 @@ class JoinMapperTest {
102102
) {
103103
from(orderMaster, "om")
104104
join(orderDetail, "od") {
105-
on(orderMaster.orderId, equalTo(orderDetail.orderId))
106-
and(orderMaster.orderId, equalTo(orderDetail.orderId))
105+
on(orderMaster.orderId) equalTo orderDetail.orderId
106+
and(orderMaster.orderId) equalTo orderDetail.orderId
107107
}
108108
}
109109

@@ -121,8 +121,8 @@ class JoinMapperTest {
121121
) {
122122
from(orderMaster, "om")
123123
join(orderDetail, "od") {
124-
on(orderMaster.orderId, equalTo(orderDetail.orderId))
125-
and(orderMaster.orderId, equalTo(orderDetail.orderId))
124+
on(orderMaster.orderId) equalTo orderDetail.orderId
125+
and(orderMaster.orderId) equalTo orderDetail.orderId
126126
}
127127
where { orderMaster.orderId isEqualTo 1 }
128128
}
@@ -133,6 +133,27 @@ class JoinMapperTest {
133133
assertThat(selectStatement.selectStatement).isEqualTo(expectedStatement)
134134
}
135135

136+
@Test
137+
fun testDeprecatedJoin() {
138+
// this is a nonsensical join, but it does test the "and" capability
139+
val selectStatement = select(
140+
orderMaster.orderId, orderMaster.orderDate, orderDetail.lineNumber,
141+
orderDetail.description, orderDetail.quantity
142+
) {
143+
from(orderMaster, "om")
144+
join(orderDetail, "od") {
145+
on(orderMaster.orderId, equalTo(orderDetail.orderId))
146+
and(orderMaster.orderId, equalTo(orderDetail.orderId))
147+
}
148+
where { orderMaster.orderId isEqualTo 1 }
149+
}
150+
151+
val expectedStatement = "select om.order_id, om.order_date, od.line_number, od.description, od.quantity" +
152+
" from OrderMaster om join OrderDetail od on om.order_id = od.order_id and om.order_id = od.order_id" +
153+
" where om.order_id = #{parameters.p1,jdbcType=INTEGER}"
154+
assertThat(selectStatement.selectStatement).isEqualTo(expectedStatement)
155+
}
156+
136157
@Test
137158
fun testMultipleTableJoinWithWhereClause() {
138159
newSession().use { session ->
@@ -144,10 +165,10 @@ class JoinMapperTest {
144165
) {
145166
from(orderMaster, "om")
146167
join(orderLine, "ol") {
147-
on(orderMaster.orderId, equalTo(orderLine.orderId))
168+
on(orderMaster.orderId) equalTo orderLine.orderId
148169
}
149170
join(itemMaster, "im") {
150-
on(orderLine.itemId, equalTo(itemMaster.itemId))
171+
on(orderLine.itemId) equalTo itemMaster.itemId
151172
}
152173
where { orderMaster.orderId isEqualTo 2 }
153174
}
@@ -180,10 +201,10 @@ class JoinMapperTest {
180201
) {
181202
from(orderMaster, "om")
182203
join(orderLine, "ol") {
183-
on(orderMaster.orderId, equalTo(orderLine.orderId))
204+
on(orderMaster.orderId) equalTo orderLine.orderId
184205
}
185206
fullJoin(itemMaster, "im") {
186-
on(orderLine.itemId, equalTo(itemMaster.itemId))
207+
on(orderLine.itemId) equalTo itemMaster.itemId
187208
}
188209
orderBy(orderLine.orderId, itemMaster.itemId)
189210
}
@@ -255,10 +276,8 @@ class JoinMapperTest {
255276
+ "ol"
256277
},
257278
joinCriteria = {
258-
on(
259-
orderMaster.orderId.qualifiedWith("om"),
260-
equalTo(orderLine.orderId.qualifiedWith("ol"))
261-
)
279+
on(orderMaster.orderId.qualifiedWith("om")) equalTo
280+
orderLine.orderId.qualifiedWith("ol")
262281
}
263282
)
264283
fullJoin(
@@ -269,10 +288,8 @@ class JoinMapperTest {
269288
+ "im"
270289
}
271290
) {
272-
on(
273-
orderLine.itemId.qualifiedWith("ol"),
274-
equalTo(itemMaster.itemId.qualifiedWith("im"))
275-
)
291+
on(orderLine.itemId.qualifiedWith("ol")) equalTo
292+
itemMaster.itemId.qualifiedWith("im")
276293
}
277294
orderBy(orderLine.orderId, itemMaster.itemId)
278295
}
@@ -331,10 +348,10 @@ class JoinMapperTest {
331348
) {
332349
from(orderMaster, "om")
333350
join(orderLine, "ol") {
334-
on(orderMaster.orderId, equalTo(orderLine.orderId))
351+
on(orderMaster.orderId) equalTo orderLine.orderId
335352
}
336353
fullJoin(itemMaster) {
337-
on(orderLine.itemId, equalTo(itemMaster.itemId))
354+
on(orderLine.itemId) equalTo itemMaster.itemId
338355
}
339356
orderBy(orderLine.orderId, itemMaster.itemId)
340357
}
@@ -379,10 +396,10 @@ class JoinMapperTest {
379396
) {
380397
from(orderMaster, "om")
381398
join(orderLine, "ol") {
382-
on(orderMaster.orderId, equalTo(orderLine.orderId))
399+
on(orderMaster.orderId) equalTo orderLine.orderId
383400
}
384401
leftJoin(itemMaster, "im") {
385-
on(orderLine.itemId, equalTo(itemMaster.itemId))
402+
on(orderLine.itemId) equalTo itemMaster.itemId
386403
}
387404
orderBy(orderLine.orderId, itemMaster.itemId)
388405
}
@@ -423,7 +440,7 @@ class JoinMapperTest {
423440
) {
424441
from(orderMaster, "om")
425442
join(orderLine, "ol") {
426-
on(orderMaster.orderId, equalTo(orderLine.orderId))
443+
on(orderMaster.orderId) equalTo orderLine.orderId
427444
}
428445
leftJoin(
429446
{
@@ -433,7 +450,7 @@ class JoinMapperTest {
433450
+ "im"
434451
}
435452
) {
436-
on(orderLine.itemId, equalTo(itemMaster.itemId.qualifiedWith("im")))
453+
on(orderLine.itemId) equalTo itemMaster.itemId.qualifiedWith("im")
437454
}
438455
orderBy(orderLine.orderId, itemMaster.itemId)
439456
}
@@ -473,10 +490,10 @@ class JoinMapperTest {
473490
) {
474491
from(orderMaster, "om")
475492
join(orderLine, "ol") {
476-
on(orderMaster.orderId, equalTo(orderLine.orderId))
493+
on(orderMaster.orderId) equalTo orderLine.orderId
477494
}
478495
leftJoin(itemMaster) {
479-
on(orderLine.itemId, equalTo(itemMaster.itemId))
496+
on(orderLine.itemId) equalTo itemMaster.itemId
480497
}
481498
orderBy(orderLine.orderId, itemMaster.itemId)
482499
}
@@ -516,10 +533,10 @@ class JoinMapperTest {
516533
) {
517534
from(orderMaster, "om")
518535
join(orderLine, "ol") {
519-
on(orderMaster.orderId, equalTo(orderLine.orderId))
536+
on(orderMaster.orderId) equalTo orderLine.orderId
520537
}
521538
rightJoin(itemMaster, "im") {
522-
on(orderLine.itemId, equalTo(itemMaster.itemId))
539+
on(orderLine.itemId) equalTo itemMaster.itemId
523540
}
524541
orderBy(orderLine.orderId, itemMaster.itemId)
525542
}
@@ -560,7 +577,7 @@ class JoinMapperTest {
560577
) {
561578
from(orderMaster, "om")
562579
join(orderLine, "ol") {
563-
on(orderMaster.orderId, equalTo(orderLine.orderId))
580+
on(orderMaster.orderId) equalTo orderLine.orderId
564581
}
565582
rightJoin(
566583
{
@@ -570,7 +587,7 @@ class JoinMapperTest {
570587
+ "im"
571588
}
572589
) {
573-
on(orderLine.itemId, equalTo(itemMaster.itemId.qualifiedWith("im")))
590+
on(orderLine.itemId) equalTo itemMaster.itemId.qualifiedWith("im")
574591
}
575592
orderBy(orderLine.orderId, itemMaster.itemId)
576593
}
@@ -610,10 +627,10 @@ class JoinMapperTest {
610627
) {
611628
from(orderMaster, "om")
612629
join(orderLine, "ol") {
613-
on(orderMaster.orderId, equalTo(orderLine.orderId))
630+
on(orderMaster.orderId) equalTo orderLine.orderId
614631
}
615632
rightJoin(itemMaster) {
616-
on(orderLine.itemId, equalTo(itemMaster.itemId))
633+
on(orderLine.itemId) equalTo itemMaster.itemId
617634
}
618635
orderBy(orderLine.orderId, itemMaster.itemId)
619636
}
@@ -655,7 +672,7 @@ class JoinMapperTest {
655672
val selectStatement = select(user.userId, user.userName, user.parentId) {
656673
from(user, "u1")
657674
join(user2, "u2") {
658-
on(user.userId, equalTo(user2.parentId))
675+
on(user.userId) equalTo user2.parentId
659676
}
660677
where { user2.userId isEqualTo 4 }
661678
}
@@ -686,7 +703,7 @@ class JoinMapperTest {
686703
val selectStatement = select(user.userId, user.userName, user.parentId) {
687704
from(user)
688705
join(user2) {
689-
on(user.userId, equalTo(user2.parentId))
706+
on(user.userId) equalTo user2.parentId
690707
}
691708
where { user2.userId isEqualTo 4 }
692709
}
@@ -718,7 +735,7 @@ class JoinMapperTest {
718735
val selectStatement = select(user.userId, user.userName, user.parentId) {
719736
from(user, "u1")
720737
join(user2, "u2") {
721-
on(user.userId, equalTo(user2.parentId))
738+
on(user.userId) equalTo user2.parentId
722739
}
723740
where { user2.userId isEqualTo 4 }
724741
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import org.assertj.core.api.Assertions.assertThat
2929
import org.junit.jupiter.api.Test
3030
import org.mybatis.dynamic.sql.util.kotlin.elements.add
3131
import org.mybatis.dynamic.sql.util.kotlin.elements.constant
32-
import org.mybatis.dynamic.sql.util.kotlin.elements.equalTo
3332
import org.mybatis.dynamic.sql.util.kotlin.spring.count
3433
import org.mybatis.dynamic.sql.util.kotlin.spring.countDistinct
3534
import org.mybatis.dynamic.sql.util.kotlin.spring.countFrom
@@ -524,7 +523,7 @@ open class CanonicalSpringKotlinTemplateDirectTest {
524523
) {
525524
from(person, "p")
526525
join(address, "a") {
527-
on(addressId, equalTo(address.id))
526+
on(addressId) equalTo address.id
528527
}
529528
where { id isLessThan 4 }
530529
orderBy(id)

0 commit comments

Comments
 (0)