From a68486670808d60c681144f1f5dae3755f5b5498 Mon Sep 17 00:00:00 2001 From: Kellen Dye Date: Fri, 3 Jan 2025 12:43:11 -0500 Subject: [PATCH] Add mariadb support --- dbeam-core/pom.xml | 8 ++++++++ .../spotify/dbeam/args/JdbcConnectionUtil.java | 18 ++++++++++++++---- e2e/ddl.sql | 2 +- pom.xml | 11 +++++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/dbeam-core/pom.xml b/dbeam-core/pom.xml index ea4980a4..b58e9371 100644 --- a/dbeam-core/pom.xml +++ b/dbeam-core/pom.xml @@ -56,6 +56,10 @@ com.mysql mysql-connector-j + + org.mariadb.jdbc + mariadb-java-client + com.google.cloud.sql postgres-socket-factory @@ -64,6 +68,10 @@ com.google.cloud.sql mysql-socket-factory-connector-j-8 + + com.google.cloud.sql + mariadb-socket-factory + com.google.guava diff --git a/dbeam-core/src/main/java/com/spotify/dbeam/args/JdbcConnectionUtil.java b/dbeam-core/src/main/java/com/spotify/dbeam/args/JdbcConnectionUtil.java index 6f70b7bd..1c5b3b88 100644 --- a/dbeam-core/src/main/java/com/spotify/dbeam/args/JdbcConnectionUtil.java +++ b/dbeam-core/src/main/java/com/spotify/dbeam/args/JdbcConnectionUtil.java @@ -23,6 +23,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import java.util.Map; +import java.util.stream.Collectors; public class JdbcConnectionUtil { @@ -30,14 +31,23 @@ public class JdbcConnectionUtil { ImmutableMap.of( "postgresql", "org.postgresql.Driver", "mysql", "com.mysql.cj.jdbc.Driver", - "h2", "org.h2.Driver"); + "mariadb", "org.mariadb.jdbc.Driver", + "h2", "org.h2.Driver" + ); + + private static String driverPrefixes = + driverMapping.keySet().stream() + .map(k -> "jdbc:" + k) + .collect(Collectors.joining(", ")); public static String getDriverClass(final String url) throws ClassNotFoundException { final String[] parts = url.split(":", 3); Preconditions.checkArgument( - parts.length > 1 && "jdbc".equals(parts[0]) && driverMapping.get(parts[1]) != null, - "Invalid jdbc connection URL: %s. Expect jdbc:postgresql or jdbc:mysql as prefix.", - url); + parts.length > 1 && "jdbc".equals(parts[0]) && driverMapping.containsKey(parts[1]), + "Invalid jdbc connection URL: %s. Expected one of %s as prefix.", + url, + driverPrefixes + ); return Class.forName(driverMapping.get(parts[1])).getCanonicalName(); } } diff --git a/e2e/ddl.sql b/e2e/ddl.sql index 29d2f866..760eff4f 100644 --- a/e2e/ddl.sql +++ b/e2e/ddl.sql @@ -1,5 +1,5 @@ --- This file contatins psql views with complex types to validate and troubleshoot dbeam +-- This file contains psql views with complex types to validate and troubleshoot dbeam -- import with: -- psql -f ddl.sql postgres diff --git a/pom.xml b/pom.xml index 5fec16c1..20976458 100644 --- a/pom.xml +++ b/pom.xml @@ -135,6 +135,7 @@ 1.78.1 4.13.2 8.4.0 + 3.5.1 42.7.4 1.18.0 @@ -365,6 +366,11 @@ mysql-connector-j ${mysql.version} + + org.mariadb.jdbc + mariadb-java-client + ${mariadb.version} + com.google.cloud.sql postgres-socket-factory @@ -376,6 +382,11 @@ mysql-socket-factory-connector-j-8 ${socket-factory.version} + + com.google.cloud.sql + mariadb-socket-factory + ${socket-factory.version} + org.hamcrest hamcrest