Skip to content

Commit e730889

Browse files
committed
Merge branch 'remove-extensions' into subquery-in-join
# Conflicts: # src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/AbstractQueryExpressionDSLExtensions.kt # src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinBaseBuilders.kt
2 parents cb24960 + 899a9cd commit e730889

File tree

17 files changed

+461
-295
lines changed

17 files changed

+461
-295
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ For example, a typical search can be coded with a query like this (the following
2020

2121
```kotlin
2222
fun search(id: String?, firstName: String?, lastName: String?) =
23-
select(Customer.id, Customer.firstName, Customer.lastName).from(Customer) {
23+
select(Customer.id, Customer.firstName, Customer.lastName) {
24+
from(Customer)
2425
where(Customer.active, isEqualTo(true))
2526
and(Customer.id, isEqualToWhenPresent(id).then{ it?.padStart(5, '0') })
2627
and(Customer.firstName, isLikeCaseInsensitiveWhenPresent(firstName)

src/main/java/org/mybatis/dynamic/sql/insert/InsertSelectDSL.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
import java.util.List;
2020
import java.util.Objects;
2121

22+
import org.jetbrains.annotations.NotNull;
2223
import org.mybatis.dynamic.sql.SqlColumn;
2324
import org.mybatis.dynamic.sql.SqlTable;
2425
import org.mybatis.dynamic.sql.select.SelectModel;
2526
import org.mybatis.dynamic.sql.util.Buildable;
2627

27-
public class InsertSelectDSL {
28+
public class InsertSelectDSL implements Buildable<InsertSelectModel> {
2829

2930
private final SqlTable table;
3031
private final InsertColumnListModel columnList;
@@ -42,6 +43,8 @@ private InsertSelectDSL(SqlTable table, SelectModel selectModel) {
4243
this.columnList = null;
4344
}
4445

46+
@NotNull
47+
@Override
4548
public InsertSelectModel build() {
4649
return InsertSelectModel.withTable(table)
4750
.withColumnList(columnList)

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

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

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

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

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

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import org.mybatis.dynamic.sql.where.AbstractWhereDSL
2626
@DslMarker
2727
annotation class MyBatisDslMarker
2828

29+
typealias WhereApplier = AbstractWhereDSL<*>.() -> Unit
30+
2931
@MyBatisDslMarker
3032
@Suppress("TooManyFunctions")
3133
abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<W, B>> {
@@ -34,9 +36,9 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
3436
getWhere().where(column, condition)
3537
}
3638

37-
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
39+
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>, subCriteria: CriteriaReceiver): B =
3840
applySelf {
39-
getWhere().where(column, condition, collect)
41+
getWhere().where(column, condition, subCriteria(CriteriaCollector()).criteria)
4042
}
4143

4244
fun applyWhere(whereApplier: WhereApplier): B =
@@ -49,19 +51,19 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
4951
getWhere().and(column, condition)
5052
}
5153

52-
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
54+
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>, subCriteria: CriteriaReceiver): B =
5355
applySelf {
54-
getWhere().and(column, condition, collect)
56+
getWhere().and(column, condition, subCriteria(CriteriaCollector()).criteria)
5557
}
5658

5759
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
5860
applySelf {
5961
getWhere().or(column, condition)
6062
}
6163

62-
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
64+
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, subCriteria: CriteriaReceiver): B =
6365
applySelf {
64-
getWhere().or(column, condition, collect)
66+
getWhere().or(column, condition, subCriteria(CriteriaCollector()).criteria)
6567
}
6668

6769
fun allRows() = self()
@@ -77,56 +79,49 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
7779
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, SelectModel>, W : AbstractWhereDSL<W>,
7880
B : KotlinBaseJoiningBuilder<T, W, B>> : KotlinBaseBuilder<W, B>() {
7981

80-
fun join(table: SqlTable, receiver: JoinReceiver): B =
81-
applySelf {
82-
getDsl().join(table, receiver)
83-
}
84-
85-
fun join(table: SqlTable, alias: String, receiver: JoinReceiver): B =
86-
applySelf {
87-
getDsl().join(table, alias, receiver)
82+
fun join(table: SqlTable, joinCriteria: JoinReceiver) =
83+
applyJoin(joinCriteria) {
84+
getDsl().join(table, it.onJoinCriterion, it.andJoinCriteria)
8885
}
8986

90-
fun join(subQuery: KotlinQualifiedSubQueryBuilder.() -> KotlinQualifiedSubQueryBuilder, joinCriteria: JoinReceiver): B =
91-
applySelf {
92-
val builder = subQuery(KotlinQualifiedSubQueryBuilder())
93-
getDsl().join(builder, joinCriteria)
87+
fun join(table: SqlTable, alias: String, joinCriteria: JoinReceiver) =
88+
applyJoin(joinCriteria) {
89+
getDsl().join(table, alias, it.onJoinCriterion, it.andJoinCriteria)
9490
}
9591

96-
fun fullJoin(table: SqlTable, receiver: JoinReceiver): B =
97-
applySelf {
98-
getDsl().fullJoin(table, receiver)
92+
fun fullJoin(table: SqlTable, joinCriteria: JoinReceiver) =
93+
applyJoin(joinCriteria) {
94+
getDsl().fullJoin(table, it.onJoinCriterion, it.andJoinCriteria)
9995
}
10096

101-
fun fullJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
102-
applySelf {
103-
getDsl().fullJoin(table, alias, receiver)
97+
fun fullJoin(table: SqlTable, alias: String, joinCriteria: JoinReceiver) =
98+
applyJoin(joinCriteria) {
99+
getDsl().fullJoin(table, alias, it.onJoinCriterion, it.andJoinCriteria)
104100
}
105101

106-
fun fullJoin(subQuery: KotlinQualifiedSubQueryBuilder.() -> KotlinQualifiedSubQueryBuilder, receiver: JoinReceiver): B =
107-
applySelf {
108-
val builder = subQuery(KotlinQualifiedSubQueryBuilder())
109-
getDsl().fullJoin(builder, receiver)
102+
fun leftJoin(table: SqlTable, joinCriteria: JoinReceiver) =
103+
applyJoin(joinCriteria) {
104+
getDsl().leftJoin(table, it.onJoinCriterion, it.andJoinCriteria)
110105
}
111106

112-
fun leftJoin(table: SqlTable, receiver: JoinReceiver): B =
113-
applySelf {
114-
getDsl().leftJoin(table, receiver)
107+
fun leftJoin(table: SqlTable, alias: String, joinCriteria: JoinReceiver) =
108+
applyJoin(joinCriteria) {
109+
getDsl().leftJoin(table, alias, it.onJoinCriterion, it.andJoinCriteria)
115110
}
116111

117-
fun leftJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
118-
applySelf {
119-
getDsl().leftJoin(table, alias, receiver)
112+
fun rightJoin(table: SqlTable, joinCriteria: JoinReceiver) =
113+
applyJoin(joinCriteria) {
114+
getDsl().rightJoin(table, it.onJoinCriterion, it.andJoinCriteria)
120115
}
121116

122-
fun rightJoin(table: SqlTable, receiver: JoinReceiver): B =
123-
applySelf {
124-
getDsl().rightJoin(table, receiver)
117+
fun rightJoin(table: SqlTable, alias: String, joinCriteria: JoinReceiver) =
118+
applyJoin(joinCriteria) {
119+
getDsl().rightJoin(table, alias, it.onJoinCriterion, it.andJoinCriteria)
125120
}
126121

127-
fun rightJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
122+
private fun applyJoin(joinCriteria: JoinReceiver, block: (JoinCollector) -> Unit) =
128123
applySelf {
129-
getDsl().rightJoin(table, alias, receiver)
124+
joinCriteria(JoinCollector()).also(block)
130125
}
131126

132127
protected abstract fun getDsl(): AbstractQueryExpressionDSL<T, SelectModel>

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinCountBuilders.kt renamed to src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinCountBuilder.kt

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,11 @@ import org.mybatis.dynamic.sql.select.CountDSL
2020
import org.mybatis.dynamic.sql.select.SelectModel
2121
import org.mybatis.dynamic.sql.util.Buildable
2222

23-
typealias CountCompleter = KotlinCountBuilder.() -> Buildable<SelectModel>
23+
typealias CountCompleter = KotlinCountBuilder.() -> KotlinCountBuilder
2424

25-
typealias CountColumnCompleter = KotlinCountColumnBuilder.() -> Buildable<SelectModel>
26-
27-
class KotlinCountBuilder(private val dsl: CountDSL<SelectModel>) :
28-
KotlinBaseJoiningBuilder<CountDSL<SelectModel>, CountDSL<SelectModel>.CountWhereBuilder, KotlinCountBuilder>(),
29-
Buildable<SelectModel> {
30-
31-
override fun build(): SelectModel = getDsl().build()
32-
33-
override fun getWhere(): CountDSL<SelectModel>.CountWhereBuilder = getDsl().where()
34-
35-
override fun self() = this
36-
37-
override fun getDsl() = dsl
38-
}
39-
40-
class KotlinCountColumnBuilder(private val fromGatherer: CountDSL.FromGatherer<SelectModel>) :
25+
class KotlinCountBuilder(private val fromGatherer: CountDSL.FromGatherer<SelectModel>) :
4126
KotlinBaseJoiningBuilder<CountDSL<SelectModel>,
42-
CountDSL<SelectModel>.CountWhereBuilder, KotlinCountColumnBuilder>(),
27+
CountDSL<SelectModel>.CountWhereBuilder, KotlinCountBuilder>(),
4328
Buildable<SelectModel> {
4429

4530
private lateinit var dsl: CountDSL<SelectModel>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import org.mybatis.dynamic.sql.delete.DeleteDSL
1919
import org.mybatis.dynamic.sql.delete.DeleteModel
2020
import org.mybatis.dynamic.sql.util.Buildable
2121

22-
typealias DeleteCompleter = KotlinDeleteBuilder.() -> Buildable<DeleteModel>
22+
typealias DeleteCompleter = KotlinDeleteBuilder.() -> KotlinDeleteBuilder
2323

2424
class KotlinDeleteBuilder(private val dsl: DeleteDSL<DeleteModel>) :
2525
KotlinBaseBuilder<DeleteDSL<DeleteModel>.DeleteWhereBuilder, KotlinDeleteBuilder>(), Buildable<DeleteModel> {

0 commit comments

Comments
 (0)