Skip to content

Commit c819209

Browse files
committed
Support upsert on doma-kotlin
1 parent 0fb0402 commit c819209

13 files changed

+337
-9
lines changed

doma-kotlin/src/main/kotlin/org/seasar/doma/kotlin/jdbc/criteria/KEntityql.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class KEntityql(config: Config) {
5151
entityMetamodel: EntityMetamodel<ENTITY>,
5252
entity: ENTITY,
5353
block: InsertSettings.() -> Unit = {},
54-
): KStatement<Result<ENTITY>> {
54+
): KEntityqlInsertStatement<ENTITY> {
5555
val statement = entityql.insert(entityMetamodel, entity, block)
5656
return KEntityqlInsertStatement(statement)
5757
}
@@ -78,7 +78,7 @@ class KEntityql(config: Config) {
7878
entityMetamodel: EntityMetamodel<ENTITY>,
7979
entities: List<ENTITY>,
8080
block: InsertSettings.() -> Unit = {},
81-
): KStatement<BatchResult<ENTITY>> {
81+
): KEntityqlBatchInsertStatement<ENTITY> {
8282
val statement = entityql.insert(entityMetamodel, entities, block)
8383
return KEntityqlBatchInsertStatement(statement)
8484
}

doma-kotlin/src/main/kotlin/org/seasar/doma/kotlin/jdbc/criteria/statement/KEntityqlBatchInsertStatement.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@ package org.seasar.doma.kotlin.jdbc.criteria.statement
22

33
import org.seasar.doma.jdbc.BatchResult
44
import org.seasar.doma.jdbc.Sql
5-
import org.seasar.doma.jdbc.criteria.statement.Statement
5+
import org.seasar.doma.jdbc.criteria.statement.EntityqlBatchInsertStatement
66

