Skip to content

Commit 1108f0c

Browse files
committed
Add MariaDB Connector/J JDBC driver (#2391)
1 parent 77d05fd commit 1108f0c

File tree

5 files changed

+30
-2
lines changed

5 files changed

+30
-2
lines changed

.github/workflows/ci.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,7 @@ jobs:
14361436
uses: gradle/actions/setup-gradle@v4
14371437

14381438
- name: Execute Gradle 'integrationTestJdbc' task
1439-
run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
1439+
run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
14401440

14411441
- name: Upload Gradle test reports
14421442
if: always()
@@ -1496,7 +1496,7 @@ jobs:
14961496
uses: gradle/actions/setup-gradle@v4
14971497

14981498
- name: Execute Gradle 'integrationTestJdbc' task
1499-
run: ./gradlew integrationTestJdbc ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
1499+
run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
15001500

15011501
- name: Upload Gradle test reports
15021502
if: always()

build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ subprojects {
3535
sqlserverDriverVersion = '11.2.3.jre8'
3636
sqliteDriverVersion = '3.47.1.0'
3737
yugabyteDriverVersion = '42.7.3-yb-2'
38+
mariadDbDriverVersion = '3.5.1'
3839
picocliVersion = '4.7.6'
3940
commonsTextVersion = '1.13.0'
4041
junitVersion = '5.11.4'

core/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ dependencies {
107107
implementation "com.microsoft.sqlserver:mssql-jdbc:${sqlserverDriverVersion}"
108108
implementation "org.xerial:sqlite-jdbc:${sqliteDriverVersion}"
109109
implementation "com.yugabyte:jdbc-yugabytedb:${yugabyteDriverVersion}"
110+
implementation "org.mariadb.jdbc:mariadb-java-client:${mariadDbDriverVersion}"
110111
implementation "org.apache.commons:commons-text:${commonsTextVersion}"
111112
testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}"
112113
testImplementation "org.junit.jupiter:junit-jupiter-params:${junitVersion}"

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineFactory.java

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public static RdbEngineStrategy create(JdbcConfig config) {
2323
return new RdbEngineSqlite();
2424
} else if (jdbcUrl.startsWith("jdbc:yugabytedb:")) {
2525
return new RdbEngineYugabyte();
26+
} else if (jdbcUrl.startsWith("jdbc:mariadb:")) {
27+
return new RdbEngineMariaDB();
2628
} else {
2729
throw new IllegalArgumentException(
2830
CoreError.JDBC_RDB_ENGINE_NOT_SUPPORTED.buildMessage(jdbcUrl));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.scalar.db.storage.jdbc;
2+
3+
import com.scalar.db.io.DataType;
4+
import java.sql.Driver;
5+
import java.sql.JDBCType;
6+
7+
class RdbEngineMariaDB extends RdbEngineMysql {
8+
@Override
9+
public Driver getDriver() {
10+
return new org.mariadb.jdbc.Driver();
11+
}
12+
13+
@Override
14+
public DataType getDataTypeForScalarDb(
15+
JDBCType type, String typeName, int columnSize, int digits, String columnDescription) {
16+
if (type == JDBCType.BOOLEAN) {
17+
// MariaDB JDBC driver maps TINYINT(1) type as a BOOLEAN JDBC type which differs from the
18+
// MySQL driver which maps it to a BIT type.
19+
return DataType.BOOLEAN;
20+
} else {
21+
return super.getDataTypeForScalarDb(type, typeName, columnSize, digits, columnDescription);
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)