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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy