diff --git a/symmetric-assemble/src/docbook/databases.xml b/symmetric-assemble/src/docbook/databases.xml
index 230314a2f9..6c1e161a9f 100644
--- a/symmetric-assemble/src/docbook/databases.xml
+++ b/symmetric-assemble/src/docbook/databases.xml
@@ -56,6 +56,16 @@
Y
Y
+
+ MariaDB
+ 5.1 and above
+ Y
+ Y
+ Y
+ Y
+ Y
+ Y
+
PostgreSQL
8.2.5 and above
@@ -295,6 +305,12 @@ CREATE UNIQUE INDEX IDX_D_CHANNEL_ID ON SYM_DATA (DATA_ID, CHANNEL_ID) LOCAL
to true
.
+
+ MariaDB
+
+ See MySQL notes.
+
+
PostgreSQL
diff --git a/symmetric-assemble/src/docbook/introduction.xml b/symmetric-assemble/src/docbook/introduction.xml
index f72a4dbb2c..b62ae652f4 100644
--- a/symmetric-assemble/src/docbook/introduction.xml
+++ b/symmetric-assemble/src/docbook/introduction.xml
@@ -32,6 +32,10 @@
MySQL version 5.0.2 and above
+
+ MariaDB version 5.1 and above
+
+
Oracle version 10g and above
diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/JdbcSymmetricDialectFactory.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/JdbcSymmetricDialectFactory.java
index 38cd748e0f..ee7a45670c 100644
--- a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/JdbcSymmetricDialectFactory.java
+++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/JdbcSymmetricDialectFactory.java
@@ -31,6 +31,7 @@
import org.jumpmind.db.platform.hsqldb2.HsqlDb2DatabasePlatform;
import org.jumpmind.db.platform.informix.InformixDatabasePlatform;
import org.jumpmind.db.platform.interbase.InterbaseDatabasePlatform;
+import org.jumpmind.db.platform.mariadb.MariaDBDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSqlDatabasePlatform;
import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform;
import org.jumpmind.db.platform.oracle.OracleDatabasePlatform;
@@ -46,6 +47,7 @@
import org.jumpmind.symmetric.db.hsqldb2.HsqlDb2SymmetricDialect;
import org.jumpmind.symmetric.db.informix.InformixSymmetricDialect;
import org.jumpmind.symmetric.db.interbase.InterbaseSymmetricDialect;
+import org.jumpmind.symmetric.db.mariadb.MariaDBSymmetricDialect;
import org.jumpmind.symmetric.db.mssql.MsSqlSymmetricDialect;
import org.jumpmind.symmetric.db.mysql.MySqlSymmetricDialect;
import org.jumpmind.symmetric.db.oracle.OracleSymmetricDialect;
@@ -78,8 +80,10 @@ public ISymmetricDialect create() {
AbstractSymmetricDialect dialect = null;
- if (platform instanceof MySqlDatabasePlatform) {
- dialect = new MySqlSymmetricDialect(parameterService, platform);
+ if (platform instanceof MariaDBDatabasePlatform) {
+ dialect = new MariaDBSymmetricDialect(parameterService, platform);
+ } else if (platform instanceof MySqlDatabasePlatform) {
+ dialect = new MySqlSymmetricDialect(parameterService, platform);
} else if (platform instanceof OracleDatabasePlatform) {
dialect = new OracleSymmetricDialect(parameterService, platform);
} else if (platform instanceof MsSqlDatabasePlatform) {
diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mariadb/MariaDBSymmetricDialect.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mariadb/MariaDBSymmetricDialect.java
new file mode 100644
index 0000000000..5c50cad47f
--- /dev/null
+++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mariadb/MariaDBSymmetricDialect.java
@@ -0,0 +1,14 @@
+package org.jumpmind.symmetric.db.mariadb;
+
+import org.jumpmind.db.platform.IDatabasePlatform;
+import org.jumpmind.symmetric.db.mysql.MySqlSymmetricDialect;
+import org.jumpmind.symmetric.service.IParameterService;
+
+public class MariaDBSymmetricDialect extends MySqlSymmetricDialect {
+
+ public MariaDBSymmetricDialect(IParameterService parameterService,
+ IDatabasePlatform platform) {
+ super(parameterService, platform);
+ }
+
+}
diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java
index a2f7f41cdf..dd1ce532c1 100644
--- a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java
+++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java
@@ -20,6 +20,6 @@ private DatabaseNamesConstants() {
public final static String DB2 = "db2";
public final static String POSTGRESQL = "postgres";
public final static String SYBASE = "sybase";
-
+ public final static String MARIADB = "mariadb";
}
diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java
index d59dc4af57..f5c0f71678 100644
--- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java
+++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java
@@ -64,7 +64,7 @@ public enum Format {
};
public enum Compatible {
- DB2, DERBY, FIREBIRD, GREENPLUM, H2, HSQLDB, HSQLDB2, INFORMIX, INTERBASE, MSSQL, MYSQL, ORACLE, POSTGRES, SYBASE, SQLITE
+ DB2, DERBY, FIREBIRD, GREENPLUM, H2, HSQLDB, HSQLDB2, INFORMIX, INTERBASE, MSSQL, MYSQL, ORACLE, POSTGRES, SYBASE, SQLITE, MARIADB
};
private Format format = Format.SQL;
diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java
index 5d05aa1f0e..8753840ccb 100644
--- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java
+++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java
@@ -40,6 +40,7 @@
import org.jumpmind.db.platform.hsqldb2.HsqlDb2DatabasePlatform;
import org.jumpmind.db.platform.informix.InformixDatabasePlatform;
import org.jumpmind.db.platform.interbase.InterbaseDatabasePlatform;
+import org.jumpmind.db.platform.mariadb.MariaDBDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSqlDatabasePlatform;
import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform;
import org.jumpmind.db.platform.oracle.OracleDatabasePlatform;
@@ -76,6 +77,7 @@ public class JdbcDatabasePlatformFactory {
addPlatform(platforms, "HsqlDb", HsqlDbDatabasePlatform.class);
addPlatform(platforms, "HSQL Database Engine2", HsqlDb2DatabasePlatform.class);
addPlatform(platforms, "Interbase", InterbaseDatabasePlatform.class);
+ addPlatform(platforms, "MariaDB", MariaDBDatabasePlatform.class);
addPlatform(platforms, "MsSQL", MsSqlDatabasePlatform.class);
addPlatform(platforms, "microsoft sql server11", MsSqlDatabasePlatform.class);
addPlatform(platforms, "microsoft sql server", MsSqlDatabasePlatform.class);
@@ -189,6 +191,16 @@ protected static String[] determineDatabaseNameVersionSubprotocol(DataSource dat
nameVersion[1] = Integer.toString(getGreenplumVersion(connection));
}
}
+
+ /*
+ * if the productName is MySQL, it could be either MysSQL or MariaDB
+ * query the metadata to determine which one it is
+ */
+ if (nameVersion[0].equalsIgnoreCase(DatabaseNamesConstants.MYSQL)) {
+ if (isMariaDBDatabase(connection)) {
+ nameVersion[0] = DatabaseNamesConstants.MARIADB;
+ }
+ }
return nameVersion;
} catch (SQLException ex) {
@@ -237,6 +249,37 @@ private static boolean isGreenplumDatabase(Connection connection) {
return isGreenplum;
}
+ private static boolean isMariaDBDatabase(Connection connection) {
+ Statement stmt = null;
+ ResultSet rs = null;
+ String productName = null;
+ boolean isMariaDB = false;
+ try {
+ stmt = connection.createStatement();
+ rs = stmt.executeQuery(MariaDBDatabasePlatform.SQL_GET_MARIADB_NAME);
+ while (rs.next()) {
+ productName = rs.getString(1);
+ }
+ if (productName != null && StringUtils.containsIgnoreCase(productName, DatabaseNamesConstants.MARIADB)) {
+ isMariaDB = true;
+ }
+ } catch (SQLException ex) {
+ // ignore the exception, if it is caught, then this is most likely
+ // not a mariadb database
+ } finally {
+ try {
+ if (rs != null) {
+ rs.close();
+ }
+ if (stmt != null) {
+ stmt.close();
+ }
+ } catch (SQLException ex) {
+ }
+ }
+ return isMariaDB;
+ }
+
private static int getGreenplumVersion(Connection connection) {
Statement stmt = null;
ResultSet rs = null;
diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java
new file mode 100644
index 0000000000..616733996b
--- /dev/null
+++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to JumpMind Inc under one or more contributor
+ * license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding
+ * copyright ownership. JumpMind Inc licenses this file
+ * to you under the GNU Lesser General Public License (the
+ * "License"); you may not use this file except in compliance
+ * with the License.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see
+ * .
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jumpmind.db.platform.mariadb;
+
+import javax.sql.DataSource;
+
+import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform;
+import org.jumpmind.db.sql.SqlTemplateSettings;
+
+public class MariaDBDatabasePlatform extends MySqlDatabasePlatform {
+
+ public static final String SQL_GET_MARIADB_NAME = "select variable_value from information_schema.global_variables where variable_name='VERSION'";
+
+ public MariaDBDatabasePlatform(DataSource dataSource,
+ SqlTemplateSettings settings) {
+ super(dataSource, settings);
+ }
+
+}
diff --git a/symmetric-jdbc/src/test/resources/db-test.properties b/symmetric-jdbc/src/test/resources/db-test.properties
index 385c7d7a92..7cbe4a6b07 100644
--- a/symmetric-jdbc/src/test/resources/db-test.properties
+++ b/symmetric-jdbc/src/test/resources/db-test.properties
@@ -7,6 +7,12 @@ mysql.db.password=admin
mysql.client.db.url=jdbc:mysql://localhost/SymmetricClient?tinyInt1isBit=false
mysql.root.db.url=jdbc:mysql://localhost/SymmetricRoot?tinyInt1isBit=false
+mariadb.db.driver=com.mysql.jdbc.Driver
+mariadb.db.user=root
+mariadb.db.password=admin
+mariadb.client.db.url=jdbc:mysql://localhost/SymmetricClient?tinyInt1isBit=false
+mariadb.root.db.url=jdbc:mysql://localhost/SymmetricRoot?tinyInt1isBit=false
+
oracle.db.driver=oracle.jdbc.driver.OracleDriver
oracle.root.db.user=SymmetricRoot
oracle.root.db.password=admin