Skip to content

Commit

Permalink
added jt400 driver and basic DB2 Dialect
Browse files Browse the repository at this point in the history
  • Loading branch information
Paul Krüger committed May 27, 2020
1 parent d5c4850 commit d4645b0
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class Database private constructor(private val resolvedVendor: String? = null, v
registerDialect(OracleDialect.dialectName) { OracleDialect() }
registerDialect(SQLServerDialect.dialectName) { SQLServerDialect() }
registerDialect(MariaDBDialect.dialectName) { MariaDBDialect() }
registerDialect(DB2Dialect.dialectName) { DB2Dialect() }
}

fun registerDialect(prefix:String, dialect: () -> DatabaseDialect) {
Expand Down Expand Up @@ -131,6 +132,7 @@ class Database private constructor(private val resolvedVendor: String? = null, v
url.startsWith("jdbc:oracle") -> "oracle.jdbc.OracleDriver"
url.startsWith("jdbc:sqlite") -> "org.sqlite.JDBC"
url.startsWith("jdbc:sqlserver") -> "com.microsoft.sqlserver.jdbc.SQLServerDriver"
url.startsWith("jdbc:as400") -> "com.ibm.as400.access.AS400JDBCDriver"
else -> error("Database driver not found for $url")
}

Expand All @@ -143,6 +145,7 @@ class Database private constructor(private val resolvedVendor: String? = null, v
url.startsWith("jdbc:oracle") -> OracleDialect.dialectName
url.startsWith("jdbc:sqlite") -> SQLiteDialect.dialectName
url.startsWith("jdbc:sqlserver") -> SQLServerDialect.dialectName
url.startsWith("jdbc:as400") -> DB2Dialect.dialectName
else -> error("Can't resolve dialect for connection: $url")
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.jetbrains.exposed.sql.vendors

import org.jetbrains.exposed.sql.*

internal object DB2DataTypeProvider : DataTypeProvider() {
override fun binaryType(): String {
exposedLogger.error("The length of the Binary column is missing.")
error("The length of the Binary column is missing.")
}

override fun dateTimeType(): String = "TIMESTAMP"

override fun ulongType(): String = "BIGINT"

override fun textType(): String = "VARCHAR(32704)"
}

internal open class DB2FunctionProvider : FunctionProvider() {
internal object INSTANCE : DB2FunctionProvider()

override fun random(seed: Int?) = "RAND(${seed?.toString().orEmpty()})"
}

/**
* DB2 dialect implementation.
*/
class DB2Dialect : VendorDialect(dialectName, DB2DataTypeProvider, DB2FunctionProvider.INSTANCE) {
override val name: String = dialectName
override val functionProvider: FunctionProvider = MariaDBFunctionProvider
override val supportsOnlyIdentifiersInGeneratedKeys: Boolean = true


companion object {
/** DB2 dialect name */
const val dialectName: String = "db2"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class JdbcDatabaseMetadataImpl(database: String, val metadata: DatabaseMetaData)
"pgjdbc-ng" -> PostgreSQLNGDialect.dialectName
"PostgreSQL JDBC Driver" -> PostgreSQLDialect.dialectName
"Oracle JDBC driver" -> OracleDialect.dialectName
"AS/400 Toolbox for Java JDBC Driver" -> DB2Dialect.dialectName
else -> {
if (driverName.startsWith("Microsoft JDBC Driver "))
SQLServerDialect.dialectName
Expand Down

0 comments on commit d4645b0

Please sign in to comment.