Skip to content

Commit

Permalink
Enable use of Exposed with Quarkus / GraalVM Native Image #919
Browse files Browse the repository at this point in the history
Remove compile dependency to h2
  • Loading branch information
Tapac committed Jun 24, 2020
1 parent 3f0e842 commit cd6bb93
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
1 change: 0 additions & 1 deletion exposed-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ dependencies {
api(kotlin("reflect"))
api("org.jetbrains.kotlinx", "kotlinx-coroutines-core", Versions.kotlinCoroutines)
api("org.slf4j", "slf4j-api", "1.7.25")
compileOnly("com.h2database", "h2", Versions.h2)
}

publishJar {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
package org.jetbrains.exposed.sql.vendors

import org.h2.engine.Mode
import org.h2.jdbc.JdbcConnection
import org.jetbrains.exposed.exceptions.throwUnsupportedException
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.TransactionManager
import java.sql.Wrapper
import java.text.SimpleDateFormat
import java.util.Date

private val Transaction.isMySQLMode: Boolean
get() {
val h2Connection = (connection.connection as? JdbcConnection)
?: (connection.connection as? Wrapper)?.takeIf { it.isWrapperFor(JdbcConnection::class.java) }?.unwrap(JdbcConnection::class.java)

return h2Connection?.let { !it.isClosed && it.settings.mode.enum == Mode.ModeEnum.MySQL } == true
}
get() = (db.dialect as? H2Dialect)?.isMySQLMode() ?: false

internal object H2DataTypeProvider : DataTypeProvider() {
override fun binaryType(): String {
Expand Down Expand Up @@ -127,6 +119,20 @@ internal object H2FunctionProvider : FunctionProvider() {
*/
open class H2Dialect : VendorDialect(dialectName, H2DataTypeProvider, H2FunctionProvider) {

private var isMySQLMode : Boolean? = null

internal fun isMySQLMode() : Boolean {
return isMySQLMode
?: TransactionManager.currentOrNull()?.let { tr ->
tr.exec("SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'MODE'") { rs ->
rs.next()
rs.getString("VALUE")?.equals("MySQL", ignoreCase = true)?.also {
isMySQLMode = it
} ?: false
}
} ?: false
}

override val name: String
get() = when (TransactionManager.currentOrNull()?.isMySQLMode) {
true -> "$dialectName (Mysql Mode)"
Expand Down

0 comments on commit cd6bb93

Please sign in to comment.