Skip to content

Commit 2480ab2

Browse files
committed
Refactor the Kotlin Count Functions
Remove the private utility method and use function composition instead
1 parent 64e58e9 commit 2480ab2

File tree

6 files changed

+69
-89
lines changed

6 files changed

+69
-89
lines changed

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/KotlinModelBuilderFunctions.kt

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -23,52 +23,53 @@ import org.mybatis.dynamic.sql.insert.GeneralInsertDSL
2323
import org.mybatis.dynamic.sql.insert.InsertDSL
2424
import org.mybatis.dynamic.sql.insert.MultiRowInsertDSL
2525

26-
fun count(column: BasicColumn, completer: CountColumnCompleter) =
27-
completer(KotlinCountColumnBuilder(SqlBuilder.countColumn(column))).build()
26+
object KotlinModelBuilderFunctions {
27+
fun count(column: BasicColumn, completer: CountCompleter) =
28+
completer(KotlinCountBuilder(SqlBuilder.countColumn(column))).build()
2829

29-
fun countDistinct(column: BasicColumn, completer: CountColumnCompleter) =
30-
completer(KotlinCountColumnBuilder(SqlBuilder.countDistinctColumn(column))).build()
30+
fun countDistinct(column: BasicColumn, completer: CountCompleter) =
31+
completer(KotlinCountBuilder(SqlBuilder.countDistinctColumn(column))).build()
3132

32-
fun count(start: KotlinCountBuilder, completer: CountCompleter) =
33-
completer(start).build()
33+
fun countFrom(table: SqlTable, completer: CountCompleter) =
34+
with(KotlinCountBuilder(SqlBuilder.countColumn(SqlBuilder.constant<Long>("*")))) {
35+
completer(from(table)).build()
36+
}
3437

35-
fun countFrom(table: SqlTable, completer: CountCompleter) =
36-
count(KotlinCountBuilder(SqlBuilder.countFrom(table)), completer)
38+
fun deleteFrom(table: SqlTable, completer: DeleteCompleter) =
39+
completer(KotlinDeleteBuilder(SqlBuilder.deleteFrom(table))).build()
3740

38-
fun deleteFrom(table: SqlTable, completer: DeleteCompleter) =
39-
completer(KotlinDeleteBuilder(SqlBuilder.deleteFrom(table))).build()
41+
fun insertInto(table: SqlTable, completer: GeneralInsertCompleter) =
42+
completer(GeneralInsertDSL.insertInto(table)).build()
4043

41-
fun insertInto(table: SqlTable, completer: GeneralInsertCompleter) =
42-
completer(GeneralInsertDSL.insertInto(table)).build()
44+
fun insertSelect(table: SqlTable, completer: InsertSelectCompleter) =
45+
with(completer(KotlinInsertSelectSubQueryBuilder())) {
46+
SqlBuilder.insertInto(table)
47+
.withColumnList(columnList)
48+
.withSelectStatement(selectBuilder)
49+
.build()
50+
}
4351

44-
fun insertSelect(table: SqlTable, completer: InsertSelectCompleter) =
45-
with(completer(KotlinInsertSelectSubQueryBuilder())) {
46-
SqlBuilder.insertInto(table)
47-
.withColumnList(columnList)
48-
.withSelectStatement(selectBuilder)
49-
.build()
50-
}
52+
fun <T> BatchInsertDSL.IntoGatherer<T>.into(table: SqlTable, completer: BatchInsertCompleter<T>) =
53+
completer(into(table)).build()
5154

52-
fun <T> BatchInsertDSL.IntoGatherer<T>.into(table: SqlTable, completer: BatchInsertCompleter<T>) =
53-
completer(into(table)).build()
55+
fun <T> InsertDSL.IntoGatherer<T>.into(table: SqlTable, completer: InsertCompleter<T>) =
56+
completer(into(table)).build()
5457

55-
fun <T> InsertDSL.IntoGatherer<T>.into(table: SqlTable, completer: InsertCompleter<T>) =
56-
completer(into(table)).build()
58+
fun <T> MultiRowInsertDSL.IntoGatherer<T>.into(table: SqlTable, completer: MultiRowInsertCompleter<T>) =
59+
completer(into(table)).build()
5760

58-
fun <T> MultiRowInsertDSL.IntoGatherer<T>.into(table: SqlTable, completer: MultiRowInsertCompleter<T>) =
59-
completer(into(table)).build()
61+
fun select(vararg columns: BasicColumn, completer: SelectCompleter) =
62+
select(columns.asList(), completer)
6063

61-
fun select(vararg columns: BasicColumn, completer: SelectCompleter) =
62-
select(columns.asList(), completer)
64+
fun select(columns: List<BasicColumn>, completer: SelectCompleter) =
65+
completer(KotlinSelectBuilder(SqlBuilder.select(columns))).build()
6366

64-
fun select(columns: List<BasicColumn>, completer: SelectCompleter) =
65-
completer(KotlinSelectBuilder(SqlBuilder.select(columns))).build()
67+
fun selectDistinct(vararg columns: BasicColumn, completer: SelectCompleter) =
68+
selectDistinct(columns.asList(), completer)
6669

67-
fun selectDistinct(vararg columns: BasicColumn, completer: SelectCompleter) =
68-
selectDistinct(columns.asList(), completer)
70+
fun selectDistinct(columns: List<BasicColumn>, completer: SelectCompleter) =
71+
completer(KotlinSelectBuilder(SqlBuilder.selectDistinct(columns))).build()
6972

70-
fun selectDistinct(columns: List<BasicColumn>, completer: SelectCompleter) =
71-
completer(KotlinSelectBuilder(SqlBuilder.selectDistinct(columns))).build()
72-
73-
fun update(table: SqlTable, completer: UpdateCompleter) =
74-
completer(KotlinUpdateBuilder(SqlBuilder.update(table))).build()
73+
fun update(table: SqlTable, completer: UpdateCompleter) =
74+
completer(KotlinUpdateBuilder(SqlBuilder.update(table))).build()
75+
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/mybatis3/MapperSupportFunctions.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,21 @@ import org.mybatis.dynamic.sql.util.kotlin.DeleteCompleter
3232
import org.mybatis.dynamic.sql.util.kotlin.GeneralInsertCompleter
3333
import org.mybatis.dynamic.sql.util.kotlin.InsertCompleter
3434
import org.mybatis.dynamic.sql.util.kotlin.InsertSelectCompleter
35-
import org.mybatis.dynamic.sql.util.kotlin.KotlinCountBuilder
3635
import org.mybatis.dynamic.sql.util.kotlin.KotlinSelectBuilder
3736
import org.mybatis.dynamic.sql.util.kotlin.MultiRowInsertCompleter
3837
import org.mybatis.dynamic.sql.util.kotlin.SelectCompleter
3938
import org.mybatis.dynamic.sql.util.kotlin.UpdateCompleter
4039

4140
fun count(mapper: (SelectStatementProvider) -> Long, column: BasicColumn, table: SqlTable, completer: CountCompleter) =
42-
mapper(count(KotlinCountBuilder(SqlBuilder.countColumn(column).from(table)), completer))
41+
mapper(count(column) { completer(from(table)) })
4342

4443
fun countDistinct(
4544
mapper: (SelectStatementProvider) -> Long,
4645
column: BasicColumn,
4746
table: SqlTable,
4847
completer: CountCompleter
4948
) =
50-
mapper(count(KotlinCountBuilder(SqlBuilder.countDistinctColumn(column).from(table)), completer))
49+
mapper(countDistinct(column) { completer(from(table)) })
5150

5251
fun countFrom(mapper: (SelectStatementProvider) -> Long, table: SqlTable, completer: CountCompleter) =
5352
mapper(countFrom(table, completer))
@@ -117,9 +116,6 @@ fun <T> selectOne(
117116
fun update(mapper: (UpdateStatementProvider) -> Int, table: SqlTable, completer: UpdateCompleter) =
118117
mapper(update(table, completer))
119118

120-
private fun count(start: KotlinCountBuilder, completer: CountCompleter) =
121-
completer(start).build().render(RenderingStrategies.MYBATIS3)
122-
123119
private fun select(start: KotlinSelectBuilder, completer: SelectCompleter) =
124120
completer(start).build().render(RenderingStrategies.MYBATIS3)
125121

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/mybatis3/ProviderBuilderFunctions.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
* limitations under the License.
1515
*/
1616
@file:Suppress("TooManyFunctions")
17+
1718
package org.mybatis.dynamic.sql.util.kotlin.mybatis3
1819

1920
import org.mybatis.dynamic.sql.BasicColumn
2021
import org.mybatis.dynamic.sql.SqlTable
2122
import org.mybatis.dynamic.sql.insert.InsertDSL
2223
import org.mybatis.dynamic.sql.insert.MultiRowInsertDSL
2324
import org.mybatis.dynamic.sql.render.RenderingStrategies
24-
import org.mybatis.dynamic.sql.util.kotlin.CountColumnCompleter
2525
import org.mybatis.dynamic.sql.util.kotlin.CountCompleter
2626
import org.mybatis.dynamic.sql.util.kotlin.DeleteCompleter
2727
import org.mybatis.dynamic.sql.util.kotlin.GeneralInsertCompleter
@@ -30,21 +30,21 @@ import org.mybatis.dynamic.sql.util.kotlin.InsertSelectCompleter
3030
import org.mybatis.dynamic.sql.util.kotlin.MultiRowInsertCompleter
3131
import org.mybatis.dynamic.sql.util.kotlin.SelectCompleter
3232
import org.mybatis.dynamic.sql.util.kotlin.UpdateCompleter
33-
import org.mybatis.dynamic.sql.util.kotlin.count
34-
import org.mybatis.dynamic.sql.util.kotlin.countDistinct
35-
import org.mybatis.dynamic.sql.util.kotlin.countFrom
36-
import org.mybatis.dynamic.sql.util.kotlin.deleteFrom
37-
import org.mybatis.dynamic.sql.util.kotlin.insertInto
38-
import org.mybatis.dynamic.sql.util.kotlin.insertSelect
39-
import org.mybatis.dynamic.sql.util.kotlin.into
40-
import org.mybatis.dynamic.sql.util.kotlin.select
41-
import org.mybatis.dynamic.sql.util.kotlin.selectDistinct
42-
import org.mybatis.dynamic.sql.util.kotlin.update
33+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.count
34+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.countDistinct
35+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.countFrom
36+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.deleteFrom
37+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.insertInto
38+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.insertSelect
39+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.into
40+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.select
41+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.selectDistinct
42+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.update
4343

44-
fun count(column: BasicColumn, completer: CountColumnCompleter) =
44+
fun count(column: BasicColumn, completer: CountCompleter) =
4545
count(column, completer).render(RenderingStrategies.MYBATIS3)
4646

47-
fun countDistinct(column: BasicColumn, completer: CountColumnCompleter) =
47+
fun countDistinct(column: BasicColumn, completer: CountCompleter) =
4848
countDistinct(column, completer).render(RenderingStrategies.MYBATIS3)
4949

5050
fun countFrom(table: SqlTable, completer: CountCompleter) =

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/spring/NamedParameterJdbcTemplateExtensions.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider
2929
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider
3030
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider
3131
import org.mybatis.dynamic.sql.util.kotlin.BatchInsertCompleter
32-
import org.mybatis.dynamic.sql.util.kotlin.CountColumnCompleter
3332
import org.mybatis.dynamic.sql.util.kotlin.CountCompleter
3433
import org.mybatis.dynamic.sql.util.kotlin.DeleteCompleter
3534
import org.mybatis.dynamic.sql.util.kotlin.GeneralInsertCompleter
@@ -50,10 +49,10 @@ import java.sql.ResultSet
5049
fun NamedParameterJdbcTemplate.count(selectStatement: SelectStatementProvider) =
5150
queryForObject(selectStatement.selectStatement, selectStatement.parameters, Long::class.java)!!
5251

53-
fun NamedParameterJdbcTemplate.count(column: BasicColumn, completer: CountColumnCompleter) =
52+
fun NamedParameterJdbcTemplate.count(column: BasicColumn, completer: CountCompleter) =
5453
count(org.mybatis.dynamic.sql.util.kotlin.spring.count(column, completer))
5554

56-
fun NamedParameterJdbcTemplate.countDistinct(column: BasicColumn, completer: CountColumnCompleter) =
55+
fun NamedParameterJdbcTemplate.countDistinct(column: BasicColumn, completer: CountCompleter) =
5756
count(org.mybatis.dynamic.sql.util.kotlin.spring.countDistinct(column, completer))
5857

5958
fun NamedParameterJdbcTemplate.countFrom(table: SqlTable, completer: CountCompleter) =

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/spring/ProviderBuilderFunctions.kt

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import org.mybatis.dynamic.sql.insert.InsertDSL
2323
import org.mybatis.dynamic.sql.insert.MultiRowInsertDSL
2424
import org.mybatis.dynamic.sql.render.RenderingStrategies
2525
import org.mybatis.dynamic.sql.util.kotlin.BatchInsertCompleter
26-
import org.mybatis.dynamic.sql.util.kotlin.CountColumnCompleter
2726
import org.mybatis.dynamic.sql.util.kotlin.CountCompleter
2827
import org.mybatis.dynamic.sql.util.kotlin.DeleteCompleter
2928
import org.mybatis.dynamic.sql.util.kotlin.GeneralInsertCompleter
@@ -32,21 +31,21 @@ import org.mybatis.dynamic.sql.util.kotlin.InsertSelectCompleter
3231
import org.mybatis.dynamic.sql.util.kotlin.MultiRowInsertCompleter
3332
import org.mybatis.dynamic.sql.util.kotlin.SelectCompleter
3433
import org.mybatis.dynamic.sql.util.kotlin.UpdateCompleter
35-
import org.mybatis.dynamic.sql.util.kotlin.count
36-
import org.mybatis.dynamic.sql.util.kotlin.countDistinct
37-
import org.mybatis.dynamic.sql.util.kotlin.countFrom
38-
import org.mybatis.dynamic.sql.util.kotlin.deleteFrom
39-
import org.mybatis.dynamic.sql.util.kotlin.insertInto
40-
import org.mybatis.dynamic.sql.util.kotlin.insertSelect
41-
import org.mybatis.dynamic.sql.util.kotlin.into
42-
import org.mybatis.dynamic.sql.util.kotlin.select
43-
import org.mybatis.dynamic.sql.util.kotlin.selectDistinct
44-
import org.mybatis.dynamic.sql.util.kotlin.update
34+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.count
35+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.countDistinct
36+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.countFrom
37+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.deleteFrom
38+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.insertInto
39+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.insertSelect
40+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.into
41+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.select
42+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.selectDistinct
43+
import org.mybatis.dynamic.sql.util.kotlin.KotlinModelBuilderFunctions.update
4544

46-
fun count(column: BasicColumn, completer: CountColumnCompleter) =
45+
fun count(column: BasicColumn, completer: CountCompleter) =
4746
count(column, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)
4847

49-
fun countDistinct(column: BasicColumn, completer: CountColumnCompleter) =
48+
fun countDistinct(column: BasicColumn, completer: CountCompleter) =
5049
countDistinct(column, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)
5150

5251
fun countFrom(table: SqlTable, completer: CountCompleter) =

0 commit comments

Comments
 (0)