77
class KEntityqlBatchInsertStatement<ENTITY>(
8-
private val statement: Statement<BatchResult<ENTITY>>,
8+
private val statement: EntityqlBatchInsertStatement<ENTITY>,
99
) : KStatement<BatchResult<ENTITY>> {
1010

11+
fun onDuplicateKeyUpdate(): KStatement<BatchResult<ENTITY>> {
12+
return KEntityqlBatchUpsertStatement(statement.onDuplicateKeyUpdate())
13+
}
14+
15+
fun onDuplicateKeyIgnore(): KStatement<BatchResult<ENTITY>> {
16+
return KEntityqlBatchUpsertStatement(statement.onDuplicateKeyIgnore())
17+
}
18+
1119
override fun execute(): BatchResult<ENTITY> {
1220
return statement.execute()
1321
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.seasar.doma.kotlin.jdbc.criteria.statement
2+
3+
import org.seasar.doma.jdbc.BatchResult
4+
import org.seasar.doma.jdbc.Sql
5+
import org.seasar.doma.jdbc.criteria.statement.Statement
6+
7+
class KEntityqlBatchUpsertStatement<ENTITY>(private val statement: Statement<BatchResult<ENTITY>>) : KStatement<BatchResult<ENTITY>> {
8+
9+
override fun execute(): BatchResult<ENTITY> {
10+
return statement.execute()
11+
}
12+
13+
override fun asSql(): Sql<*> {
14+
return statement.asSql()
15+
}
16+
}

doma-kotlin/src/main/kotlin/org/seasar/doma/kotlin/jdbc/criteria/statement/KEntityqlInsertStatement.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@ package org.seasar.doma.kotlin.jdbc.criteria.statement
22

33
import org.seasar.doma.jdbc.Result
44
import org.seasar.doma.jdbc.Sql
5-
import org.seasar.doma.jdbc.criteria.statement.Statement
5+
import org.seasar.doma.jdbc.criteria.statement.EntityqlInsertStatement
66

77
class KEntityqlInsertStatement<ENTITY>(
8-
private val statement: Statement<Result<ENTITY>>,
8+
private val statement: EntityqlInsertStatement<ENTITY>,
99
) : KStatement<Result<ENTITY>> {
1010

11+
fun onDuplicateKeyUpdate(): KStatement<Result<ENTITY>> {
12+
return KEntityqlUpsertStatement(statement.onDuplicateKeyUpdate())
13+
}
14+
15+
fun onDuplicateKeyIgnore(): KStatement<Result<ENTITY>> {
16+
return KEntityqlUpsertStatement(statement.onDuplicateKeyIgnore())
17+
}
18+
1119
override fun execute(): Result<ENTITY> {
1220
return statement.execute()
1321
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.seasar.doma.kotlin.jdbc.criteria.statement
2+
3+
import org.seasar.doma.jdbc.Result
4+
import org.seasar.doma.jdbc.Sql
5+
import org.seasar.doma.jdbc.criteria.statement.Statement
6+
7+
class KEntityqlUpsertStatement<ENTITY>(private val statement: Statement<Result<ENTITY>>) : KStatement<Result<ENTITY>> {
8+
9+
override fun execute(): Result<ENTITY> {
10+
return statement.execute()
11+
}
12+
13+
override fun asSql(): Sql<*> {
14+
return statement.asSql()
15+
}
16+
}

doma-kotlin/src/main/kotlin/org/seasar/doma/kotlin/jdbc/criteria/statement/KNativeSqlInsertTerminal.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ class KNativeSqlInsertTerminal(private val statement: NativeSqlInsertTerminal) :
99
return statement.execute()
1010
}
1111

12+
fun onDuplicateKeyUpdate(): KNativeSqlUpsertOnDuplicateKeyUpdateSelectingKeys {
13+
return KNativeSqlUpsertOnDuplicateKeyUpdateSelectingKeys(statement.onDuplicateKeyUpdate())
14+
}
15+
16+
fun onDuplicateKeyIgnore(): KNativeSqlUpsertOnDuplicateKeyIgnoreSelectingKeys {
17+
return KNativeSqlUpsertOnDuplicateKeyIgnoreSelectingKeys(statement.onDuplicateKeyIgnore())
18+
}
19+
1220
override fun asSql(): Sql<*> {
1321
return statement.asSql()
1422
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.seasar.doma.kotlin.jdbc.criteria.statement
2+
3+
import org.seasar.doma.jdbc.Sql
4+
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel
5+
import org.seasar.doma.jdbc.criteria.statement.NativeSqlUpsertOnDuplicateKeyIgnoreSelectingKeys
6+
7+
class KNativeSqlUpsertOnDuplicateKeyIgnoreSelectingKeys(val statement: NativeSqlUpsertOnDuplicateKeyIgnoreSelectingKeys) : KStatement<Int> {
8+
fun keys(vararg keys: PropertyMetamodel<*>): KNativeSqlUpsertTerminal {
9+
return KNativeSqlUpsertTerminal(statement.keys(*keys))
10+
}
11+
12+
override fun execute(): Int {
13+
return statement.execute()
14+
}
15+
16+
override fun asSql(): Sql<*> {
17+
return statement.asSql()
18+
}
19+
20+
override fun peek(block: (Sql<*>) -> Unit): KStatement<Int> {
21+
statement.peek(block)
22+
return this
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.seasar.doma.kotlin.jdbc.criteria.statement
2+
3+
import org.seasar.doma.jdbc.Sql
4+
import org.seasar.doma.jdbc.criteria.declaration.InsertOnDuplicateKeyUpdateSetValuesDeclaration
5+
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel
6+
import org.seasar.doma.jdbc.criteria.statement.NativeSqlUpsertOnDuplicateKeyUpdateSelectingKeys
7+
import org.seasar.doma.jdbc.criteria.statement.NativeSqlUpsertTerminal
8+
9+
class KNativeSqlUpsertOnDuplicateKeyUpdateSelectingKeys(val statement: NativeSqlUpsertOnDuplicateKeyUpdateSelectingKeys) : KStatement<Int> {
10+
fun keys(vararg keys: PropertyMetamodel<*>): KNativeSqlUpsertOnDuplicateKeyUpdateSelectingSet {
11+
return KNativeSqlUpsertOnDuplicateKeyUpdateSelectingSet(statement.keys(*keys))
12+
}
13+
14+
fun set(block: (InsertOnDuplicateKeyUpdateSetValuesDeclaration) -> Unit): NativeSqlUpsertTerminal {
15+
return statement.set(block)
16+
}
17+
18+
override fun execute(): Int {
19+
return statement.execute()
20+
}
21+
22+
override fun asSql(): Sql<*> {
23+
return statement.asSql()
24+
}
25+
26+
override fun peek(block: (Sql<*>) -> Unit): KStatement<Int> {
27+
statement.peek(block)
28+
return this
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.seasar.doma.kotlin.jdbc.criteria.statement
2+
3+
import org.seasar.doma.jdbc.Sql
4+
import org.seasar.doma.jdbc.criteria.declaration.InsertOnDuplicateKeyUpdateSetValuesDeclaration
5+
import org.seasar.doma.jdbc.criteria.statement.NativeSqlUpsertOnDuplicateKeyUpdateSelectingSet
6+
7+
class KNativeSqlUpsertOnDuplicateKeyUpdateSelectingSet(val statement: NativeSqlUpsertOnDuplicateKeyUpdateSelectingSet) : KStatement<Int> {
8+
fun set(block: (InsertOnDuplicateKeyUpdateSetValuesDeclaration) -> Unit): KNativeSqlUpsertTerminal {
9+
return KNativeSqlUpsertTerminal(statement.set(block))
10+
}
11+
12+
override fun execute(): Int {
13+
return statement.execute()
14+
}
15+
16+
override fun asSql(): Sql<*> {
17+
return statement.asSql()
18+
}
19+
20+
override fun peek(block: (Sql<*>) -> Unit): KStatement<Int> {
21+
statement.peek(block)
22+
return this
23+
}
24+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.seasar.doma.kotlin.jdbc.criteria.statement
2+
3+
import org.seasar.doma.jdbc.Sql
4+
import org.seasar.doma.jdbc.criteria.statement.NativeSqlUpsertTerminal
5+
6+
class KNativeSqlUpsertTerminal(val statement: NativeSqlUpsertTerminal) : KStatement<Int> {
7+
override fun execute(): Int {
8+
return statement.execute()
9+
}
10+
11+
override fun asSql(): Sql<*> {
12+
return statement.asSql()
13+
}
14+
15+
override fun peek(block: (Sql<*>) -> Unit): KStatement<Int> {
16+
statement.peek(block)
17+
return this
18+
}
19+
}

0 commit comments

Comments
 (0)