Skip to content

Commit eb4ab2c

Browse files
committed
Better usage of Kotlin self type
1 parent b23d9a3 commit eb4ab2c

File tree

5 files changed

+86
-81
lines changed

5 files changed

+86
-81
lines changed

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

Lines changed: 82 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -24,85 +24,90 @@ import org.mybatis.dynamic.sql.util.Buildable
2424
import org.mybatis.dynamic.sql.where.AbstractWhereDSL
2525

2626
abstract class KotlinBaseBuilder<M, W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<M, W, B>> : Buildable<M> {
27-
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>): B {
28-
getWhere().where(column, condition)
29-
return getThis()
30-
}
31-
32-
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B {
33-
getWhere().where(column, condition, collect)
34-
return getThis()
35-
}
36-
37-
fun applyWhere(whereApplier: WhereApplier): B {
38-
getWhere().applyWhere(whereApplier)
39-
return getThis()
40-
}
41-
42-
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>): B {
43-
getWhere().and(column, condition)
44-
return getThis()
45-
}
46-
47-
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B {
48-
getWhere().and(column, condition, collect)
49-
return getThis()
50-
}
51-
52-
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>): B {
53-
getWhere().or(column, condition)
54-
return getThis()
55-
}
56-
57-
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B {
58-
getWhere().or(column, condition, collect)
59-
return getThis()
60-
}
27+
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
28+
applySelf {
29+
getWhere().where(column, condition)
30+
}
31+
32+
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
33+
applySelf {
34+
getWhere().where(column, condition, collect)
35+
}
36+
37+
fun applyWhere(whereApplier: WhereApplier): B =
38+
applySelf {
39+
getWhere().applyWhere(whereApplier)
40+
}
41+
42+
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
43+
applySelf {
44+
getWhere().and(column, condition)
45+
}
46+
47+
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
48+
applySelf {
49+
getWhere().and(column, condition, collect)
50+
}
51+
52+
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
53+
applySelf {
54+
getWhere().or(column, condition)
55+
}
56+
57+
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
58+
applySelf {
59+
getWhere().or(column, condition, collect)
60+
}
61+
62+
protected fun applySelf(block: B.() -> Unit): B =
63+
self().apply { block() }
64+
65+
protected abstract fun self(): B
6166

6267
protected abstract fun getWhere(): W
63-
protected abstract fun getThis(): B
6468
}
6569

66-
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, SelectModel>, W: AbstractWhereDSL<W>, B : KotlinBaseJoiningBuilder<T, W, B>>(private val dsl: AbstractQueryExpressionDSL<T, SelectModel>) :
67-
KotlinBaseBuilder<SelectModel, W, B>() {
68-
69-
fun join(table: SqlTable, receiver: JoinReceiver) =
70-
apply {
71-
dsl.join(table, receiver)
72-
}
73-
74-
fun join(table: SqlTable, alias: String, receiver: JoinReceiver) =
75-
apply {
76-
dsl.join(table, alias, receiver)
77-
}
78-
79-
fun fullJoin(table: SqlTable, receiver: JoinReceiver) =
80-
apply {
81-
dsl.fullJoin(table, receiver)
82-
}
83-
84-
fun fullJoin(table: SqlTable, alias: String, receiver: JoinReceiver) =
85-
apply {
86-
dsl.fullJoin(table, alias, receiver)
87-
}
88-
89-
fun leftJoin(table: SqlTable, receiver: JoinReceiver) =
90-
apply {
91-
dsl.leftJoin(table, receiver)
92-
}
93-
94-
fun leftJoin(table: SqlTable, alias: String, receiver: JoinReceiver) =
95-
apply {
96-
dsl.leftJoin(table, alias, receiver)
97-
}
98-
99-
fun rightJoin(table: SqlTable, receiver: JoinReceiver) =
100-
apply {
101-
dsl.rightJoin(table, receiver)
102-
}
103-
104-
fun rightJoin(table: SqlTable, alias: String, receiver: JoinReceiver) =
105-
apply {
106-
dsl.rightJoin(table, alias, receiver)
107-
}
70+
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, SelectModel>, W : AbstractWhereDSL<W>, B : KotlinBaseJoiningBuilder<T, W, B>>(
71+
private val dsl: AbstractQueryExpressionDSL<T, SelectModel>
72+
) : KotlinBaseBuilder<SelectModel, W, B>() {
73+
74+
fun join(table: SqlTable, receiver: JoinReceiver): B =
75+
applySelf {
76+
dsl.join(table, receiver)
77+
}
78+
79+
fun join(table: SqlTable, alias: String, receiver: JoinReceiver): B =
80+
applySelf {
81+
dsl.join(table, alias, receiver)
82+
}
83+
84+
fun fullJoin(table: SqlTable, receiver: JoinReceiver): B =
85+
applySelf {
86+
dsl.fullJoin(table, receiver)
87+
}
88+
89+
fun fullJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
90+
applySelf {
91+
dsl.fullJoin(table, alias, receiver)
92+
}
93+
94+
fun leftJoin(table: SqlTable, receiver: JoinReceiver): B =
95+
applySelf {
96+
dsl.leftJoin(table, receiver)
97+
}
98+
99+
fun leftJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
100+
applySelf {
101+
dsl.leftJoin(table, alias, receiver)
102+
}
103+
104+
fun rightJoin(table: SqlTable, receiver: JoinReceiver): B =
105+
applySelf {
106+
dsl.rightJoin(table, receiver)
107+
}
108+
109+
fun rightJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
110+
applySelf {
111+
dsl.rightJoin(table, alias, receiver)
112+
}
108113
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ class KotlinCountBuilder(private val dsl: CountDSL<SelectModel>) :
3030

3131
override fun getWhere(): CountDSL<SelectModel>.CountWhereBuilder = dsl.where()
3232

33-
override fun getThis() = this
33+
override fun self() = this
3434
}

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
@@ -30,5 +30,5 @@ class KotlinDeleteBuilder(private val dsl: DeleteDSL<DeleteModel>) :
3030

3131
override fun getWhere(): DeleteDSL<DeleteModel>.DeleteWhereBuilder = dsl.where()
3232

33-
override fun getThis(): KotlinDeleteBuilder = this
33+
override fun self() = this
3434
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,5 @@ class KotlinQueryBuilder(private val dsl: QueryExpressionDSL<SelectModel>) :
5454

5555
override fun getWhere(): QueryExpressionDSL<SelectModel>.QueryExpressionWhereBuilder = dsl.where()
5656

57-
override fun getThis() = this
57+
override fun self() = this
5858
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ class KotlinUpdateBuilder(private val dsl: UpdateDSL<UpdateModel>) :
3838

3939
override fun getWhere(): UpdateDSL<UpdateModel>.UpdateWhereBuilder = dsl.where()
4040

41-
override fun getThis(): KotlinUpdateBuilder = this
41+
override fun self() = this
4242
}

0 commit comments

Comments
 (0)