Skip to content

Commit 869cdb5

Browse files
committed
fix: Add support for creating sequence in MariaDB
1 parent d5507ed commit 869cdb5

File tree

5 files changed

+34
-1
lines changed

5 files changed

+34
-1
lines changed

exposed-core/api/exposed-core.api

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,13 +662,16 @@ public final class org/jetbrains/exposed/sql/Database {
662662
public final fun getDefaultFetchSize ()Ljava/lang/Integer;
663663
public final fun getDialect ()Lorg/jetbrains/exposed/sql/vendors/DatabaseDialect;
664664
public final fun getIdentifierManager ()Lorg/jetbrains/exposed/sql/statements/api/IdentifierManagerApi;
665+
public final fun getMajorVersion ()I
666+
public final fun getMinorVersion ()I
665667
public final fun getSupportsAlterTableWithAddColumn ()Z
666668
public final fun getSupportsAlterTableWithDropColumn ()Z
667669
public final fun getSupportsMultipleResultSets ()Z
668670
public final fun getUrl ()Ljava/lang/String;
669671
public final fun getUseNestedTransactions ()Z
670672
public final fun getVendor ()Ljava/lang/String;
671673
public final fun getVersion ()Ljava/math/BigDecimal;
674+
public final fun isVersionCovers (II)Z
672675
public final fun isVersionCovers (Ljava/math/BigDecimal;)Z
673676
public final fun setUseNestedTransactions (Z)V
674677
public fun toString ()Ljava/lang/String;
@@ -3562,6 +3565,8 @@ public abstract class org/jetbrains/exposed/sql/statements/api/ExposedDatabaseMe
35623565
public abstract fun getDatabaseProductVersion ()Ljava/lang/String;
35633566
public abstract fun getDefaultIsolationLevel ()I
35643567
public abstract fun getIdentifierManager ()Lorg/jetbrains/exposed/sql/statements/api/IdentifierManagerApi;
3568+
public abstract fun getMajorVersion ()I
3569+
public abstract fun getMinorVersion ()I
35653570
public abstract fun getSchemaNames ()Ljava/util/List;
35663571
public abstract fun getSupportsAlterTableWithAddColumn ()Z
35673572
public abstract fun getSupportsAlterTableWithDropColumn ()Z
@@ -4142,10 +4147,13 @@ public final class org/jetbrains/exposed/sql/vendors/KeywordsKt {
41424147

41434148
public final class org/jetbrains/exposed/sql/vendors/MariaDBDialect : org/jetbrains/exposed/sql/vendors/MysqlDialect {
41444149
public static final field Companion Lorg/jetbrains/exposed/sql/vendors/MariaDBDialect$Companion;
4150+
public static final field SEQUENCE_MIN_MAJOR_VERSION I
4151+
public static final field SEQUENCE_MIN_MINOR_VERSION I
41454152
public fun <init> ()V
41464153
public fun createIndex (Lorg/jetbrains/exposed/sql/Index;)Ljava/lang/String;
41474154
public fun getFunctionProvider ()Lorg/jetbrains/exposed/sql/vendors/FunctionProvider;
41484155
public fun getName ()Ljava/lang/String;
4156+
public fun getSupportsCreateSequence ()Z
41494157
public fun getSupportsOnlyIdentifiersInGeneratedKeys ()Z
41504158
public fun getSupportsSetDefaultReferenceOption ()Z
41514159
}

exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Database.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ class Database private constructor(
6464
/** Whether the version number of the database is equal to or greater than the provided [version]. */
6565
fun isVersionCovers(version: BigDecimal) = this.version >= version
6666

67+
/** The major version number of the database as a [Int]. */
68+
val majorVersion by lazy { metadata { majorVersion } }
69+
70+
/** The minor version number of the database as a [Int]. */
71+
val minorVersion by lazy { metadata { minorVersion } }
72+
73+
/** Whether the version number of the database is equal to or greater than the provided [majorVersion] and [minorVersion]. */
74+
fun isVersionCovers(majorVersion: Int, minorVersion: Int) =
75+
this.majorVersion >= majorVersion && this.minorVersion >= minorVersion
76+
6777
/** Whether the database supports ALTER TABLE with an add column clause. */
6878
val supportsAlterTableWithAddColumn by lazy(
6979
LazyThreadSafetyMode.NONE

exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/statements/api/ExposedDatabaseMetadata.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ abstract class ExposedDatabaseMetadata(val database: String) {
1818
/** The version number of the database as a `BigDecimal`. */
1919
abstract val version: BigDecimal
2020

21+
/** The major version number of the database. */
22+
abstract val majorVersion: Int
23+
24+
/** The minor version number of the database. */
25+
abstract val minorVersion: Int
26+
2127
/** The name of the database based on the name of the underlying JDBC driver. */
2228
abstract val databaseDialectName: String
2329

exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/vendors/MariaDBDialect.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jetbrains.exposed.sql.vendors
22

33
import org.jetbrains.exposed.sql.*
4+
import org.jetbrains.exposed.sql.transactions.TransactionManager
45

56
internal object MariaDBFunctionProvider : MysqlFunctionProvider() {
67
override fun nextVal(seq: Sequence, builder: QueryBuilder) = builder {
@@ -58,6 +59,9 @@ class MariaDBDialect : MysqlDialect() {
5859
override val functionProvider: FunctionProvider = MariaDBFunctionProvider
5960
override val supportsOnlyIdentifiersInGeneratedKeys: Boolean = true
6061
override val supportsSetDefaultReferenceOption: Boolean = false
62+
override val supportsCreateSequence: Boolean by lazy {
63+
TransactionManager.current().db.isVersionCovers(SEQUENCE_MIN_MAJOR_VERSION, SEQUENCE_MIN_MINOR_VERSION)
64+
}
6165

6266
override fun createIndex(index: Index): String {
6367
if (index.functions != null) {
@@ -69,5 +73,8 @@ class MariaDBDialect : MysqlDialect() {
6973
return super.createIndex(index)
7074
}
7175

72-
companion object : DialectNameProvider("MariaDB")
76+
companion object : DialectNameProvider("MariaDB") {
77+
const val SEQUENCE_MIN_MAJOR_VERSION = 10
78+
const val SEQUENCE_MIN_MINOR_VERSION = 3
79+
}
7380
}

exposed-jdbc/src/main/kotlin/org/jetbrains/exposed/sql/statements/jdbc/JdbcDatabaseMetadataImpl.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import java.util.concurrent.ConcurrentHashMap
1717
class JdbcDatabaseMetadataImpl(database: String, val metadata: DatabaseMetaData) : ExposedDatabaseMetadata(database) {
1818
override val url: String by lazyMetadata { url }
1919
override val version: BigDecimal by lazyMetadata { BigDecimal("$databaseMajorVersion.$databaseMinorVersion") }
20+
override val majorVersion: Int by lazyMetadata { databaseMajorVersion }
21+
override val minorVersion: Int by lazyMetadata { databaseMinorVersion }
2022

2123
override val databaseDialectName: String by lazyMetadata {
2224
when (driverName) {

0 commit comments

Comments
 (0)