Skip to content

Commit 205cd21

Browse files
committed
Better expression of non-nullability on insert methods
1 parent 663b8af commit 205cd21

File tree

10 files changed

+77
-52
lines changed

10 files changed

+77
-52
lines changed

src/main/java/org/mybatis/dynamic/sql/insert/render/DefaultInsertStatementProvider.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016-2021 the original author or authors.
2+
* Copyright 2016-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
1515
*/
1616
package org.mybatis.dynamic.sql.insert.render;
1717

18+
import org.jetbrains.annotations.NotNull;
19+
1820
import java.util.Objects;
1921

2022
public class DefaultInsertStatementProvider<T> implements InsertStatementProvider<T> {
@@ -37,6 +39,7 @@ public T getRecord() {
3739
}
3840

3941
@Override
42+
@NotNull
4043
public T getRow() {
4144
return row;
4245
}

src/main/java/org/mybatis/dynamic/sql/insert/render/InsertStatementProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.mybatis.dynamic.sql.insert.render;
1717

18+
import org.jetbrains.annotations.NotNull;
19+
1820
public interface InsertStatementProvider<T> {
1921
/**
2022
* Return the row associated with this insert statement.
@@ -30,6 +32,7 @@ public interface InsertStatementProvider<T> {
3032
*
3133
* @return the row associated with this insert statement.
3234
*/
35+
@NotNull
3336
T getRow();
3437

3538
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import org.mybatis.dynamic.sql.util.Buildable
2525
typealias KotlinBatchInsertCompleter<T> = KotlinBatchInsertBuilder<T>.() -> Unit
2626

2727
@MyBatisDslMarker
28-
class KotlinBatchInsertBuilder<T> (private val rows: Collection<T>): Buildable<BatchInsertModel<T>> {
28+
class KotlinBatchInsertBuilder<T> (private val rows: Collection<T & Any>): Buildable<BatchInsertModel<T>> {
2929
private var table: SqlTable? = null
3030
private val columnMappings = mutableListOf<AbstractColumnMapping>()
3131

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import org.mybatis.dynamic.sql.util.Buildable
2525
typealias KotlinInsertCompleter<T> = KotlinInsertBuilder<T>.() -> Unit
2626

2727
@MyBatisDslMarker
28-
class KotlinInsertBuilder<T> (private val row: T): Buildable<InsertModel<T>> {
28+
class KotlinInsertBuilder<T> (private val row: T & Any): Buildable<InsertModel<T>> {
2929
private var table: SqlTable? = null
3030
private val columnMappings = mutableListOf<AbstractColumnMapping>()
3131

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import org.mybatis.dynamic.sql.util.Buildable
2525
typealias KotlinMultiRowInsertCompleter<T> = KotlinMultiRowInsertBuilder<T>.() -> Unit
2626

2727
@MyBatisDslMarker
28-
class KotlinMultiRowInsertBuilder<T> (private val rows: Collection<T>): Buildable<MultiRowInsertModel<T>> {
28+
class KotlinMultiRowInsertBuilder<T> (private val rows: Collection<T & Any>): Buildable<MultiRowInsertModel<T>> {
2929
private var table: SqlTable? = null
3030
private val columnMappings = mutableListOf<AbstractColumnMapping>()
3131

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/model/ModelBuilderFunctions.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,23 @@ fun deleteFrom(table: SqlTable, completer: DeleteCompleter): DeleteModel =
6565
fun deleteFrom(table: SqlTable, tableAlias: String, completer: DeleteCompleter): DeleteModel =
6666
KotlinDeleteBuilder(SqlBuilder.deleteFrom(table, tableAlias)).apply(completer).build()
6767

68-
fun <T> insert(row: T, completer: KotlinInsertCompleter<T>): InsertModel<T> =
69-
KotlinInsertBuilder(row).apply(completer).build()
68+
fun <T> insert(row: T & Any, completer: KotlinInsertCompleter<T>): InsertModel<T> {
69+
val f : KotlinInsertBuilder<T> = KotlinInsertBuilder(row)
70+
return f.apply(completer).build()
71+
}
7072

71-
fun <T> insertBatch(rows: Collection<T>, completer: KotlinBatchInsertCompleter<T>): BatchInsertModel<T> =
72-
KotlinBatchInsertBuilder(rows).apply(completer).build()
73+
fun <T> insertBatch(rows: Collection<T & Any>, completer: KotlinBatchInsertCompleter<T>): BatchInsertModel<T> {
74+
val f: KotlinBatchInsertBuilder<T> = KotlinBatchInsertBuilder(rows)
75+
return f.apply(completer).build()
76+
}
7377

7478
fun insertInto(table: SqlTable, completer: GeneralInsertCompleter): GeneralInsertModel =
7579
KotlinGeneralInsertBuilder(table).apply(completer).build()
7680

77-
fun <T> insertMultiple(rows: Collection<T>, completer: KotlinMultiRowInsertCompleter<T>): MultiRowInsertModel<T> =
78-
KotlinMultiRowInsertBuilder(rows).apply(completer).build()
81+
fun <T> insertMultiple(rows: Collection<T & Any>, completer: KotlinMultiRowInsertCompleter<T>): MultiRowInsertModel<T> {
82+
val f: KotlinMultiRowInsertBuilder<T> = KotlinMultiRowInsertBuilder(rows)
83+
return f.apply(completer).build()
84+
}
7985

8086
fun insertSelect(table: SqlTable, completer: InsertSelectCompleter): InsertSelectModel =
8187
with(KotlinInsertSelectSubQueryBuilder().apply(completer)) {

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

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package org.mybatis.dynamic.sql.util.kotlin.mybatis3
1919
import org.mybatis.dynamic.sql.BasicColumn
2020
import org.mybatis.dynamic.sql.SqlTable
2121
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider
22+
import org.mybatis.dynamic.sql.insert.render.BatchInsert
2223
import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider
2324
import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider
2425
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider
@@ -65,14 +66,17 @@ fun deleteFrom(mapper: (DeleteStatementProvider) -> Int, table: SqlTable, comple
6566

6667
fun <T> insert(
6768
mapper: (InsertStatementProvider<T>) -> Int,
68-
row: T,
69+
row: T & Any,
6970
table: SqlTable,
7071
completer: KotlinInsertCompleter<T>
71-
): Int =
72-
insert(row) {
72+
): Int {
73+
val f : InsertStatementProvider<T> = insert(row) {
7374
into(table)
7475
run(completer)
75-
}.run(mapper)
76+
}
77+
78+
return f.run(mapper)
79+
}
7680

7781
/**
7882
* This function simply inserts all rows using the supplied mapper. It is up
@@ -83,14 +87,17 @@ fun <T> insert(
8387
*/
8488
fun <T> insertBatch(
8589
mapper: (InsertStatementProvider<T>) -> Int,
86-
records: Collection<T>,
90+
records: Collection<T & Any>,
8791
table: SqlTable,
8892
completer: KotlinBatchInsertCompleter<T>
89-
): List<Int> =
90-
insertBatch(records) {
93+
): List<Int> {
94+
val f: BatchInsert<T> = insertBatch(records) {
9195
into(table)
9296
run(completer)
93-
}.insertStatements().map(mapper)
97+
}
98+
99+
return f.insertStatements().map(mapper)
100+
}
94101

95102
fun insertInto(
96103
mapper: (GeneralInsertStatementProvider) -> Int,
@@ -101,27 +108,33 @@ fun insertInto(
101108

102109
fun <T> insertMultiple(
103110
mapper: (MultiRowInsertStatementProvider<T>) -> Int,
104-
records: Collection<T>,
111+
records: Collection<T & Any>,
105112
table: SqlTable,
106113
completer: KotlinMultiRowInsertCompleter<T>
107-
): Int =
108-
insertMultiple(records) {
114+
): Int {
115+
val f: MultiRowInsertStatementProvider<T> = insertMultiple(records) {
109116
into(table)
110117
run(completer)
111-
}.run(mapper)
118+
}
119+
120+
return f.run(mapper)
121+
}
112122

113123
fun <T> insertMultipleWithGeneratedKeys(
114124
mapper: (String, List<T>) -> Int,
115-
records: Collection<T>,
125+
records: Collection<T & Any>,
116126
table: SqlTable,
117127
completer: KotlinMultiRowInsertCompleter<T>
118-
): Int =
119-
insertMultiple(records) {
128+
): Int {
129+
val f: MultiRowInsertStatementProvider<T> = insertMultiple(records) {
120130
into(table)
121131
run(completer)
122-
}.run {
132+
}
133+
134+
return f.run {
123135
mapper(insertStatement, this.records)
124136
}
137+
}
125138

126139
fun insertSelect(
127140
mapper: (InsertSelectStatementProvider) -> Int,

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,17 @@ fun deleteFrom(table: SqlTable, completer: DeleteCompleter): DeleteStatementProv
6868
fun deleteFrom(table: SqlTable, tableAlias: String, completer: DeleteCompleter): DeleteStatementProvider =
6969
deleteFrom(table, tableAlias, completer).render(RenderingStrategies.MYBATIS3)
7070

71-
fun <T> insert(row: T, completer: KotlinInsertCompleter<T>): InsertStatementProvider<T> =
71+
fun <T> insert(row: T & Any, completer: KotlinInsertCompleter<T>): InsertStatementProvider<T> =
7272
insert(row, completer).render(RenderingStrategies.MYBATIS3)
7373

74-
fun <T> insertBatch(rows: Collection<T>, completer: KotlinBatchInsertCompleter<T>): BatchInsert<T> =
74+
fun <T> insertBatch(rows: Collection<T & Any>, completer: KotlinBatchInsertCompleter<T>): BatchInsert<T> =
7575
insertBatch(rows, completer).render(RenderingStrategies.MYBATIS3)
7676

7777
fun insertInto(table: SqlTable, completer: GeneralInsertCompleter): GeneralInsertStatementProvider =
7878
insertInto(table, completer).render(RenderingStrategies.MYBATIS3)
7979

8080
fun <T> insertMultiple(
81-
rows: Collection<T>,
81+
rows: Collection<T & Any>,
8282
completer: KotlinMultiRowInsertCompleter<T>
8383
): MultiRowInsertStatementProvider<T> =
8484
insertMultiple(rows, completer).render(RenderingStrategies.MYBATIS3)

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,14 @@ fun NamedParameterJdbcTemplate.deleteFrom(table: SqlTable, completer: DeleteComp
6868
fun <T> NamedParameterJdbcTemplate.insertBatch(insertStatement: BatchInsert<T>): IntArray =
6969
batchUpdate(insertStatement.insertStatementSQL, SqlParameterSourceUtils.createBatch(insertStatement.records))
7070

71-
fun <T : Any> NamedParameterJdbcTemplate.insertBatch(
72-
vararg records: T,
71+
fun <T> NamedParameterJdbcTemplate.insertBatch(
72+
vararg records: T & Any,
7373
completer: KotlinBatchInsertCompleter<T>
7474
): IntArray =
7575
insertBatch(records.asList(), completer)
7676

77-
fun <T : Any> NamedParameterJdbcTemplate.insertBatch(
78-
records: List<T>,
77+
fun <T> NamedParameterJdbcTemplate.insertBatch(
78+
records: List<T & Any>,
7979
completer: KotlinBatchInsertCompleter<T>
8080
): IntArray =
8181
insertBatch(org.mybatis.dynamic.sql.util.kotlin.spring.insertBatch(records, completer))
@@ -89,16 +89,16 @@ fun <T : Any> NamedParameterJdbcTemplate.insertBatch(records: List<T>): BatchIns
8989
BatchInsertHelper(records, this)
9090

9191
// single row insert
92-
fun <T : Any> NamedParameterJdbcTemplate.insert(insertStatement: InsertStatementProvider<T>): Int =
92+
fun <T> NamedParameterJdbcTemplate.insert(insertStatement: InsertStatementProvider<T>): Int =
9393
update(insertStatement.insertStatement, BeanPropertySqlParameterSource(insertStatement.row))
9494

95-
fun <T : Any> NamedParameterJdbcTemplate.insert(
95+
fun <T> NamedParameterJdbcTemplate.insert(
9696
insertStatement: InsertStatementProvider<T>,
9797
keyHolder: KeyHolder
9898
): Int =
9999
update(insertStatement.insertStatement, BeanPropertySqlParameterSource(insertStatement.row), keyHolder)
100100

101-
fun <T : Any> NamedParameterJdbcTemplate.insert(row: T, completer: KotlinInsertCompleter<T>): Int =
101+
fun <T> NamedParameterJdbcTemplate.insert(row: T & Any, completer: KotlinInsertCompleter<T>): Int =
102102
insert(org.mybatis.dynamic.sql.util.kotlin.spring.insert(row, completer))
103103

104104
@Deprecated("Please move the into phrase inside the lambda")
@@ -119,14 +119,14 @@ fun NamedParameterJdbcTemplate.insertInto(table: SqlTable, completer: GeneralIns
119119
generalInsert(org.mybatis.dynamic.sql.util.kotlin.spring.insertInto(table, completer))
120120

121121
// multiple row insert
122-
fun <T : Any> NamedParameterJdbcTemplate.insertMultiple(
123-
vararg records: T
124-
, completer: KotlinMultiRowInsertCompleter<T>
122+
fun <T> NamedParameterJdbcTemplate.insertMultiple(
123+
vararg records: T & Any,
124+
completer: KotlinMultiRowInsertCompleter<T>
125125
): Int =
126126
insertMultiple(records.asList(), completer)
127127

128-
fun <T : Any> NamedParameterJdbcTemplate.insertMultiple(
129-
records: List<T>,
128+
fun <T> NamedParameterJdbcTemplate.insertMultiple(
129+
records: List<T & Any>,
130130
completer: KotlinMultiRowInsertCompleter<T>
131131
): Int =
132132
insertMultiple(org.mybatis.dynamic.sql.util.kotlin.spring.insertMultiple(records, completer))
@@ -202,10 +202,10 @@ fun <T> NamedParameterJdbcTemplate.selectList(
202202
): List<T> =
203203
query(selectStatement.selectStatement, selectStatement.parameters, rowMapper)
204204

205-
fun <T : Any> NamedParameterJdbcTemplate.selectList(
205+
fun <T> NamedParameterJdbcTemplate.selectList(
206206
selectStatement: SelectStatementProvider,
207-
type: KClass<T>
208-
): List<T?> =
207+
type: KClass<T & Any>
208+
): List<T> =
209209
queryForList(selectStatement.selectStatement, selectStatement.parameters, type.java)
210210

211211
fun NamedParameterJdbcTemplate.selectOne(
@@ -239,9 +239,9 @@ fun <T> NamedParameterJdbcTemplate.selectOne(
239239
}
240240

241241
@SuppressWarnings("SwallowedException")
242-
fun <T : Any> NamedParameterJdbcTemplate.selectOne(
242+
fun <T> NamedParameterJdbcTemplate.selectOne(
243243
selectStatement: SelectStatementProvider,
244-
type: KClass<T>
244+
type: KClass<T & Any>
245245
): T? = try {
246246
queryForObject(selectStatement.selectStatement, selectStatement.parameters, type.java)
247247
} catch (e: EmptyResultDataAccessException) {
@@ -284,17 +284,17 @@ class KeyHolderHelper(private val keyHolder: KeyHolder, private val template: Na
284284
fun insertInto(table: SqlTable, completer: GeneralInsertCompleter): Int =
285285
template.generalInsert(org.mybatis.dynamic.sql.util.kotlin.spring.insertInto(table, completer), keyHolder)
286286

287-
fun <T : Any> insert(row: T, completer: KotlinInsertCompleter<T>): Int =
287+
fun <T> insert(row: T & Any, completer: KotlinInsertCompleter<T>): Int =
288288
template.insert(org.mybatis.dynamic.sql.util.kotlin.spring.insert(row, completer), keyHolder)
289289

290290
@Deprecated("Please move the into phrase inside the lambda")
291291
fun <T : Any> insert(row: T): SingleRowInsertWithKeyHolderHelper<T> =
292292
SingleRowInsertWithKeyHolderHelper(row, template, keyHolder)
293293

294-
fun <T : Any> insertMultiple(vararg records: T, completer: KotlinMultiRowInsertCompleter<T>): Int =
294+
fun <T> insertMultiple(vararg records: T & Any, completer: KotlinMultiRowInsertCompleter<T>): Int =
295295
insertMultiple(records.asList(), completer)
296296

297-
fun <T : Any> insertMultiple(records: List<T>, completer: KotlinMultiRowInsertCompleter<T>): Int =
297+
fun <T> insertMultiple(records: List<T & Any>, completer: KotlinMultiRowInsertCompleter<T>): Int =
298298
template.insertMultiple(org.mybatis.dynamic.sql.util.kotlin.spring.insertMultiple(records, completer),
299299
keyHolder)
300300

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,17 @@ fun deleteFrom(table: SqlTable, completer: DeleteCompleter): DeleteStatementProv
6868
fun deleteFrom(table: SqlTable, tableAlias: String, completer: DeleteCompleter): DeleteStatementProvider =
6969
deleteFrom(table, tableAlias, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)
7070

71-
fun <T> insert(row: T, completer: KotlinInsertCompleter<T>): InsertStatementProvider<T> =
71+
fun <T> insert(row: T & Any, completer: KotlinInsertCompleter<T>): InsertStatementProvider<T> =
7272
insert(row, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)
7373

74-
fun <T> insertBatch(rows: Collection<T>, completer: KotlinBatchInsertCompleter<T>): BatchInsert<T> =
74+
fun <T> insertBatch(rows: Collection<T & Any>, completer: KotlinBatchInsertCompleter<T>): BatchInsert<T> =
7575
insertBatch(rows, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)
7676

7777
fun insertInto(table: SqlTable, completer: GeneralInsertCompleter): GeneralInsertStatementProvider =
7878
insertInto(table, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)
7979

8080
fun <T> insertMultiple(
81-
rows: Collection<T>,
81+
rows: Collection<T & Any>,
8282
completer: KotlinMultiRowInsertCompleter<T>
8383
): MultiRowInsertStatementProvider<T> =
8484
insertMultiple(rows, completer).render(RenderingStrategies.SPRING_NAMED_PARAMETER)

0 commit comments

Comments
 (0)