diff --git a/source/test-java/org/alfresco/util/schemacomp/test/exportdb/AlfrescoMariaDBDialectExportTester.java b/source/test-java/org/alfresco/util/schemacomp/test/exportdb/AlfrescoMariaDBDialectExportTester.java
new file mode 100644
index 0000000000..37592b9293
--- /dev/null
+++ b/source/test-java/org/alfresco/util/schemacomp/test/exportdb/AlfrescoMariaDBDialectExportTester.java
@@ -0,0 +1,304 @@
+/*
+ * #%L
+ * Alfresco Repository
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.util.schemacomp.test.exportdb;
+
+import org.alfresco.util.schemacomp.ExportDb;
+import org.alfresco.util.schemacomp.ExportDbTest;
+import org.alfresco.util.schemacomp.model.*;
+import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallbackWithoutResult;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import java.util.Iterator;
+
+import static org.junit.Assert.*;
+
+/**
+ * MySQL specific test for the ExportDb class.
+ *
+ * @see ExportDbTest
+ * @author eknizat
+ */
+public class AlfrescoMariaDBDialectExportTester extends AbstractExportTester
+{
+ /**
+ * Constructor.
+ *
+ * @param exporter
+ * @param tx
+ * @param jdbcTemplate
+ */
+ public AlfrescoMariaDBDialectExportTester(ExportDb exporter, PlatformTransactionManager tx,
+ SimpleJdbcTemplate jdbcTemplate)
+ {
+ super(exporter, tx, jdbcTemplate);
+ }
+
+
+ @Override
+ protected void doExportTest() throws Exception
+ {
+ Schema schema = getSchema();
+ Table exampleTable = null;
+ Table otherTable = null;
+
+ for (DbObject dbo : schema)
+ {
+ if (dbo.getName().equals("export_test_example"))
+ {
+ exampleTable = (Table) dbo;
+ }
+ if (dbo.getName().equals("export_test_other"))
+ {
+ otherTable = (Table) dbo;
+ }
+ }
+
+ checkExampleTable(schema, exampleTable);
+ checkOtherTable(schema, otherTable);
+ }
+
+
+
+ private void checkOtherTable(Schema schema, Table otherTable)
+ {
+
+ assertNotNull("Couldn't find table export_test_other", otherTable);
+ assertSame("Incorrect parent or no parent set", schema, otherTable.getParent());
+
+ Iterator colIt = otherTable.getColumns().iterator();
+ Column col = colIt.next();
+ assertSame("Incorrect parent or no parent set", otherTable, col.getParent());
+ assertEquals("id", col.getName());
+ assertEquals("bigint", col.getType());
+ assertEquals(false, col.isNullable());
+ assertEquals(1, col.getOrder());
+ assertEquals(false, col.isAutoIncrement());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", otherTable, col.getParent());
+ assertEquals("version", col.getName());
+ assertEquals("bigint", col.getType());
+ assertEquals(false, col.isNullable());
+ assertEquals(2, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", otherTable, col.getParent());
+ assertEquals("ex_id", col.getName());
+ assertEquals("bigint", col.getType());
+ assertEquals(false, col.isNullable());
+ assertEquals(3, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", otherTable, col.getParent());
+ assertSame("Incorrect parent or no parent set", otherTable, col.getParent());
+ assertEquals("local_name", col.getName());
+ assertEquals("varchar(200)", col.getType());
+ assertEquals(false, col.isNullable());
+ assertEquals(4, col.getOrder());
+
+ assertEquals(3, otherTable.getIndexes().size());
+ Iterator indexIt = otherTable.getIndexes().iterator();
+
+ Index index = indexIt.next();
+ assertSame("Incorrect parent or no parent set", otherTable, index.getParent());
+ assertEquals("export_test_idx_other_1", index.getName());
+ assertEquals(true, index.isUnique());
+ assertEquals(2, index.getColumnNames().size());
+ assertEquals("ex_id", index.getColumnNames().get(0));
+ assertEquals("local_name", index.getColumnNames().get(1));
+
+ index = indexIt.next();
+ assertSame("Incorrect parent or no parent set", otherTable, index.getParent());
+ assertEquals("PRIMARY", index.getName());
+ assertEquals(1, index.getColumnNames().size());
+ assertEquals("id", index.getColumnNames().get(0));
+
+ PrimaryKey pk = otherTable.getPrimaryKey();
+ assertSame("Incorrect parent or no parent set", otherTable, pk.getParent());
+ assertEquals("id", pk.getColumnNames().get(0));
+ assertEquals(1, pk.getColumnOrders().get(0).intValue());
+
+ assertEquals(1, otherTable.getForeignKeys().size());
+ ForeignKey fk = otherTable.getForeignKeys().get(0);
+ assertSame("Incorrect parent or no parent set", otherTable, fk.getParent());
+ assertEquals("export_test_fk_example", fk.getName());
+ assertEquals("ex_id", fk.getLocalColumn());
+ assertEquals("export_test_example", fk.getTargetTable());
+ assertEquals("id", fk.getTargetColumn());
+ }
+
+
+ private void checkExampleTable(Schema schema, Table exampleTable)
+ {
+ assertNotNull("Couldn't find export_test_example", exampleTable);
+
+ assertSame("Incorrect parent or no parent set", schema, exampleTable.getParent());
+ assertEquals("export_test_example", exampleTable.getName());
+ Iterator colIt = exampleTable.getColumns().iterator();
+ Column col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("id", col.getName());
+ assertEquals("bigint", col.getType());
+ assertEquals(false, col.isNullable());
+ assertEquals(1, col.getOrder());
+ assertEquals(true, col.isAutoIncrement());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("description", col.getName());
+ assertEquals("text", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(2, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("fixes_from_schema", col.getName());
+ assertEquals("int", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(3, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("fixes_to_schema", col.getName());
+ assertEquals("int", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(4, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("applied_to_schema", col.getName());
+ assertEquals("int", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(5, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("target_schema", col.getName());
+ assertEquals("int", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(6, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("applied_on_date", col.getName());
+ assertEquals("datetime", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(7, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("applied_to_server", col.getName());
+ assertEquals("varchar(64)", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(8, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("was_executed", col.getName());
+ assertEquals("bit", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(9, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("succeeded", col.getName());
+ assertEquals("bit", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(10, col.getOrder());
+
+ col = colIt.next();
+ assertSame("Incorrect parent or no parent set", exampleTable, col.getParent());
+ assertEquals("report", col.getName());
+ assertEquals("text", col.getType());
+ assertEquals(true, col.isNullable());
+ assertEquals(11, col.getOrder());
+
+ PrimaryKey pk = exampleTable.getPrimaryKey();
+ assertSame("Incorrect parent or no parent set", exampleTable, pk.getParent());
+ assertEquals("id", pk.getColumnNames().get(0));
+ assertEquals(1, pk.getColumnOrders().get(0).intValue());
+ }
+
+
+ @Override
+ protected void doDatabaseSetup()
+ {
+ // Create database objects: this decouples test code from the actual schema which is
+ // free to change without breaking these tests.
+
+ final String[] createStatements = new String[]
+ {
+ "DROP TABLE IF EXISTS export_test_other CASCADE",
+ "DROP TABLE IF EXISTS export_test_example CASCADE",
+
+ "CREATE TABLE export_test_example" +
+ " (" +
+ " id BIGINT NOT NULL AUTO_INCREMENT," +
+ " description TEXT," +
+ " fixes_from_schema INTEGER," +
+ " fixes_to_schema INTEGER," +
+ " applied_to_schema INTEGER," +
+ " target_schema INTEGER," +
+ " applied_on_date DATETIME," +
+ " applied_to_server VARCHAR(64)," +
+ " was_executed BIT," +
+ " succeeded BIT," +
+ " report TEXT," +
+ " PRIMARY KEY (id)" +
+ " ) ENGINE=InnoDB",
+
+ "CREATE TABLE export_test_other" +
+ " (" +
+ " id BIGINT NOT NULL," +
+ " version BIGINT NOT NULL," +
+ " ex_id BIGINT NOT NULL," +
+ " local_name VARCHAR(200) NOT NULL," +
+ " CONSTRAINT export_test_fk_example FOREIGN KEY (ex_id) REFERENCES export_test_example (id)," +
+ " PRIMARY KEY (id)" +
+ " ) ENGINE=InnoDB",
+
+ "CREATE UNIQUE INDEX export_test_idx_other_1 ON export_test_other (ex_id, local_name)",
+
+ "CREATE INDEX export_test_idx_other_2 ON export_test_other (ex_id)"
+ };
+
+ TransactionTemplate tt = new TransactionTemplate(tx);
+ tt.execute(new TransactionCallbackWithoutResult()
+ {
+ @Override
+ protected void doInTransactionWithoutResult(TransactionStatus status)
+ {
+ for (String sql : createStatements)
+ {
+ jdbcTemplate.update(sql);
+ }
+ }
+ });
+ }
+}