diff options
author | Dico <Dico200@users.noreply.github.com> | 2018-07-30 17:24:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-30 17:24:32 +0100 |
commit | 5d5b6550996a5e322ff153c2accee1532fbdde32 (patch) | |
tree | ce5b62641ae751a4292efda46b473485553a0b85 /src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt | |
parent | 72482a3547ef641e79f9aa3bdec49ada860716c3 (diff) | |
parent | 14b67119484985fa64efc910e2e1c583100ea280 (diff) |
Merge pull request #1 from Dico200/master
Update with outstanding commits from Dico200/Parcels2
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt b/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt index 7533586..816ff97 100644 --- a/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt +++ b/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt @@ -1,8 +1,10 @@ package io.dico.parcels2.storage -import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.Column +import org.jetbrains.exposed.sql.Index +import org.jetbrains.exposed.sql.Table +import org.jetbrains.exposed.sql.Transaction import org.jetbrains.exposed.sql.statements.InsertStatement -import org.jetbrains.exposed.sql.statements.UpdateStatement import org.jetbrains.exposed.sql.transactions.TransactionManager class UpsertStatement<Key : Any>(table: Table, conflictColumn: Column<*>? = null, conflictIndex: Index? = null) @@ -26,12 +28,23 @@ class UpsertStatement<Key : Any>(table: Table, conflictColumn: Column<*>? = null override fun prepareSQL(transaction: Transaction) = buildString { append(super.prepareSQL(transaction)) - append(" ON CONFLICT(") - append(indexName) - append(") DO UPDATE SET ") - values.keys.filter { it !in indexColumns}.joinTo(this) { "${transaction.identity(it)}=EXCLUDED.${transaction.identity(it)}" } - }.also { println(it) } + val dialect = transaction.db.vendor + if (dialect == "postgresql") { + + append(" ON CONFLICT(") + append(indexName) + append(") DO UPDATE SET ") + + values.keys.filter { it !in indexColumns }.joinTo(this) { "${transaction.identity(it)}=EXCLUDED.${transaction.identity(it)}" } + + } else { + + append (" ON DUPLICATE KEY UPDATE ") + values.keys.filter { it !in indexColumns }.joinTo(this) { "${transaction.identity(it)}=VALUES(${transaction.identity(it)})" } + + } + } } |