From 7d81e3b5f26b03c4b6ccf330f94fc206c027a945 Mon Sep 17 00:00:00 2001
From: Taras Amelianovych <97164517+Tamelianovych@users.noreply.github.com>
Date: Mon, 27 Jan 2025 15:16:51 +0100
Subject: [PATCH] [DAT-12910]/[DAT-19440]/[DAT-19439] DiffTests changes (#982)

* DAT-12910 refactored data for Diff tests/Added additional assertion (check objects folder)

* DAT-12910 small test fixes, (removed createPackage/createPackageBody PostgreSQL, MariaDB, MySQL, and SQL Server (MSSQL) do not have a direct CREATE PACKAGE)

* DAT-12910 changed config to diff/diffChangelog

* DAT-12910 changed create-infra.sh
---
 .github/workflows/advanced.yml                |   4 +-
 ...dTest.groovy => DiffChangelogTests.groovy} |  82 ++++---
 .../harness/diff/DiffCommandTestHelper.groovy |  16 ++
 .../liquibase/harness/diff/DiffTests.groovy   |  65 ++++++
 .../changelogs/mariadb10.3_to_mariadb10.2.xml | 101 ---------
 .../changelogs/mariadb10.5_to_mariadb10.4.xml |  72 +++++++
 .../changelogs/mariadb10.7_to_mariadb10.6.xml | 108 ++++++++--
 .../changelogs/mssql2019_to_mssql2022.xml     | 116 ----------
 .../changelogs/mssql2022_to_mssql2017.xml     |  72 +++++++
 .../changelogs/mssql2022_to_mssql2019.xml     | 114 ++++++++--
 .../diff/changelogs/mysql8.4_to_mysql5.7.xml  | 174 +++++++++++++++
 .../diff/changelogs/mysql8_to_mysql5.6.xml    | 173 +++++++++++++++
 .../diff/changelogs/mysql8_to_mysql5.7.xml    | 101 ---------
 .../oracle18.4.0_to_oracle18.3.0.xml          | 111 ----------
 .../oracle18.4.0_to_oracle21.3.0.xml          | 111 ----------
 .../oracle21.3.0_to_oracle18.4.0.xml          | 111 ----------
 .../postgresql14_to_postgresql13.xml          |  99 ++++++++-
 .../postgresql17_to_postgresql16.xml          | 203 ++++++++++++++++++
 .../liquibase/harness/diff/diffDatabases.yml  |  62 +++---
 .../mariadb10.5_to_mariadb10.4.txt            |  15 +-
 .../mariadb10.7_to_mariadb10.6.txt            |  13 +-
 .../expectedDiff/mssql2019_to_mssql2022.txt   |  81 -------
 .../expectedDiff/mssql2022_to_mssql2017.txt   |  17 +-
 .../expectedDiff/mssql2022_to_mssql2019.txt   |  25 ++-
 ..._mysql5.7.txt => mysql8.4_to_mysql5.7.txt} |  22 +-
 ...mariadb10.2.txt => mysql8_to_mysql5.6.txt} |  22 +-
 .../oracle18.4.0_to_oracle18.3.0.txt          |  79 -------
 .../oracle18.4.0_to_oracle21.3.0.txt          |  79 -------
 .../oracle21.3.0_to_oracle18.4.0.txt          |  79 -------
 .../postgresql14_to_postgresql13.txt          |  15 +-
 .../postgresql17_to_postgresql16.txt          |  93 ++++++++
 .../harness/DiffChangelogTest.groovy          |   6 +
 .../groovy/liquibase/harness/DiffTest.groovy  |   4 +-
 src/test/resources/automation-runner.sh       |   3 +
 src/test/resources/docker/create-infra.sh     |   8 +-
 35 files changed, 1307 insertions(+), 1149 deletions(-)
 rename src/main/groovy/liquibase/harness/diff/{DiffCommandTest.groovy => DiffChangelogTests.groovy} (63%)
 create mode 100644 src/main/groovy/liquibase/harness/diff/DiffTests.groovy
 delete mode 100644 src/main/resources/liquibase/harness/diff/changelogs/mariadb10.3_to_mariadb10.2.xml
 delete mode 100644 src/main/resources/liquibase/harness/diff/changelogs/mssql2019_to_mssql2022.xml
 create mode 100644 src/main/resources/liquibase/harness/diff/changelogs/mysql8.4_to_mysql5.7.xml
 create mode 100644 src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.6.xml
 delete mode 100644 src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.7.xml
 delete mode 100644 src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle18.3.0.xml
 delete mode 100644 src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle21.3.0.xml
 delete mode 100644 src/main/resources/liquibase/harness/diff/changelogs/oracle21.3.0_to_oracle18.4.0.xml
 create mode 100644 src/main/resources/liquibase/harness/diff/changelogs/postgresql17_to_postgresql16.xml
 delete mode 100644 src/main/resources/liquibase/harness/diff/expectedDiff/mssql2019_to_mssql2022.txt
 rename src/main/resources/liquibase/harness/diff/expectedDiff/{mysql8_to_mysql5.7.txt => mysql8.4_to_mysql5.7.txt} (89%)
 rename src/main/resources/liquibase/harness/diff/expectedDiff/{mariadb10.3_to_mariadb10.2.txt => mysql8_to_mysql5.6.txt} (83%)
 delete mode 100644 src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle18.3.0.txt
 delete mode 100644 src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle21.3.0.txt
 delete mode 100644 src/main/resources/liquibase/harness/diff/expectedDiff/oracle21.3.0_to_oracle18.4.0.txt
 create mode 100644 src/main/resources/liquibase/harness/diff/expectedDiff/postgresql17_to_postgresql16.txt
 create mode 100644 src/test/groovy/liquibase/harness/DiffChangelogTest.groovy

diff --git a/.github/workflows/advanced.yml b/.github/workflows/advanced.yml
index c25063871..9dc741056 100644
--- a/.github/workflows/advanced.yml
+++ b/.github/workflows/advanced.yml
@@ -28,7 +28,7 @@ on:
         default: "[\"mysql-5.6\",\"mysql-5.7\",\"mysql-8\",\"mysql-8.4\",\"postgres-12\",\"postgres-13\",\"postgres-14\",\"postgres-15\",\"postgres-16\",\"postgres-17\",\"mariadb-10.2\",\"mariadb-10.3\",\"mariadb-10.4\",\"mariadb-10.5\",\"mariadb-10.6\",
         \"mariadb-10.7\",\"mariadb-11.4\",\"mssql-2017\",\"mssql-2019\",\"mssql-2022\",\"crdb-23.1\",\"crdb-23.2\",\"crdb-24.1\",\"percona-xtradb-cluster-5.7\",\"percona-xtradb-cluster-8.0\",
         \"edb-edb-12\",\"edb-edb-13\",\"edb-edb-14\",\"edb-edb-15\",\"edb-edb-16\",\"db2-luw\",\"H2Database-2.2\",\"sqlite\",\"derby\",
-        \"firebird-3\",\"firebird-4\",\"hsqldb-2.4\",\"hsqldb-2.5\",\"diff\",\"tidb\"]"
+        \"firebird-3\",\"firebird-4\",\"hsqldb-2.4\",\"hsqldb-2.5\",\"tidb\",\"diff\",\"diffChangelog\"]"
 
 jobs:
   check_build_safety:
@@ -53,7 +53,7 @@ jobs:
         "postgres-12","postgres-13","postgres-14","postgres-15","postgres-16","postgres-17","mariadb-10.2","mariadb-10.3","mariadb-10.4","mariadb-10.5","mariadb-10.6",
         "mariadb-10.7","mariadb-11.4","mssql-2017","mssql-2019","mssql-2022","crdb-23.1","crdb-23.2","crdb-24.1","percona-xtradb-cluster-5.7","percona-xtradb-cluster-8.0",
         "edb-edb-12","edb-edb-13","edb-edb-14","edb-edb-15","edb-edb-16","db2-luw","H2Database-2.2","sqlite","derby","firebird-3","firebird-4",
-        "hsqldb-2.4","hsqldb-2.5","diff","tidb"]' }}
+        "hsqldb-2.4","hsqldb-2.5","tidb","diff",\"diffChangelog\"]' }}
       testClasses: ${{ 'AdvancedHarnessSuiteTest' }}
     steps:
       - uses: actions/checkout@v4
diff --git a/src/main/groovy/liquibase/harness/diff/DiffCommandTest.groovy b/src/main/groovy/liquibase/harness/diff/DiffChangelogTests.groovy
similarity index 63%
rename from src/main/groovy/liquibase/harness/diff/DiffCommandTest.groovy
rename to src/main/groovy/liquibase/harness/diff/DiffChangelogTests.groovy
index 817ebf3ac..8ed74ce6f 100644
--- a/src/main/groovy/liquibase/harness/diff/DiffCommandTest.groovy
+++ b/src/main/groovy/liquibase/harness/diff/DiffChangelogTests.groovy
@@ -1,5 +1,6 @@
 package liquibase.harness.diff
 
+import com.datical.liquibase.ext.config.LiquibaseProConfiguration
 import liquibase.database.jvm.JdbcConnection
 import liquibase.harness.config.DatabaseUnderTest
 import liquibase.harness.config.TestConfig
@@ -9,14 +10,16 @@ import spock.lang.Specification
 import spock.lang.Unroll
 
 import static liquibase.harness.diff.DiffCommandTestHelper.*
-import static liquibase.harness.util.TestUtils.*
-import static liquibase.harness.util.FileUtils.*
+import static liquibase.harness.util.FileUtils.deleteFile
+import static liquibase.harness.util.FileUtils.getResourceContent
+import static liquibase.harness.util.TestUtils.chooseRollbackStrategy
+import static liquibase.harness.util.TestUtils.executeCommandScope
 
-class DiffCommandTest extends Specification {
+class DiffChangelogTests extends Specification {
     @Shared
-    RollbackStrategy strategy;
+    RollbackStrategy strategy
     @Shared
-    List<DatabaseUnderTest> databases;
+    List<DatabaseUnderTest> databases
 
     def setupSpec() {
         databases = TestConfig.instance.getFilteredDatabasesUnderTest()
@@ -64,13 +67,44 @@ class DiffCommandTest extends Specification {
             executeCommandScope("diffChangelog", argsMap)
         }
 
+        and: "verify that the 'stored objects' directories are created"
+        argsMapRef.put("referenceUrl", testInput.targetDatabase.url)
+        argsMapRef.put("referenceUsername", testInput.targetDatabase.username)
+        argsMapRef.put("referencePassword", testInput.targetDatabase.password)
+        argsMapRef.put("changelogFile", testInput.pathToGeneratedXmlDiffChangelogFile)
+        Map<String, Object> scopeValues = new HashMap<>()
+        scopeValues.put(LiquibaseProConfiguration.INLINE_SQL_KEY.getKey(), false)
+        executeCommandScope("diffChangelog", argsMapRef, scopeValues)
+        File expectedDiffFolder = new File(testInput.pathToExpectedDiffFolder)
+        File[] subDirs = expectedDiffFolder.listFiles(new FileFilter() {
+            @Override
+            boolean accept(File file) {
+                return file.isDirectory()
+            }
+        })
+        Optional<File> objectsFolder = Arrays.stream(subDirs)
+                .filter(f -> f.getName().startsWith("objects-"))
+                .findFirst()
+
+        if (objectsFolder.isEmpty()) {
+            throw new RuntimeException("No 'objects' folder created inside " + testInput.pathToExpectedDiffFolder)
+        }
+        File actualObjectsFolder = objectsFolder.get()
+        for (String expectedObjectType : Arrays.asList("function", "trigger", "storedprocedure")) {
+            File objectDir = new File(actualObjectsFolder, expectedObjectType)
+            assert objectDir.exists() && objectDir.isDirectory() :
+                    "Directory for stored object '" + expectedObjectType + "' was not created at path: " + objectDir.getPath() + "!"
+        }
+
         then: "validate generated diff changelog"
         assert validateGeneratedDiffChangelog(testInput)
 
         cleanup: "try to rollback changes out from target database, delete generated changelog file"
         argsMap.put("changelogFile", testInput.pathToChangelogFile)
+        argsMapRef.put("changelogFile", testInput.pathToReferenceChangelogFile)
         strategy.performRollback(argsMap)
         strategy.performRollback(argsMapRef)
+        clearFolder(actualObjectsFolder.getAbsolutePath())
         for (Map.Entry<String, String> entry : map.entrySet()) {
             deleteFile(entry.value)
         }
@@ -78,42 +112,4 @@ class DiffCommandTest extends Specification {
         where:
         testInput << buildTestInput()
     }
-
-    @Unroll
-    def "apply diff test against #testInput.referenceDatabase.name #testInput.referenceDatabase.version to targetDatabase #testInput.targetDatabase.name #testInput.targetDatabase.version"() {
-        given: "read input data for diff test"
-        Map<String, Object> argsMap = new HashMap()
-        argsMap.put("url", testInput.targetDatabase.url)
-        argsMap.put("username", testInput.targetDatabase.username)
-        argsMap.put("password", testInput.targetDatabase.password)
-        argsMap.put("referenceUrl", testInput.referenceDatabase.url)
-        argsMap.put("referenceUsername", testInput.referenceDatabase.username)
-        argsMap.put("referencePassword", testInput.referenceDatabase.password)
-        argsMap.put("changelogFile", testInput.pathToChangelogFile)
-
-        and: "check databases are online"
-        assert testInput.targetDatabase.database.getConnection() instanceof JdbcConnection: "Target database " +
-                "${testInput.targetDatabase.name}${testInput.targetDatabase.version} is offline!"
-        assert testInput.referenceDatabase.database.getConnection() instanceof JdbcConnection: "Reference database " +
-                "${testInput.referenceDatabase.name}${testInput.referenceDatabase.version} is offline!"
-
-        when: "execute update and diff commands"
-
-        executeCommandScope("update", argsMap)
-        argsMap.put("excludeObjects", "(?i)posts, (?i)authors, (?i)databasechangelog, (?i)databasechangeloglock")
-        String generatedDiffContent = removeDatabaseInfoFromDiff(executeCommandScope("diff", argsMap).toString())
-
-        then: "validate generated diff"
-        String expectedDiffContent = removeDatabaseInfoFromDiff(getResourceContent(testInput.pathToExpectedDiffFile))
-        assert expectedDiffContent == generatedDiffContent
-
-        cleanup: "rollback changes"
-        strategy.performRollback(argsMap)
-
-        where:
-        testInput << buildTestInput()
-    }
-    def cleanupSpec() {
-        strategy.cleanupDatabase(databases)
-    }
 }
diff --git a/src/main/groovy/liquibase/harness/diff/DiffCommandTestHelper.groovy b/src/main/groovy/liquibase/harness/diff/DiffCommandTestHelper.groovy
index 6949f0283..234ddf9cf 100644
--- a/src/main/groovy/liquibase/harness/diff/DiffCommandTestHelper.groovy
+++ b/src/main/groovy/liquibase/harness/diff/DiffCommandTestHelper.groovy
@@ -6,7 +6,11 @@ import liquibase.harness.config.DatabaseUnderTest
 import liquibase.harness.config.TestConfig
 import liquibase.harness.util.DatabaseConnectionUtil
 import liquibase.ui.UIService
+import org.apache.commons.io.FileUtils
 import org.yaml.snakeyaml.Yaml
+
+import java.nio.file.Path
+import java.nio.file.Paths
 import java.util.stream.Collectors
 
 import static liquibase.harness.util.FileUtils.*
@@ -91,6 +95,7 @@ class DiffCommandTestHelper {
                             "${targetDatabase.name}${targetDatabase.version}.json")
                     .targetDatabase(targetDatabase)
                     .referenceDatabase(referenceDatabase)
+                    .pathToExpectedDiffFolder("src/main/resources${baseDiffPath}" + "expectedDiffChangelogs/")
                     .build())
         }
         new DatabaseConnectionUtil().initializeDatabasesConnection(databasesToConnect)
@@ -117,6 +122,9 @@ class DiffCommandTestHelper {
         map.put("createView", new ArrayList<>(List.of("dropView", "drop view")))
         map.put("createIndex", new ArrayList<>(List.of("dropIndex", "drop index")))
         map.put("createSequence", new ArrayList<>(List.of("dropSequence", "drop sequence")))
+        map.put("createFunction", new ArrayList<>(List.of("dropFunction", "drop function")))
+        map.put("createTrigger", new ArrayList<>(List.of("dropTrigger", "drop trigger")))
+        map.put("createProcedure", new ArrayList<>(List.of("dropProcedure", "drop procedure")))
 
         if(dbName.equals("mariadb") || dbName.equals("mysql")) {
             map.put("addForeignKey", new ArrayList<>(List.of("dropForeignKey", "drop foreign key")))
@@ -156,6 +164,13 @@ class DiffCommandTestHelper {
                 .replaceAll(replacementRegexpWS, "")
     }
 
+    static void clearFolder(String pathToObjectDir) {
+        Path path = Paths.get(pathToObjectDir)
+        if (path.toFile().isDirectory()) {
+            FileUtils.forceDelete(new File(pathToObjectDir))
+        }
+    }
+
     @Builder
     static class TestInput {
         String pathToExpectedDiffFile
@@ -165,6 +180,7 @@ class DiffCommandTestHelper {
         String pathToGeneratedSqlDiffChangelogFile
         String pathToGeneratedYmlDiffChangelogFile
         String pathToGeneratedJsonDiffChangelogFile
+        String pathToExpectedDiffFolder
         DatabaseUnderTest referenceDatabase
         DatabaseUnderTest targetDatabase
     }
diff --git a/src/main/groovy/liquibase/harness/diff/DiffTests.groovy b/src/main/groovy/liquibase/harness/diff/DiffTests.groovy
new file mode 100644
index 000000000..d78881205
--- /dev/null
+++ b/src/main/groovy/liquibase/harness/diff/DiffTests.groovy
@@ -0,0 +1,65 @@
+package liquibase.harness.diff
+
+import com.datical.liquibase.ext.config.LiquibaseProConfiguration
+import liquibase.database.jvm.JdbcConnection
+import liquibase.harness.config.DatabaseUnderTest
+import liquibase.harness.config.TestConfig
+import liquibase.harness.util.rollback.RollbackStrategy
+import spock.lang.Shared
+import spock.lang.Specification
+import spock.lang.Unroll
+
+import static liquibase.harness.diff.DiffCommandTestHelper.*
+import static liquibase.harness.util.TestUtils.*
+import static liquibase.harness.util.FileUtils.*
+
+class DiffTests extends Specification {
+    @Shared
+    RollbackStrategy strategy
+    @Shared
+    List<DatabaseUnderTest> databases
+
+    def setupSpec() {
+        databases = TestConfig.instance.getFilteredDatabasesUnderTest()
+        strategy = chooseRollbackStrategy()
+        strategy.prepareForRollback(databases)
+    }
+
+    @Unroll
+    def "apply diff test against #testInput.referenceDatabase.name #testInput.referenceDatabase.version to targetDatabase #testInput.targetDatabase.name #testInput.targetDatabase.version"() {
+        given: "read input data for diff test"
+        Map<String, Object> argsMap = new HashMap()
+        argsMap.put("url", testInput.targetDatabase.url)
+        argsMap.put("username", testInput.targetDatabase.username)
+        argsMap.put("password", testInput.targetDatabase.password)
+        argsMap.put("referenceUrl", testInput.referenceDatabase.url)
+        argsMap.put("referenceUsername", testInput.referenceDatabase.username)
+        argsMap.put("referencePassword", testInput.referenceDatabase.password)
+        argsMap.put("changelogFile", testInput.pathToChangelogFile)
+
+        and: "check databases are online"
+        assert testInput.targetDatabase.database.getConnection() instanceof JdbcConnection: "Target database " +
+                "${testInput.targetDatabase.name}${testInput.targetDatabase.version} is offline!"
+        assert testInput.referenceDatabase.database.getConnection() instanceof JdbcConnection: "Reference database " +
+                "${testInput.referenceDatabase.name}${testInput.referenceDatabase.version} is offline!"
+
+        when: "execute update and diff commands"
+
+        executeCommandScope("update", argsMap)
+        argsMap.put("excludeObjects", "(?i)posts, (?i)authors, (?i)databasechangelog, (?i)databasechangeloglock")
+        String generatedDiffContent = removeDatabaseInfoFromDiff(executeCommandScope("diff", argsMap).toString())
+
+        then: "validate generated diff"
+        String expectedDiffContent = removeDatabaseInfoFromDiff(getResourceContent(testInput.pathToExpectedDiffFile))
+        assert expectedDiffContent == generatedDiffContent
+
+        cleanup: "rollback changes"
+        strategy.performRollback(argsMap)
+
+        where:
+        testInput << buildTestInput()
+    }
+    def cleanupSpec() {
+        strategy.cleanupDatabase(databases)
+    }
+}
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.3_to_mariadb10.2.xml b/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.3_to_mariadb10.2.xml
deleted file mode 100644
index 308b4feae..000000000
--- a/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.3_to_mariadb10.2.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<databaseChangeLog
-        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
-    <!--          FOREIGN KEY CONSTRAINT            -->
-
-    <changeSet id="1" author="as">
-        <createTable tableName="test_table_base">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="2" author="as">
-        <createTable tableName="test_table_reference">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-            <column name="test_column" type="INT">
-                <constraints nullable="false" unique="true"/>
-            </column>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="4" author="as">
-        <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
-        </rollback>
-    </changeSet>
-
-    <!--          COLUMN            -->
-    <changeSet id="5" author="as">
-        <createTable tableName="test_table_for_column">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="6" author="as">
-        <addColumn tableName="test_table_for_column">
-            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
-            <column name="intColumn" type="int" valueNumeric="5"/>
-            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
-        </addColumn>
-    </changeSet>
-
-    <!--          INDEX            -->
-    <changeSet id="7" author="as" labels="tableForCreateIndex">
-        <createTable tableName="test_table_for_index">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="8" author="as">
-        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
-            <column name="id"/>
-        </createIndex>
-        <rollback>
-            <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
-        </rollback>
-    </changeSet>
-
-    <!--          VIEW          -->
-    <changeSet id="10" author="as">
-        <createView viewName="test_view">
-            select id, first_name, last_name, email from authors
-        </createView>
-    </changeSet>
-
-    <!--          UNIQUE CONSTRAINT          -->
-    <changeSet id="11" author="as">
-        <createTable tableName="test_table_for_uc">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="12" author="as">
-        <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_for_uc"
-          validate="true"/>
-        <rollback>
-            <dropUniqueConstraint tableName="test_table_for_uc"
-              constraintName="test_unique_constraint"/>
-        </rollback>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.5_to_mariadb10.4.xml b/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.5_to_mariadb10.4.xml
index a34d1b732..bda3c9cb0 100644
--- a/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.5_to_mariadb10.4.xml
+++ b/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.5_to_mariadb10.4.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <databaseChangeLog
         xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
@@ -109,4 +110,75 @@
               constraintName="test_unique_constraint"/>
         </rollback>
     </changeSet>
+
+    <!-- FUNCTION -->
+    <changeSet id="13" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                replaceIfExists="true"
+                functionName="test_function">CREATE FUNCTION test_function()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="14"  author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function1()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="15"  author="as">
+        <pro:createPackageBody encoding="UTF-8"
+                               packageBodyName="Test package">CREATE FUNCTION test_function2()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackageBody>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="16"  author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger BEFORE UPDATE ON posts
+            FOR EACH ROW BEGIN END;
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="17" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE PROCEDURE test_procedure()
+        BEGIN
+        END;
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.7_to_mariadb10.6.xml b/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.7_to_mariadb10.6.xml
index a34d1b732..5e867901c 100644
--- a/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.7_to_mariadb10.6.xml
+++ b/src/main/resources/liquibase/harness/diff/changelogs/mariadb10.7_to_mariadb10.6.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <databaseChangeLog
         xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
@@ -27,16 +28,16 @@
 
     <changeSet id="4" author="as">
         <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
+                                  baseTableName="test_table_base"
+                                  constraintName="test_fk"
+                                  onDelete="CASCADE"
+                                  onUpdate="RESTRICT"
+                                  referencedColumnNames="test_column"
+                                  referencedTableName="test_table_reference"
+                                  validate="true"/>
         <rollback>
             <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
+                                      constraintName="test_fk"/>
         </rollback>
     </changeSet>
 
@@ -68,16 +69,16 @@
         </createIndex>
         <rollback>
             <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
+                       indexName="idx_first_name"/>
         </rollback>
     </changeSet>
 
     <!--          SEQUENCE          -->
     <changeSet id="9" author="as">
         <createSequence incrementBy="1"
-          minValue="1"
-          sequenceName="test_sequence"
-          startValue="1"/>
+                        minValue="1"
+                        sequenceName="test_sequence"
+                        startValue="1"/>
         <rollback>
             <dropSequence sequenceName="test_sequence"/>
         </rollback>
@@ -99,14 +100,85 @@
 
     <changeSet id="12" author="as">
         <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_for_uc"
-          validate="true"/>
+                             constraintName="test_unique_constraint"
+                             deferrable="true"
+                             initiallyDeferred="true"
+                             tableName="test_table_for_uc"
+                             validate="true"/>
         <rollback>
             <dropUniqueConstraint tableName="test_table_for_uc"
-              constraintName="test_unique_constraint"/>
+                                  constraintName="test_unique_constraint"/>
+        </rollback>
+    </changeSet>
+
+    <!-- FUNCTION -->
+    <changeSet id="13" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                replaceIfExists="true"
+                functionName="test_function">CREATE FUNCTION test_function()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="14"  author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function1()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="15"  author="as">
+        <pro:createPackageBody encoding="UTF-8"
+                               packageBodyName="Test package">CREATE FUNCTION test_function2()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackageBody>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="16"  author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger BEFORE UPDATE ON posts
+            FOR EACH ROW BEGIN END;
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="17" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE PROCEDURE test_procedure()
+        BEGIN
+        END;
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
         </rollback>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mssql2019_to_mssql2022.xml b/src/main/resources/liquibase/harness/diff/changelogs/mssql2019_to_mssql2022.xml
deleted file mode 100644
index e361c0a13..000000000
--- a/src/main/resources/liquibase/harness/diff/changelogs/mssql2019_to_mssql2022.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<databaseChangeLog
-  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
-    <!--          FOREIGN KEY CONSTRAINT            -->
-    <changeSet id="1" author="as" labels="ref">
-        <createTable tableName="test_table_base">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_base"/>
-        </rollback>
-    </changeSet>
-    <changeSet id="2" author="as" labels="ref">
-        <createTable tableName="test_table_reference">
-            <column name="id" type="INT"/>
-            <column name="test_column" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_reference"/>
-        </rollback>
-    </changeSet>
-
-    <changeSet id="3" author="as">
-        <createIndex tableName="test_table_reference" indexName="test_table_reference_index">
-            <column name="test_column"/>
-        </createIndex>
-    </changeSet>
-    <changeSet id="4" author="as">
-        <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
-        </rollback>
-    </changeSet>
-
-    <!--          COLUMN            -->
-    <changeSet id="5" author="as">
-        <createTable tableName="test_table_for_column">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="6" author="as">
-        <addColumn tableName="test_table_for_column">
-            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
-            <column name="intColumn" type="int" valueNumeric="5"/>
-            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
-        </addColumn>
-    </changeSet>
-
-    <!--          INDEX            -->
-    <changeSet id="7" author="as">
-        <createTable tableName="test_table_for_index">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="8" author="as">
-        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
-            <column name="id"/>
-        </createIndex>
-        <rollback>
-            <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
-        </rollback>
-    </changeSet>
-
-    <!--          UNIQUE CONSTRAINT          -->
-    <changeSet id="9" author="as">
-        <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_base"
-          validate="true"/>
-        <rollback>
-            <dropUniqueConstraint tableName="test_table_base"
-              constraintName="test_unique_constraint"/>
-        </rollback>
-    </changeSet>
-
-    <!--          SEQUENCE          -->
-    <changeSet id="10" author="as">
-        <createSequence incrementBy="1"
-          minValue="1"
-          sequenceName="test_sequence"
-          startValue="1"/>
-        <rollback>
-            <dropSequence sequenceName="test_sequence"/>
-        </rollback>
-    </changeSet>
-
-    <!--          VIEW          -->
-    <changeSet id="11" author="as">
-        <createView viewName="test_view">
-            select * from test_table_reference
-        </createView>
-        <rollback>
-            <dropView viewName="test_view"/>
-        </rollback>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2017.xml b/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2017.xml
index d14ea3426..c3f32948d 100644
--- a/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2017.xml
+++ b/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2017.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <databaseChangeLog
         xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
@@ -113,4 +114,75 @@
             <dropView viewName="test_view"/>
         </rollback>
     </changeSet>
+
+    <!-- FUNCTION -->
+    <changeSet id="12" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                replaceIfExists="true"
+                functionName="test_function">CREATE FUNCTION test_function()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="13" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function1()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="14" author="as">
+        <pro:createPackageBody encoding="UTF-8"
+                               packageBodyName="Test package">CREATE FUNCTION test_function2()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackageBody>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="15" author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger ON posts AFTER UPDATE AS RAISERROR ('error', 1, 1);
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="16" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+
+                dbms="mssql"
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE PROCEDURE test_procedure
+            AS
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2019.xml b/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2019.xml
index e361c0a13..cf481fa9b 100644
--- a/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2019.xml
+++ b/src/main/resources/liquibase/harness/diff/changelogs/mssql2022_to_mssql2019.xml
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <databaseChangeLog
-  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
+        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
     <!--          FOREIGN KEY CONSTRAINT            -->
     <changeSet id="1" author="as" labels="ref">
@@ -34,16 +35,16 @@
     </changeSet>
     <changeSet id="4" author="as">
         <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
+                                  baseTableName="test_table_base"
+                                  constraintName="test_fk"
+                                  onDelete="CASCADE"
+                                  onUpdate="RESTRICT"
+                                  referencedColumnNames="test_column"
+                                  referencedTableName="test_table_reference"
+                                  validate="true"/>
         <rollback>
             <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
+                                      constraintName="test_fk"/>
         </rollback>
     </changeSet>
 
@@ -75,30 +76,30 @@
         </createIndex>
         <rollback>
             <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
+                       indexName="idx_first_name"/>
         </rollback>
     </changeSet>
 
     <!--          UNIQUE CONSTRAINT          -->
     <changeSet id="9" author="as">
         <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_base"
-          validate="true"/>
+                             constraintName="test_unique_constraint"
+                             deferrable="true"
+                             initiallyDeferred="true"
+                             tableName="test_table_base"
+                             validate="true"/>
         <rollback>
             <dropUniqueConstraint tableName="test_table_base"
-              constraintName="test_unique_constraint"/>
+                                  constraintName="test_unique_constraint"/>
         </rollback>
     </changeSet>
 
     <!--          SEQUENCE          -->
     <changeSet id="10" author="as">
         <createSequence incrementBy="1"
-          minValue="1"
-          sequenceName="test_sequence"
-          startValue="1"/>
+                        minValue="1"
+                        sequenceName="test_sequence"
+                        startValue="1"/>
         <rollback>
             <dropSequence sequenceName="test_sequence"/>
         </rollback>
@@ -113,4 +114,75 @@
             <dropView viewName="test_view"/>
         </rollback>
     </changeSet>
+
+    <!-- FUNCTION -->
+    <changeSet id="12" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                replaceIfExists="true"
+                functionName="test_function">CREATE FUNCTION test_function()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="13" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function1()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="14" author="as">
+        <pro:createPackageBody encoding="UTF-8"
+                               packageBodyName="Test package">CREATE FUNCTION test_function2()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackageBody>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="15" author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger ON posts AFTER UPDATE AS RAISERROR ('error', 1, 1);
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="16" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+
+                dbms="mssql"
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE PROCEDURE test_procedure
+            AS
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mysql8.4_to_mysql5.7.xml b/src/main/resources/liquibase/harness/diff/changelogs/mysql8.4_to_mysql5.7.xml
new file mode 100644
index 000000000..25d9f3f9c
--- /dev/null
+++ b/src/main/resources/liquibase/harness/diff/changelogs/mysql8.4_to_mysql5.7.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog
+        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
+         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
+    <!--          FOREIGN KEY CONSTRAINT            -->
+
+    <changeSet id="1" author="as">
+        <createTable tableName="test_table_base">
+            <column name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="2" author="as">
+        <createTable tableName="test_table_reference">
+            <column name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="test_column" type="INT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="4" author="as">
+        <addForeignKeyConstraint  baseColumnNames="id"
+                                  baseTableName="test_table_base"
+                                  constraintName="test_fk"
+                                  onDelete="CASCADE"
+                                  onUpdate="RESTRICT"
+                                  referencedColumnNames="test_column"
+                                  referencedTableName="test_table_reference"
+                                  validate="true"/>
+        <rollback>
+            <dropForeignKeyConstraint baseTableName="test_table_base"
+                                      constraintName="test_fk"/>
+        </rollback>
+    </changeSet>
+
+    <!--          COLUMN            -->
+    <changeSet id="5" author="as">
+        <createTable tableName="test_table_for_column">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="6" author="as">
+        <addColumn tableName="test_table_for_column">
+            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
+            <column name="intColumn" type="int" valueNumeric="5"/>
+            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
+        </addColumn>
+    </changeSet>
+
+    <!--          INDEX            -->
+    <changeSet id="7" author="as" labels="tableForCreateIndex">
+        <createTable tableName="test_table_for_index">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="8" author="as">
+        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
+            <column name="id"/>
+        </createIndex>
+        <rollback>
+            <dropIndex tableName="test_table_for_index"
+                       indexName="idx_first_name"/>
+        </rollback>
+    </changeSet>
+
+    <!--          VIEW          -->
+    <changeSet id="10" author="as">
+        <createView viewName="test_view">
+            select id, first_name, last_name, email from authors
+        </createView>
+    </changeSet>
+
+    <!--          UNIQUE CONSTRAINT          -->
+    <changeSet id="11" author="as">
+        <createTable tableName="test_table_for_uc">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="12" author="as">
+        <addUniqueConstraint columnNames="id"
+                             constraintName="test_unique_constraint"
+                             deferrable="true"
+                             initiallyDeferred="true"
+                             tableName="test_table_for_uc"
+                             validate="true"/>
+        <rollback>
+            <dropUniqueConstraint tableName="test_table_for_uc"
+                                  constraintName="test_unique_constraint"/>
+        </rollback>
+    </changeSet>
+
+
+    <!-- FUNCTION -->
+    <changeSet id="13" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                replaceIfExists="true"
+                functionName="test_function">CREATE FUNCTION test_function()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="14" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function1()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="15" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function2()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="16" author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger BEFORE UPDATE ON posts
+            FOR EACH ROW BEGIN END;
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="17" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE PROCEDURE test_procedure()
+        BEGIN
+        END;
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.6.xml b/src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.6.xml
new file mode 100644
index 000000000..2216bea77
--- /dev/null
+++ b/src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.6.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog
+        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
+         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
+    <!--          FOREIGN KEY CONSTRAINT            -->
+
+    <changeSet id="1" author="as">
+        <createTable tableName="test_table_base">
+            <column name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="2" author="as">
+        <createTable tableName="test_table_reference">
+            <column name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="test_column" type="INT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="4" author="as">
+        <addForeignKeyConstraint  baseColumnNames="id"
+                                  baseTableName="test_table_base"
+                                  constraintName="test_fk"
+                                  onDelete="CASCADE"
+                                  onUpdate="RESTRICT"
+                                  referencedColumnNames="test_column"
+                                  referencedTableName="test_table_reference"
+                                  validate="true"/>
+        <rollback>
+            <dropForeignKeyConstraint baseTableName="test_table_base"
+                                      constraintName="test_fk"/>
+        </rollback>
+    </changeSet>
+
+    <!--          COLUMN            -->
+    <changeSet id="5" author="as">
+        <createTable tableName="test_table_for_column">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="6" author="as">
+        <addColumn tableName="test_table_for_column">
+            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
+            <column name="intColumn" type="int" valueNumeric="5"/>
+            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
+        </addColumn>
+    </changeSet>
+
+    <!--          INDEX            -->
+    <changeSet id="7" author="as" labels="tableForCreateIndex">
+        <createTable tableName="test_table_for_index">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="8" author="as">
+        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
+            <column name="id"/>
+        </createIndex>
+        <rollback>
+            <dropIndex tableName="test_table_for_index"
+                       indexName="idx_first_name"/>
+        </rollback>
+    </changeSet>
+
+    <!--          VIEW          -->
+    <changeSet id="10" author="as">
+        <createView viewName="test_view">
+            select id, first_name, last_name, email from authors
+        </createView>
+    </changeSet>
+
+    <!--          UNIQUE CONSTRAINT          -->
+    <changeSet id="11" author="as">
+        <createTable tableName="test_table_for_uc">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="12" author="as">
+        <addUniqueConstraint columnNames="id"
+                             constraintName="test_unique_constraint"
+                             deferrable="true"
+                             initiallyDeferred="true"
+                             tableName="test_table_for_uc"
+                             validate="true"/>
+        <rollback>
+            <dropUniqueConstraint tableName="test_table_for_uc"
+                                  constraintName="test_unique_constraint"/>
+        </rollback>
+    </changeSet>
+
+    <!-- FUNCTION -->
+    <changeSet id="13" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                replaceIfExists="true"
+                functionName="test_function">CREATE FUNCTION test_function()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="14" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function1()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="15" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE FUNCTION test_function2()
+            RETURNS VARCHAR(20)
+            BEGIN
+            RETURN 'Hello';
+            END</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="16" author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger BEFORE UPDATE ON posts
+            FOR EACH ROW BEGIN END;
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="17" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE PROCEDURE test_procedure()
+        BEGIN
+        END;
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.7.xml b/src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.7.xml
deleted file mode 100644
index 308b4feae..000000000
--- a/src/main/resources/liquibase/harness/diff/changelogs/mysql8_to_mysql5.7.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<databaseChangeLog
-        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
-    <!--          FOREIGN KEY CONSTRAINT            -->
-
-    <changeSet id="1" author="as">
-        <createTable tableName="test_table_base">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="2" author="as">
-        <createTable tableName="test_table_reference">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-            <column name="test_column" type="INT">
-                <constraints nullable="false" unique="true"/>
-            </column>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="4" author="as">
-        <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
-        </rollback>
-    </changeSet>
-
-    <!--          COLUMN            -->
-    <changeSet id="5" author="as">
-        <createTable tableName="test_table_for_column">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="6" author="as">
-        <addColumn tableName="test_table_for_column">
-            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
-            <column name="intColumn" type="int" valueNumeric="5"/>
-            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
-        </addColumn>
-    </changeSet>
-
-    <!--          INDEX            -->
-    <changeSet id="7" author="as" labels="tableForCreateIndex">
-        <createTable tableName="test_table_for_index">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="8" author="as">
-        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
-            <column name="id"/>
-        </createIndex>
-        <rollback>
-            <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
-        </rollback>
-    </changeSet>
-
-    <!--          VIEW          -->
-    <changeSet id="10" author="as">
-        <createView viewName="test_view">
-            select id, first_name, last_name, email from authors
-        </createView>
-    </changeSet>
-
-    <!--          UNIQUE CONSTRAINT          -->
-    <changeSet id="11" author="as">
-        <createTable tableName="test_table_for_uc">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="12" author="as">
-        <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_for_uc"
-          validate="true"/>
-        <rollback>
-            <dropUniqueConstraint tableName="test_table_for_uc"
-              constraintName="test_unique_constraint"/>
-        </rollback>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle18.3.0.xml b/src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle18.3.0.xml
deleted file mode 100644
index a1b77381e..000000000
--- a/src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle18.3.0.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<databaseChangeLog
-  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
-    <!--          FOREIGN KEY CONSTRAINT            -->
-    <changeSet id="1" author="as" labels="ref">
-        <createTable tableName="test_table_base">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_base"/>
-        </rollback>
-    </changeSet>
-    <changeSet id="2" author="as" labels="ref">
-        <createTable tableName="test_table_reference">
-            <column name="id" type="INT"/>
-            <column name="test_column" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_reference"/>
-        </rollback>
-    </changeSet>
-
-    <changeSet id="4" author="as">
-        <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
-        </rollback>
-    </changeSet>
-
-    <!--          COLUMN            -->
-    <changeSet id="5" author="as">
-        <createTable tableName="test_table_for_column">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="6" author="as">
-        <addColumn tableName="test_table_for_column">
-            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
-            <column name="intColumn" type="int" valueNumeric="5"/>
-            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
-        </addColumn>
-    </changeSet>
-
-    <!--          INDEX            -->
-    <changeSet id="7" author="as">
-        <createTable tableName="test_table_for_index">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="8" author="as">
-        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
-            <column name="id"/>
-        </createIndex>
-        <rollback>
-            <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
-        </rollback>
-    </changeSet>
-
-    <!--          UNIQUE CONSTRAINT          -->
-    <changeSet id="9" author="as">
-        <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropUniqueConstraint tableName="test_table_reference"
-              constraintName="test_unique_constraint"/>
-        </rollback>
-    </changeSet>
-
-    <!--          SEQUENCE          -->
-    <changeSet id="10" author="as">
-        <createSequence incrementBy="1"
-          minValue="1"
-          sequenceName="test_sequence"
-          startValue="1"/>
-        <rollback>
-            <dropSequence sequenceName="test_sequence"/>
-        </rollback>
-    </changeSet>
-
-    <!--          VIEW          -->
-    <changeSet id="11" author="as">
-        <createView viewName="test_view">
-            select * from test_table_reference
-        </createView>
-        <rollback>
-            <dropView viewName="test_view"/>
-        </rollback>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle21.3.0.xml b/src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle21.3.0.xml
deleted file mode 100644
index a1b77381e..000000000
--- a/src/main/resources/liquibase/harness/diff/changelogs/oracle18.4.0_to_oracle21.3.0.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<databaseChangeLog
-  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
-    <!--          FOREIGN KEY CONSTRAINT            -->
-    <changeSet id="1" author="as" labels="ref">
-        <createTable tableName="test_table_base">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_base"/>
-        </rollback>
-    </changeSet>
-    <changeSet id="2" author="as" labels="ref">
-        <createTable tableName="test_table_reference">
-            <column name="id" type="INT"/>
-            <column name="test_column" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_reference"/>
-        </rollback>
-    </changeSet>
-
-    <changeSet id="4" author="as">
-        <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
-        </rollback>
-    </changeSet>
-
-    <!--          COLUMN            -->
-    <changeSet id="5" author="as">
-        <createTable tableName="test_table_for_column">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="6" author="as">
-        <addColumn tableName="test_table_for_column">
-            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
-            <column name="intColumn" type="int" valueNumeric="5"/>
-            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
-        </addColumn>
-    </changeSet>
-
-    <!--          INDEX            -->
-    <changeSet id="7" author="as">
-        <createTable tableName="test_table_for_index">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="8" author="as">
-        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
-            <column name="id"/>
-        </createIndex>
-        <rollback>
-            <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
-        </rollback>
-    </changeSet>
-
-    <!--          UNIQUE CONSTRAINT          -->
-    <changeSet id="9" author="as">
-        <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropUniqueConstraint tableName="test_table_reference"
-              constraintName="test_unique_constraint"/>
-        </rollback>
-    </changeSet>
-
-    <!--          SEQUENCE          -->
-    <changeSet id="10" author="as">
-        <createSequence incrementBy="1"
-          minValue="1"
-          sequenceName="test_sequence"
-          startValue="1"/>
-        <rollback>
-            <dropSequence sequenceName="test_sequence"/>
-        </rollback>
-    </changeSet>
-
-    <!--          VIEW          -->
-    <changeSet id="11" author="as">
-        <createView viewName="test_view">
-            select * from test_table_reference
-        </createView>
-        <rollback>
-            <dropView viewName="test_view"/>
-        </rollback>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/oracle21.3.0_to_oracle18.4.0.xml b/src/main/resources/liquibase/harness/diff/changelogs/oracle21.3.0_to_oracle18.4.0.xml
deleted file mode 100644
index a1b77381e..000000000
--- a/src/main/resources/liquibase/harness/diff/changelogs/oracle21.3.0_to_oracle18.4.0.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<databaseChangeLog
-  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
-    <!--          FOREIGN KEY CONSTRAINT            -->
-    <changeSet id="1" author="as" labels="ref">
-        <createTable tableName="test_table_base">
-            <column name="id" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_base"/>
-        </rollback>
-    </changeSet>
-    <changeSet id="2" author="as" labels="ref">
-        <createTable tableName="test_table_reference">
-            <column name="id" type="INT"/>
-            <column name="test_column" type="INT">
-                <constraints nullable="false" primaryKey="true"/>
-            </column>
-        </createTable>
-        <rollback>
-            <dropTable tableName="test_table_reference"/>
-        </rollback>
-    </changeSet>
-
-    <changeSet id="4" author="as">
-        <addForeignKeyConstraint  baseColumnNames="id"
-          baseTableName="test_table_base"
-          constraintName="test_fk"
-          onDelete="CASCADE"
-          onUpdate="RESTRICT"
-          referencedColumnNames="test_column"
-          referencedTableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropForeignKeyConstraint baseTableName="test_table_base"
-              constraintName="test_fk"/>
-        </rollback>
-    </changeSet>
-
-    <!--          COLUMN            -->
-    <changeSet id="5" author="as">
-        <createTable tableName="test_table_for_column">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="6" author="as">
-        <addColumn tableName="test_table_for_column">
-            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
-            <column name="intColumn" type="int" valueNumeric="5"/>
-            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
-        </addColumn>
-    </changeSet>
-
-    <!--          INDEX            -->
-    <changeSet id="7" author="as">
-        <createTable tableName="test_table_for_index">
-            <column name="id" type="INT"/>
-        </createTable>
-    </changeSet>
-
-    <changeSet id="8" author="as">
-        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
-            <column name="id"/>
-        </createIndex>
-        <rollback>
-            <dropIndex tableName="test_table_for_index"
-              indexName="idx_first_name"/>
-        </rollback>
-    </changeSet>
-
-    <!--          UNIQUE CONSTRAINT          -->
-    <changeSet id="9" author="as">
-        <addUniqueConstraint columnNames="id"
-          constraintName="test_unique_constraint"
-          deferrable="true"
-          initiallyDeferred="true"
-          tableName="test_table_reference"
-          validate="true"/>
-        <rollback>
-            <dropUniqueConstraint tableName="test_table_reference"
-              constraintName="test_unique_constraint"/>
-        </rollback>
-    </changeSet>
-
-    <!--          SEQUENCE          -->
-    <changeSet id="10" author="as">
-        <createSequence incrementBy="1"
-          minValue="1"
-          sequenceName="test_sequence"
-          startValue="1"/>
-        <rollback>
-            <dropSequence sequenceName="test_sequence"/>
-        </rollback>
-    </changeSet>
-
-    <!--          VIEW          -->
-    <changeSet id="11" author="as">
-        <createView viewName="test_view">
-            select * from test_table_reference
-        </createView>
-        <rollback>
-            <dropView viewName="test_view"/>
-        </rollback>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/postgresql14_to_postgresql13.xml b/src/main/resources/liquibase/harness/diff/changelogs/postgresql14_to_postgresql13.xml
index 63222f653..79aa71f66 100644
--- a/src/main/resources/liquibase/harness/diff/changelogs/postgresql14_to_postgresql13.xml
+++ b/src/main/resources/liquibase/harness/diff/changelogs/postgresql14_to_postgresql13.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <databaseChangeLog
-    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-    xmlns:pro="http://www.liquibase.org/xml/ns/pro"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
-    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
+        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
+         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
 
 <!--          FOREIGN KEY CONSTRAINT            -->
 
@@ -111,4 +111,93 @@
               constraintName="test_unique_constraint"/>
         </rollback>
     </changeSet>
+
+
+    <!-- FUNCTION -->
+    <changeSet id="13" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                functionName="test_function">CREATE OR REPLACE FUNCTION test_function()
+            RETURNS trigger
+            AS $$
+            BEGIN
+            RAISE NOTICE 'Test function created';
+            RETURN NEW;
+            END;
+            $$
+            LANGUAGE plpgsql;
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="14" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE OR REPLACE FUNCTION test_function1()
+            RETURNS trigger
+            AS $$
+            BEGIN
+            RAISE NOTICE 'Test function created';
+            RETURN NEW;
+            END;
+            $$
+            LANGUAGE plpgsql;</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="15" author="as">
+        <pro:createPackageBody encoding="UTF-8"
+                               packageBodyName="Test package">CREATE OR REPLACE FUNCTION test_function2()
+            RETURNS trigger
+            AS $$
+            BEGIN
+            RAISE NOTICE 'Test function created';
+            RETURN NEW;
+            END;
+            $$
+            LANGUAGE plpgsql;</pro:createPackageBody>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="16" author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger
+            BEFORE INSERT ON posts
+            FOR EACH ROW EXECUTE PROCEDURE test_function();
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="17" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+
+                dbms="postgresql"
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE OR REPLACE PROCEDURE test_procedure()
+                                               LANGUAGE 'plpgsql'
+                                               AS $$
+        BEGIN
+        END;
+                                               $$
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/changelogs/postgresql17_to_postgresql16.xml b/src/main/resources/liquibase/harness/diff/changelogs/postgresql17_to_postgresql16.xml
new file mode 100644
index 000000000..5e8a424b9
--- /dev/null
+++ b/src/main/resources/liquibase/harness/diff/changelogs/postgresql17_to_postgresql16.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<databaseChangeLog
+        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+        xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
+         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
+
+    <!--          FOREIGN KEY CONSTRAINT            -->
+
+    <changeSet id="1" author="as">
+        <createTable tableName="test_table_base">
+            <column name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="2" author="as">
+        <createTable tableName="test_table_reference">
+            <column name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="test_column" type="INT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="4" author="as">
+        <addForeignKeyConstraint  baseColumnNames="id"
+                                  baseTableName="test_table_base"
+                                  constraintName="test_fk"
+                                  onDelete="CASCADE"
+                                  onUpdate="RESTRICT"
+                                  referencedColumnNames="test_column"
+                                  referencedTableName="test_table_reference"
+                                  validate="true"/>
+        <rollback>
+            <dropForeignKeyConstraint baseTableName="test_table_base"
+                                      constraintName="test_fk"/>
+        </rollback>
+    </changeSet>
+
+    <!--          COLUMN            -->
+    <changeSet id="5" author="as" labels="tablesForReferenceDB">
+        <createTable tableName="test_table_for_column">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="6" author="as">
+        <addColumn tableName="test_table_for_column">
+            <column name="varcharColumn" type="varchar(25)" value="INITIAL_VALUE"/>
+            <column name="intColumn" type="int" valueNumeric="5"/>
+            <column name="dateColumn" type="date" valueDate="2020-09-21"/>
+        </addColumn>
+    </changeSet>
+
+    <!--          INDEX            -->
+    <changeSet id="7" author="as" labels="tableForCreateIndex">
+        <createTable tableName="test_table_for_index">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="8" author="as">
+        <createIndex indexName="idx_first_name" tableName="test_table_for_index">
+            <column name="id"/>
+        </createIndex>
+        <rollback>
+            <dropIndex tableName="test_table_for_index"
+                       indexName="idx_first_name"/>
+        </rollback>
+    </changeSet>
+
+    <!--          SEQUENCE          -->
+    <changeSet id="9" author="as">
+        <createSequence incrementBy="1"
+                        minValue="1"
+                        sequenceName="test_sequence"
+                        startValue="1"/>
+        <rollback>
+            <dropSequence sequenceName="test_sequence"/>
+        </rollback>
+    </changeSet>
+
+    <!--          VIEW          -->
+    <changeSet id="10" author="as">
+        <createView viewName="test_view">
+            select id, first_name, last_name, email from authors
+        </createView>
+    </changeSet>
+
+    <!--          UNIQUE CONSTRAINT          -->
+    <changeSet id="11" author="as">
+        <createTable tableName="test_table_for_uc">
+            <column name="id" type="INT"/>
+        </createTable>
+    </changeSet>
+
+    <changeSet id="12" author="as">
+        <addUniqueConstraint columnNames="id"
+                             constraintName="test_unique_constraint"
+                             deferrable="true"
+                             initiallyDeferred="true"
+                             tableName="test_table_for_uc"
+                             validate="true"/>
+        <rollback>
+            <dropUniqueConstraint tableName="test_table_for_uc"
+                                  constraintName="test_unique_constraint"/>
+        </rollback>
+    </changeSet>
+
+
+    <!-- FUNCTION -->
+    <changeSet id="13" author="as">
+        <pro:createFunction
+                encoding="UTF-8"
+                functionName="test_function">CREATE OR REPLACE FUNCTION test_function()
+            RETURNS trigger
+            AS $$
+            BEGIN
+            RAISE NOTICE 'Test function created';
+            RETURN NEW;
+            END;
+            $$
+            LANGUAGE plpgsql;
+        </pro:createFunction>
+        <rollback>
+            <pro:dropFunction functionName="test_function"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE -->
+    <changeSet id="14" author="as">
+        <pro:createPackage encoding="UTF-8"
+                           packageName="Test package">CREATE OR REPLACE FUNCTION test_function1()
+            RETURNS trigger
+            AS $$
+            BEGIN
+            RAISE NOTICE 'Test function created';
+            RETURN NEW;
+            END;
+            $$
+            LANGUAGE plpgsql;</pro:createPackage>
+        <rollback>
+            <pro:dropFunction functionName="test_function1"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PACKAGE BODY -->
+    <changeSet id="15" author="as">
+        <pro:createPackageBody encoding="UTF-8"
+                               packageBodyName="Test package">CREATE OR REPLACE FUNCTION test_function2()
+            RETURNS trigger
+            AS $$
+            BEGIN
+            RAISE NOTICE 'Test function created';
+            RETURN NEW;
+            END;
+            $$
+            LANGUAGE plpgsql;</pro:createPackageBody>
+        <rollback>
+            <pro:dropFunction functionName="test_function2"/>
+        </rollback>
+    </changeSet>
+
+    <!-- TRIGGER -->
+    <changeSet id="16" author="as">
+        <pro:createTrigger disabled="false"
+                           encoding="UTF-8"
+                           scope="test"
+                           tableName="posts"
+                           triggerName="test_trigger">CREATE TRIGGER test_trigger
+            BEFORE INSERT ON posts
+            FOR EACH ROW EXECUTE PROCEDURE test_function();
+        </pro:createTrigger>
+        <rollback>
+            <pro:dropTrigger triggerName="test_trigger"
+                             tableName="posts"/>
+        </rollback>
+    </changeSet>
+
+    <!-- PROCEDURE -->
+    <changeSet id="17" author="as">
+        <comment>test procedure</comment>
+        <createProcedure
+
+                dbms="postgresql"
+                encoding="UTF-8"
+                procedureName="test_procedure">CREATE OR REPLACE PROCEDURE test_procedure()
+                                               LANGUAGE 'plpgsql'
+                                               AS $$
+        BEGIN
+        END;
+                                               $$
+        </createProcedure>
+        <rollback>
+            <dropProcedure procedureName="test_procedure"/>
+        </rollback>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/diffDatabases.yml b/src/main/resources/liquibase/harness/diff/diffDatabases.yml
index 99d1ea4d5..720181398 100644
--- a/src/main/resources/liquibase/harness/diff/diffDatabases.yml
+++ b/src/main/resources/liquibase/harness/diff/diffDatabases.yml
@@ -4,26 +4,26 @@
 # -> with such name or DB doesn't have version as such
 ---
 references:
-  #  - targetDatabaseName: oracle
-  #    targetDatabaseVersion: 18.3.0
-  #    referenceDatabaseName: oracle
-  #    referenceDatabaseVersion: 18.4.0
-  #
-  #  - targetDatabaseName: oracle
-  #    targetDatabaseVersion: 18.4.0
-  #    referenceDatabaseName: oracle
-  #    referenceDatabaseVersion: 21.3.0
-  #
-  #  - targetDatabaseName: oracle
-  #    targetDatabaseVersion: 21.3.0
-  #    referenceDatabaseName: oracle
-  #    referenceDatabaseVersion: 18.4.0
-
   - targetDatabaseName: postgresql
     targetDatabaseVersion: 13
     referenceDatabaseName: postgresql
     referenceDatabaseVersion: 14
 
+  - targetDatabaseName: postgresql
+    targetDatabaseVersion: 16
+    referenceDatabaseName: postgresql
+    referenceDatabaseVersion: 17
+
+  - targetDatabaseName: mariadb
+    targetDatabaseVersion: 10.4
+    referenceDatabaseName: mariadb
+    referenceDatabaseVersion: 10.5
+
+  - targetDatabaseName: mariadb
+    targetDatabaseVersion: 10.6
+    referenceDatabaseName: mariadb
+    referenceDatabaseVersion: 10.7
+
   - targetDatabaseName: mssql
     targetDatabaseVersion: 2017
     referenceDatabaseName: mssql
@@ -34,27 +34,13 @@ references:
     referenceDatabaseName: mssql
     referenceDatabaseVersion: 2022
 
-  - targetDatabaseName: mssql
-    targetDatabaseVersion: 2022
-    referenceDatabaseName: mssql
-    referenceDatabaseVersion: 2019
-
-  - targetDatabaseName: mariadb
-    targetDatabaseVersion: 10.6
-    referenceDatabaseName: mariadb
-    referenceDatabaseVersion: 10.7
+#MySQL should be always latest
+  - targetDatabaseName: mysql
+    targetDatabaseVersion: 5.6
+    referenceDatabaseName: mysql
+    referenceDatabaseVersion: 8
 
-  - targetDatabaseName: mariadb
-    targetDatabaseVersion: 10.4
-    referenceDatabaseName: mariadb
-    referenceDatabaseVersion: 10.5
-#
-#  - targetDatabaseName: mariadb
-#    targetDatabaseVersion: 10.2
-#    referenceDatabaseName: mariadb
-#    referenceDatabaseVersion: 10.3
-#
-#  - targetDatabaseName: mysql
-#    targetDatabaseVersion: 5.7
-#    referenceDatabaseName: mysql
-#    referenceDatabaseVersion: 8
\ No newline at end of file
+  - targetDatabaseName: mysql
+    targetDatabaseVersion: 5.7
+    referenceDatabaseName: mysql
+    referenceDatabaseVersion: 8.4
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.5_to_mariadb10.4.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.5_to_mariadb10.4.txt
index 90a57e015..29892ae75 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.5_to_mariadb10.4.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.5_to_mariadb10.4.txt
@@ -3,8 +3,8 @@ Comparison Database: lbuser @ jdbc:mariadb://localhost:33067/lbcat (Default Sche
 Compared Schemas: lbcat
 Product Name: EQUAL
 Product Version:
-     Reference:   '10.5.20-MariaDB-1:10.5.20+maria~ubu2004'
-     Target: '10.4.29-MariaDB-1:10.4.29+maria~ubu2004'
+     Reference:   '10.5.27-MariaDB-ubu2004'
+     Target: '10.4.34-MariaDB-1:10.4.34+maria~ubu2004'
 Missing Catalog(s): NONE
 Unexpected Catalog(s): NONE
 Changed Catalog(s): NONE
@@ -38,7 +38,10 @@ Unexpected Foreign Key(s):
      test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function
+     test_function1
+     test_function2
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
@@ -58,7 +61,8 @@ Unexpected Sequence(s):
      test_sequence
 Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -72,7 +76,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.7_to_mariadb10.6.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.7_to_mariadb10.6.txt
index f9bfb0256..02f57fded 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.7_to_mariadb10.6.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.7_to_mariadb10.6.txt
@@ -4,7 +4,7 @@ Compared Schemas: lbcat
 Product Name: EQUAL
 Product Version:
      Reference:   '10.7.8-MariaDB-1:10.7.8+maria~ubu2004'
-     Target: '10.6.13-MariaDB-1:10.6.13+maria~ubu2004'
+     Target: '10.6.20-MariaDB-ubu2004'
 Missing Catalog(s): NONE
 Unexpected Catalog(s): NONE
 Changed Catalog(s): NONE
@@ -38,7 +38,10 @@ Unexpected Foreign Key(s):
      test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function
+     test_function1
+     test_function2
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
@@ -58,7 +61,8 @@ Unexpected Sequence(s):
      test_sequence
 Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -72,7 +76,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2019_to_mssql2022.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2019_to_mssql2022.txt
deleted file mode 100644
index 255f52a8c..000000000
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2019_to_mssql2022.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-Reference Database: lbuser@jdbc:sqlserver://localhost:1434;connectRetryInterval=10;connectRetryCount=1;maxResultBuffer=-1;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useFmtOnly=false;msiTokenCacheTtl=3600;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;replication=false;trustStoreType=JKS;trustServerCertificate=true;TransparentNetworkIPResolution=true;iPAddressPreference=IPv4First;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;prepareMethod=prepexec;encrypt=True;disableStatementPooling=true;databaseName=lbcat;columnEncryptionSetting=Disabled;applicationName=MicrosoftJDBCDriverforSQLServer;applicationIntent=readwrite;(DefaultSchema:dbo)
-Comparison Database: lbuser@jdbc:sqlserver://localhost:1435;connectRetryInterval=10;connectRetryCount=1;maxResultBuffer=-1;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useFmtOnly=false;msiTokenCacheTtl=3600;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;replication=false;trustStoreType=JKS;trustServerCertificate=true;TransparentNetworkIPResolution=true;iPAddressPreference=IPv4First;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;prepareMethod=prepexec;encrypt=True;disableStatementPooling=true;databaseName=lbcat;columnEncryptionSetting=Disabled;applicationName=MicrosoftJDBCDriverforSQLServer;applicationIntent=readwrite;(DefaultSchema:dbo)
-Compared Schemas: dbo
-Product Name: EQUAL
-Product Version:
-     Reference:   '15.00.4312'
-     Target: '16.00.4035'
-Missing Catalog(s): NONE
-Unexpected Catalog(s): NONE
-Changed Catalog(s): NONE
-Missing Check Constraint(s): NONE
-Unexpected Check Constraint(s): NONE
-Changed Check Constraint(s): NONE
-Missing Column(s): NONE
-Unexpected Column(s):
-     dbo.test_table_for_column.dateColumn
-     dbo.test_table_base.id
-     dbo.test_table_for_column.id
-     dbo.test_table_for_index.id
-     dbo.test_table_reference.id
-     dbo.test_view.id
-     dbo.test_table_for_column.intColumn
-     dbo.test_table_reference.test_column
-     dbo.test_view.test_column
-     dbo.test_table_for_column.varcharColumn
-Changed Column(s): NONE
-Missing Database Package(s): NONE
-Unexpected Database Package(s): NONE
-Changed Database Package(s): NONE
-Missing Database Package Body(s): NONE
-Unexpected Database Package Body(s): NONE
-Changed Database Package Body(s): NONE
-Missing Foreign Key(s): NONE
-Unexpected Foreign Key(s):
-     test_fk(test_table_base[id]->test_table_reference[test_column])
-Changed Foreign Key(s): NONE
-Missing Function(s): NONE
-Unexpected Function(s): NONE
-Changed Function(s): NONE
-Missing Index(s): NONE
-Unexpected Index(s):
-     PK_TEST_TABLE_REFERENCE UNIQUE ON dbo.test_table_reference(test_column)
-     idx_first_name ON dbo.test_table_for_index(id)
-     test_unique_constraint UNIQUE ON dbo.test_table_base(id)
-Changed Index(s): NONE
-Missing Primary Key(s): NONE
-Unexpected Primary Key(s):
-     PK_TEST_TABLE_BASE on dbo.test_table_base(id)
-     PK_TEST_TABLE_REFERENCE on dbo.test_table_reference(test_column)
-Changed Primary Key(s): NONE
-Missing Schema(s): NONE
-Unexpected Schema(s): NONE
-Changed Schema(s): NONE
-Missing Sequence(s): NONE
-Unexpected Sequence(s):
-     test_sequence
-Changed Sequence(s): NONE
-Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
-Changed Stored Procedure(s): NONE
-Missing Synonym(s): NONE
-Unexpected Synonym(s): NONE
-Changed Synonym(s): NONE
-Missing Table(s): NONE
-Unexpected Table(s):
-     test_table_base
-     test_table_for_column
-     test_table_for_index
-     test_table_reference
-Changed Table(s): NONE
-Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
-Changed Trigger(s): NONE
-Missing Unique Constraint(s): NONE
-Unexpected Unique Constraint(s):
-     test_unique_constraint on test_table_base(id)
-Changed Unique Constraint(s): NONE
-Missing View(s): NONE
-Unexpected View(s):
-     test_view
-Changed View(s): NONE
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2017.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2017.txt
index e9011704f..cdbd61f4c 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2017.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2017.txt
@@ -32,16 +32,19 @@ Unexpected Database Package Body(s): NONE
 Changed Database Package Body(s): NONE
 Missing Foreign Key(s): NONE
 Unexpected Foreign Key(s):
-     test_fk(test_table_base[id]->test_table_reference[test_column])
+     test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function
+     test_function1
+     test_function2
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
-     PK_TEST_TABLE_REFERENCE UNIQUE ON dbo.test_table_reference(test_column)
+     PK_TEST_TABLE_REFERENCE UNIQUE  ON dbo.test_table_reference(test_column)
      idx_first_name ON dbo.test_table_for_index(id)
-     test_unique_constraint UNIQUE ON dbo.test_table_base(id)
+     test_unique_constraint UNIQUE  ON dbo.test_table_base(id)
 Changed Index(s): NONE
 Missing Primary Key(s): NONE
 Unexpected Primary Key(s):
@@ -56,7 +59,8 @@ Unexpected Sequence(s):
      test_sequence
 Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -69,7 +73,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2019.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2019.txt
index 01d577a78..d96a560e0 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2019.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/mssql2022_to_mssql2019.txt
@@ -1,10 +1,10 @@
-Reference Database: lbuser@jdbc:sqlserver://localhost:1435;connectRetryInterval=10;connectRetryCount=1;maxResultBuffer=-1;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useFmtOnly=false;msiTokenCacheTtl=3600;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;replication=false;trustStoreType=JKS;trustServerCertificate=true;TransparentNetworkIPResolution=true;iPAddressPreference=IPv4First;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;prepareMethod=prepexec;encrypt=True;disableStatementPooling=true;databaseName=lbcat;columnEncryptionSetting=Disabled;applicationName=MicrosoftJDBCDriverforSQLServer;applicationIntent=readwrite;(DefaultSchema:dbo)
-Comparison Database: lbuser@jdbc:sqlserver://localhost:1434;connectRetryInterval=10;connectRetryCount=1;maxResultBuffer=-1;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useFmtOnly=false;msiTokenCacheTtl=3600;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;replication=false;trustStoreType=JKS;trustServerCertificate=true;TransparentNetworkIPResolution=true;iPAddressPreference=IPv4First;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;prepareMethod=prepexec;encrypt=True;disableStatementPooling=true;databaseName=lbcat;columnEncryptionSetting=Disabled;applicationName=MicrosoftJDBCDriverforSQLServer;applicationIntent=readwrite;(DefaultSchema:dbo)
+Reference Database: lbuser @ jdbc:sqlserver://localhost:1434;connectRetryInterval=10;connectRetryCount=1;maxResultBuffer=-1;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useFmtOnly=false;cacheBulkCopyMetadata=false;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;calcBigDecimalPrecision=false;useDefaultJaasConfig=false;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;datetimeParameterType=datetime2;sendTimeAsDatetime=true;replication=false;trustStoreType=JKS;trustServerCertificate=true;TransparentNetworkIPResolution=true;iPAddressPreference=IPv4First;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;useDefaultGSSCredential=false;prepareMethod=prepexec;encrypt=True;disableStatementPooling=true;databaseName=lbcat;columnEncryptionSetting=Disabled;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite; (Default Schema: dbo)
+Comparison Database: lbuser @ jdbc:sqlserver://localhost:1435;connectRetryInterval=10;connectRetryCount=1;maxResultBuffer=-1;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useFmtOnly=false;cacheBulkCopyMetadata=false;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;calcBigDecimalPrecision=false;useDefaultJaasConfig=false;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;datetimeParameterType=datetime2;sendTimeAsDatetime=true;replication=false;trustStoreType=JKS;trustServerCertificate=true;TransparentNetworkIPResolution=true;iPAddressPreference=IPv4First;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;useDefaultGSSCredential=false;prepareMethod=prepexec;encrypt=True;disableStatementPooling=true;databaseName=lbcat;columnEncryptionSetting=Disabled;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite; (Default Schema: dbo)
 Compared Schemas: dbo
 Product Name: EQUAL
 Product Version:
-     Reference:   '16.00.4035'
-     Target: '15.00.4312'
+     Reference:   '15.00.4375'
+     Target: '16.00.4125'
 Missing Catalog(s): NONE
 Unexpected Catalog(s): NONE
 Changed Catalog(s): NONE
@@ -32,16 +32,19 @@ Unexpected Database Package Body(s): NONE
 Changed Database Package Body(s): NONE
 Missing Foreign Key(s): NONE
 Unexpected Foreign Key(s):
-     test_fk(test_table_base[id]->test_table_reference[test_column])
+     test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function
+     test_function1
+     test_function2
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
-     PK_TEST_TABLE_REFERENCE UNIQUE ON dbo.test_table_reference(test_column)
+     PK_TEST_TABLE_REFERENCE UNIQUE  ON dbo.test_table_reference(test_column)
      idx_first_name ON dbo.test_table_for_index(id)
-     test_unique_constraint UNIQUE ON dbo.test_table_base(id)
+     test_unique_constraint UNIQUE  ON dbo.test_table_base(id)
 Changed Index(s): NONE
 Missing Primary Key(s): NONE
 Unexpected Primary Key(s):
@@ -56,7 +59,8 @@ Unexpected Sequence(s):
      test_sequence
 Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -69,7 +73,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mysql8_to_mysql5.7.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mysql8.4_to_mysql5.7.txt
similarity index 89%
rename from src/main/resources/liquibase/harness/diff/expectedDiff/mysql8_to_mysql5.7.txt
rename to src/main/resources/liquibase/harness/diff/expectedDiff/mysql8.4_to_mysql5.7.txt
index c43943844..c02f74458 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mysql8_to_mysql5.7.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/mysql8.4_to_mysql5.7.txt
@@ -1,10 +1,10 @@
-Reference Database: lbuser@172.18.0.1 @ jdbc:mysql://localhost:33061/lbcat (Default Schema: lbcat)
-Comparison Database: lbuser@172.18.0.1 @ jdbc:mysql://localhost:33062/lbcat (Default Schema: lbcat)
+Reference Database: lbuser@172.18.0.1 @ jdbc:mysql://localhost:33062/lbcat (Default Schema: lbcat)
+Comparison Database: lbuser@172.18.0.1 @ jdbc:mysql://localhost:33065/lbcat (Default Schema: lbcat)
 Compared Schemas: lbcat
 Product Name: EQUAL
 Product Version:
-     Reference:   '8.0.26'
-     Target: '5.7.42'
+     Reference:   '5.7.44'
+     Target: '8.4.4'
 Missing Catalog(s): NONE
 Unexpected Catalog(s): NONE
 Changed Catalog(s): NONE
@@ -38,7 +38,10 @@ Unexpected Foreign Key(s):
      test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function
+     test_function1
+     test_function2
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
@@ -53,11 +56,9 @@ Unexpected Primary Key(s):
      PRIMARY on lbcat.test_table_base(id)
      PRIMARY on lbcat.test_table_reference(id)
 Changed Primary Key(s): NONE
-Missing Sequence(s): NONE
-Unexpected Sequence(s): NONE
-Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -71,7 +72,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.3_to_mariadb10.2.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/mysql8_to_mysql5.6.txt
similarity index 83%
rename from src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.3_to_mariadb10.2.txt
rename to src/main/resources/liquibase/harness/diff/expectedDiff/mysql8_to_mysql5.6.txt
index af6905f51..536eeaf3c 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/mariadb10.3_to_mariadb10.2.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/mysql8_to_mysql5.6.txt
@@ -1,10 +1,10 @@
-Reference Database: lbuser @ jdbc:mariadb://localhost:33063/lbcat (Default Schema: lbcat)
-Comparison Database: lbuser @ jdbc:mariadb://localhost:33068/lbcat (Default Schema: lbcat)
+Reference Database: lbuser@172.18.0.1 @ jdbc:mysql://localhost:33064/lbcat (Default Schema: lbcat)
+Comparison Database: lbuser@172.18.0.1 @ jdbc:mysql://localhost:33061/lbcat (Default Schema: lbcat)
 Compared Schemas: lbcat
 Product Name: EQUAL
 Product Version:
-     Reference:   '10.3.39-MariaDB-1:10.3.39+maria~ubu2004'
-     Target: '10.2.44-MariaDB-1:10.2.44+maria~bionic'
+     Reference:   '5.6.51'
+     Target: '8.0.26'
 Missing Catalog(s): NONE
 Unexpected Catalog(s): NONE
 Changed Catalog(s): NONE
@@ -38,7 +38,10 @@ Unexpected Foreign Key(s):
      test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function
+     test_function1
+     test_function2
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
@@ -53,11 +56,9 @@ Unexpected Primary Key(s):
      PRIMARY on lbcat.test_table_base(id)
      PRIMARY on lbcat.test_table_reference(id)
 Changed Primary Key(s): NONE
-Missing Sequence(s): NONE
-Unexpected Sequence(s): NONE
-Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -71,7 +72,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle18.3.0.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle18.3.0.txt
deleted file mode 100644
index 3803069d4..000000000
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle18.3.0.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-Reference Database: C##LIQUIBASE@jdbc:oracle:thin:@localhost:1522/xe (DefaultSchema:C##LIQUIBASE)
-Comparison Database: DATICAL_ADMIN@jdbc:oracle:thin:@localhost:1521/PDBORCL (DefaultSchema:DATICAL_ADMIN)
-Compared Schemas: C##LIQUIBASE->DATICAL_ADMIN
-Product Name: EQUAL
-Product Version:
-     Reference: 'OracleDatabase18cExpressEditionRelease18.0.0.0.0-ProductionVersion18.4.0.0.0'
-     Target: 'OracleDatabase18cEnterpriseEditionRelease18.0.0.0.0-ProductionVersion18.3.0.0.0'
-Missing Catalog(s): NONE
-Unexpected Catalog(s): NONE
-Changed Catalog(s): NONE
-Missing Check Constraint(s): NONE
-Unexpected Check Constraint(s): NONE
-Changed Check Constraint(s): NONE
-Missing Column(s): NONE
-Unexpected Column(s):
-     DATICAL_ADMIN.TEST_TABLE_FOR_COLUMN.DATECOLUMN
-     DATICAL_ADMIN.TEST_TABLE_BASE.ID
-     DATICAL_ADMIN.TEST_TABLE_FOR_COLUMN.ID
-     DATICAL_ADMIN.TEST_TABLE_FOR_INDEX.ID
-     DATICAL_ADMIN.TEST_TABLE_REFERENCE.ID
-     DATICAL_ADMIN.TEST_VIEW.ID
-     DATICAL_ADMIN.TEST_TABLE_FOR_COLUMN.INTCOLUMN
-     DATICAL_ADMIN.TEST_TABLE_REFERENCE.TEST_COLUMN
-     DATICAL_ADMIN.TEST_VIEW.TEST_COLUMN
-     DATICAL_ADMIN.TEST_TABLE_FOR_COLUMN.VARCHARCOLUMN
-Changed Column(s): NONE
-Missing Database Package(s): NONE
-Unexpected Database Package(s): NONE
-Changed Database Package(s): NONE
-Missing Database PackageBody(s): NONE
-Unexpected Database PackageBody(s): NONE
-Changed Database PackageBody(s): NONE
-Missing Foreign Key(s): NONE
-Unexpected Foreign Key(s):
-     TEST_FK(TEST_TABLE_BASE[ID]->TEST_TABLE_REFERENCE[TEST_COLUMN])
-Changed Foreign Key(s): NONE
-Missing Function(s): NONE
-Unexpected Function(s): NONE
-Changed Function(s): NONE
-Missing Index(s): NONE
-Unexpected Index(s):
-     IDX_FIRST_NAME ON DATICAL_ADMIN.TEST_TABLE_FOR_INDEX(ID)
-     PK_TEST_TABLE_BASE UNIQUE ON DATICAL_ADMIN.TEST_TABLE_BASE(ID)
-     PK_TEST_TABLE_REFERENCE UNIQUE ON DATICAL_ADMIN.TEST_TABLE_REFERENCE(TEST_COLUMN)
-     TEST_UNIQUE_CONSTRAINT ON DATICAL_ADMIN.TEST_TABLE_REFERENCE(ID)
-Changed Index(s): NONE
-Missing Primary Key(s): NONE
-Unexpected Primary Key(s):
-     PK_TEST_TABLE_BASE on DATICAL_ADMIN.TEST_TABLE_BASE(ID)
-     PK_TEST_TABLE_REFERENCE on DATICAL_ADMIN.TEST_TABLE_REFERENCE(TEST_COLUMN)
-Changed Primary Key(s): NONE
-Missing Sequence(s): NONE
-Unexpected Sequence(s):
-     TEST_SEQUENCE
-Changed Sequence(s): NONE
-Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
-Changed Stored Procedure(s): NONE
-Missing Synonym(s): NONE
-Unexpected Synonym(s): NONE
-Changed Synonym(s): NONE
-Missing Table(s): NONE
-Unexpected Table(s):
-     TEST_TABLE_BASE
-     TEST_TABLE_FOR_COLUMN
-     TEST_TABLE_FOR_INDEX
-     TEST_TABLE_REFERENCE
-Changed Table(s): NONE
-Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
-Changed Trigger(s): NONE
-Missing Unique Constraint(s): NONE
-Unexpected Unique Constraint(s):
-     TEST_UNIQUE_CONSTRAINT on TEST_TABLE_REFERENCE(ID)
-Changed Unique Constraint(s): NONE
-Missing View(s): NONE
-Unexpected View(s):
-     TEST_VIEW
-Changed View(s): NONE
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle21.3.0.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle21.3.0.txt
deleted file mode 100644
index ed413568c..000000000
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/oracle18.4.0_to_oracle21.3.0.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-Reference Database: C##LIQUIBASE@jdbc:oracle:thin:@localhost:1522/xe (DefaultSchema:C##LIQUIBASE)
-Comparison Database: C##LIQUIBASE@jdbc:oracle:thin:@localhost:1523/xe (DefaultSchema:C##LIQUIBASE)
-Compared Schemas: C##LIQUIBASE
-Product Name: EQUAL
-Product Version:
-     Reference: 'OracleDatabase18cExpressEditionRelease18.0.0.0.0-ProductionVersion18.4.0.0.0'
-     Target: 'OracleDatabase21cExpressEditionRelease21.0.0.0.0-ProductionVersion21.3.0.0.0'
-Missing Catalog(s): NONE
-Unexpected Catalog(s): NONE
-Changed Catalog(s): NONE
-Missing Check Constraint(s): NONE
-Unexpected Check Constraint(s): NONE
-Changed Check Constraint(s): NONE
-Missing Column(s): NONE
-Unexpected Column(s):
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.DATECOLUMN
-     C##LIQUIBASE.TEST_TABLE_BASE.ID
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.ID
-     C##LIQUIBASE.TEST_TABLE_FOR_INDEX.ID
-     C##LIQUIBASE.TEST_TABLE_REFERENCE.ID
-     C##LIQUIBASE.TEST_VIEW.ID
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.INTCOLUMN
-     C##LIQUIBASE.TEST_TABLE_REFERENCE.TEST_COLUMN
-     C##LIQUIBASE.TEST_VIEW.TEST_COLUMN
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.VARCHARCOLUMN
-Changed Column(s): NONE
-Missing Database Package(s): NONE
-Unexpected Database Package(s): NONE
-Changed Database Package(s): NONE
-Missing Database PackageBody(s): NONE
-Unexpected Database PackageBody(s): NONE
-Changed Database PackageBody(s): NONE
-Missing Foreign Key(s): NONE
-Unexpected Foreign Key(s):
-     TEST_FK(TEST_TABLE_BASE[ID]->TEST_TABLE_REFERENCE[TEST_COLUMN])
-Changed Foreign Key(s): NONE
-Missing Function(s): NONE
-Unexpected Function(s): NONE
-Changed Function(s): NONE
-Missing Index(s): NONE
-Unexpected Index(s):
-     IDX_FIRST_NAME ON C##LIQUIBASE.TEST_TABLE_FOR_INDEX(ID)
-     PK_TEST_TABLE_BASE UNIQUE ON C##LIQUIBASE.TEST_TABLE_BASE(ID)
-     PK_TEST_TABLE_REFERENCE UNIQUE ON C##LIQUIBASE.TEST_TABLE_REFERENCE(TEST_COLUMN)
-     TEST_UNIQUE_CONSTRAINT ON C##LIQUIBASE.TEST_TABLE_REFERENCE(ID)
-Changed Index(s): NONE
-Missing Primary Key(s): NONE
-Unexpected Primary Key(s):
-     PK_TEST_TABLE_BASE on C##LIQUIBASE.TEST_TABLE_BASE(ID)
-     PK_TEST_TABLE_REFERENCE on C##LIQUIBASE.TEST_TABLE_REFERENCE(TEST_COLUMN)
-Changed Primary Key(s): NONE
-Missing Sequence(s): NONE
-Unexpected Sequence(s):
-     TEST_SEQUENCE
-Changed Sequence(s): NONE
-Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
-Changed Stored Procedure(s): NONE
-Missing Synonym(s): NONE
-Unexpected Synonym(s): NONE
-Changed Synonym(s): NONE
-Missing Table(s): NONE
-Unexpected Table(s):
-     TEST_TABLE_BASE
-     TEST_TABLE_FOR_COLUMN
-     TEST_TABLE_FOR_INDEX
-     TEST_TABLE_REFERENCE
-Changed Table(s): NONE
-Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
-Changed Trigger(s): NONE
-Missing Unique Constraint(s): NONE
-Unexpected Unique Constraint(s):
-     TEST_UNIQUE_CONSTRAINT on TEST_TABLE_REFERENCE(ID)
-Changed Unique Constraint(s): NONE
-Missing View(s): NONE
-Unexpected View(s):
-     TEST_VIEW
-Changed View(s): NONE
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/oracle21.3.0_to_oracle18.4.0.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/oracle21.3.0_to_oracle18.4.0.txt
deleted file mode 100644
index 3d3460399..000000000
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/oracle21.3.0_to_oracle18.4.0.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-Reference Database: C##LIQUIBASE@jdbc:oracle:thin:@localhost:1523/xe (DefaultSchema:C##LIQUIBASE)
-Comparison Database: C##LIQUIBASE@jdbc:oracle:thin:@localhost:1522/xe (DefaultSchema:C##LIQUIBASE)
-Compared Schemas: C##LIQUIBASE
-Product Name: EQUAL
-Product Version:
-     Reference: 'OracleDatabase21cExpressEditionRelease21.0.0.0.0-ProductionVersion21.3.0.0.0'
-     Target: 'OracleDatabase18cExpressEditionRelease18.0.0.0.0-ProductionVersion18.4.0.0.0'
-Missing Catalog(s): NONE
-Unexpected Catalog(s): NONE
-Changed Catalog(s): NONE
-Missing Check Constraint(s): NONE
-Unexpected Check Constraint(s): NONE
-Changed Check Constraint(s): NONE
-Missing Column(s): NONE
-Unexpected Column(s):
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.DATECOLUMN
-     C##LIQUIBASE.TEST_TABLE_BASE.ID
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.ID
-     C##LIQUIBASE.TEST_TABLE_FOR_INDEX.ID
-     C##LIQUIBASE.TEST_TABLE_REFERENCE.ID
-     C##LIQUIBASE.TEST_VIEW.ID
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.INTCOLUMN
-     C##LIQUIBASE.TEST_TABLE_REFERENCE.TEST_COLUMN
-     C##LIQUIBASE.TEST_VIEW.TEST_COLUMN
-     C##LIQUIBASE.TEST_TABLE_FOR_COLUMN.VARCHARCOLUMN
-Changed Column(s): NONE
-Missing Database Package(s): NONE
-Unexpected Database Package(s): NONE
-Changed Database Package(s): NONE
-Missing Database PackageBody(s): NONE
-Unexpected Database PackageBody(s): NONE
-Changed Database PackageBody(s): NONE
-Missing Foreign Key(s): NONE
-Unexpected Foreign Key(s):
-     TEST_FK(TEST_TABLE_BASE[ID]->TEST_TABLE_REFERENCE[TEST_COLUMN])
-Changed Foreign Key(s): NONE
-Missing Function(s): NONE
-Unexpected Function(s): NONE
-Changed Function(s): NONE
-Missing Index(s): NONE
-Unexpected Index(s):
-     IDX_FIRST_NAME ON C##LIQUIBASE.TEST_TABLE_FOR_INDEX(ID)
-     PK_TEST_TABLE_BASE UNIQUE ON C##LIQUIBASE.TEST_TABLE_BASE(ID)
-     PK_TEST_TABLE_REFERENCE UNIQUE ON C##LIQUIBASE.TEST_TABLE_REFERENCE(TEST_COLUMN)
-     TEST_UNIQUE_CONSTRAINT ON C##LIQUIBASE.TEST_TABLE_REFERENCE(ID)
-Changed Index(s): NONE
-Missing Primary Key(s): NONE
-Unexpected Primary Key(s):
-     PK_TEST_TABLE_BASE on C##LIQUIBASE.TEST_TABLE_BASE(ID)
-     PK_TEST_TABLE_REFERENCE on C##LIQUIBASE.TEST_TABLE_REFERENCE(TEST_COLUMN)
-Changed Primary Key(s): NONE
-Missing Sequence(s): NONE
-Unexpected Sequence(s):
-     TEST_SEQUENCE
-Changed Sequence(s): NONE
-Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
-Changed Stored Procedure(s): NONE
-Missing Synonym(s): NONE
-Unexpected Synonym(s): NONE
-Changed Synonym(s): NONE
-Missing Table(s): NONE
-Unexpected Table(s):
-     TEST_TABLE_BASE
-     TEST_TABLE_FOR_COLUMN
-     TEST_TABLE_FOR_INDEX
-     TEST_TABLE_REFERENCE
-Changed Table(s): NONE
-Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
-Changed Trigger(s): NONE
-Missing Unique Constraint(s): NONE
-Unexpected Unique Constraint(s):
-     TEST_UNIQUE_CONSTRAINT on TEST_TABLE_REFERENCE(ID)
-Changed Unique Constraint(s): NONE
-Missing View(s): NONE
-Unexpected View(s):
-     TEST_VIEW
-Changed View(s): NONE
\ No newline at end of file
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql14_to_postgresql13.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql14_to_postgresql13.txt
index 4ac2c2ec8..ece97e3e8 100644
--- a/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql14_to_postgresql13.txt
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql14_to_postgresql13.txt
@@ -3,8 +3,8 @@ Comparison Database: lbuser @ jdbc:postgresql://localhost:5437/lbcat (Default Sc
 Compared Schemas: public
 Product Name: EQUAL
 Product Version:
-     Reference:   '14.8 (Debian 14.8-1.pgdg110+1)'
-     Target: '13.11 (Debian 13.11-1.pgdg110+1)'
+     Reference:   '14.15 (Debian 14.15-1.pgdg120+1)'
+     Target: '13.18 (Debian 13.18-1.pgdg120+1)'
 Missing Catalog(s): NONE
 Unexpected Catalog(s): NONE
 Changed Catalog(s): NONE
@@ -38,7 +38,10 @@ Unexpected Foreign Key(s):
      test_fk(test_table_base[id] -> test_table_reference[test_column])
 Changed Foreign Key(s): NONE
 Missing Function(s): NONE
-Unexpected Function(s): NONE
+Unexpected Function(s):
+     test_function()
+     test_function1()
+     test_function2()
 Changed Function(s): NONE
 Missing Index(s): NONE
 Unexpected Index(s):
@@ -61,7 +64,8 @@ Unexpected Sequence(s):
      test_sequence
 Changed Sequence(s): NONE
 Missing Stored Procedure(s): NONE
-Unexpected Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
 Changed Stored Procedure(s): NONE
 Missing Synonym(s): NONE
 Unexpected Synonym(s): NONE
@@ -75,7 +79,8 @@ Unexpected Table(s):
      test_table_reference
 Changed Table(s): NONE
 Missing Trigger(s): NONE
-Unexpected Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
 Changed Trigger(s): NONE
 Missing Unique Constraint(s): NONE
 Unexpected Unique Constraint(s):
diff --git a/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql17_to_postgresql16.txt b/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql17_to_postgresql16.txt
new file mode 100644
index 000000000..1db542aeb
--- /dev/null
+++ b/src/main/resources/liquibase/harness/diff/expectedDiff/postgresql17_to_postgresql16.txt
@@ -0,0 +1,93 @@
+Reference Database: lbuser @ jdbc:postgresql://localhost:5438/lbcat (Default Schema: public)
+Comparison Database: lbuser @ jdbc:postgresql://localhost:5437/lbcat (Default Schema: public)
+Compared Schemas: public
+Product Name: EQUAL
+Product Version:
+     Reference:   '17.2 (Debian 17.2-1.pgdg120+1)'
+     Target: '16.6 (Debian 16.6-1.pgdg120+1)'
+Missing Catalog(s): NONE
+Unexpected Catalog(s): NONE
+Changed Catalog(s): NONE
+Missing Check Constraint(s): NONE
+Unexpected Check Constraint(s): NONE
+Changed Check Constraint(s): NONE
+Missing Column(s): NONE
+Unexpected Column(s):
+     public.test_table_for_column.dateColumn
+     public.test_view.email
+     public.test_view.first_name
+     public.test_table_base.id
+     public.test_table_for_column.id
+     public.test_table_for_index.id
+     public.test_table_for_uc.id
+     public.test_table_reference.id
+     public.test_view.id
+     public.test_table_for_column.intColumn
+     public.test_view.last_name
+     public.test_table_reference.test_column
+     public.test_table_for_column.varcharColumn
+Changed Column(s): NONE
+Missing Database Package(s): NONE
+Unexpected Database Package(s): NONE
+Changed Database Package(s): NONE
+Missing Database Package Body(s): NONE
+Unexpected Database Package Body(s): NONE
+Changed Database Package Body(s): NONE
+Missing Foreign Key(s): NONE
+Unexpected Foreign Key(s):
+     test_fk(test_table_base[id] -> test_table_reference[test_column])
+Changed Foreign Key(s): NONE
+Missing Function(s): NONE
+Unexpected Function(s):
+     test_function()
+     test_function1()
+     test_function2()
+Changed Function(s): NONE
+Missing Index(s): NONE
+Unexpected Index(s):
+     idx_first_name ON public.test_table_for_index(id)
+     test_table_base_pkey UNIQUE  ON public.test_table_base(id)
+     test_table_reference_pkey UNIQUE  ON public.test_table_reference(id)
+     test_table_reference_test_column_key UNIQUE  ON public.test_table_reference(test_column)
+     test_unique_constraint UNIQUE  ON public.test_table_for_uc(id)
+Changed Index(s): NONE
+Missing Primary Key(s): NONE
+Unexpected Primary Key(s):
+     test_table_base_pkey on public.test_table_base(id)
+     test_table_reference_pkey on public.test_table_reference(id)
+Changed Primary Key(s): NONE
+Missing Schema(s): NONE
+Unexpected Schema(s): NONE
+Changed Schema(s): NONE
+Missing Sequence(s): NONE
+Unexpected Sequence(s):
+     test_sequence
+Changed Sequence(s): NONE
+Missing Stored Procedure(s): NONE
+Unexpected Stored Procedure(s):
+     test_procedure
+Changed Stored Procedure(s): NONE
+Missing Synonym(s): NONE
+Unexpected Synonym(s): NONE
+Changed Synonym(s): NONE
+Missing Table(s): NONE
+Unexpected Table(s):
+     test_table_base
+     test_table_for_column
+     test_table_for_index
+     test_table_for_uc
+     test_table_reference
+Changed Table(s): NONE
+Missing Trigger(s): NONE
+Unexpected Trigger(s):
+     posts::test_trigger
+Changed Trigger(s): NONE
+Missing Unique Constraint(s): NONE
+Unexpected Unique Constraint(s):
+     test_table_reference_test_column_key on test_table_reference(test_column)
+     test_unique_constraint on test_table_for_uc(id)
+Changed Unique Constraint(s): NONE
+Missing View(s): NONE
+Unexpected View(s):
+     test_view
+Changed View(s): NONE
\ No newline at end of file
diff --git a/src/test/groovy/liquibase/harness/DiffChangelogTest.groovy b/src/test/groovy/liquibase/harness/DiffChangelogTest.groovy
new file mode 100644
index 000000000..20b018f19
--- /dev/null
+++ b/src/test/groovy/liquibase/harness/DiffChangelogTest.groovy
@@ -0,0 +1,6 @@
+package liquibase.harness
+
+import liquibase.harness.diff.DiffChangelogTests;
+
+class DiffChangelogTest extends DiffChangelogTests {
+}
diff --git a/src/test/groovy/liquibase/harness/DiffTest.groovy b/src/test/groovy/liquibase/harness/DiffTest.groovy
index 70944d015..df0dfc05c 100644
--- a/src/test/groovy/liquibase/harness/DiffTest.groovy
+++ b/src/test/groovy/liquibase/harness/DiffTest.groovy
@@ -1,6 +1,6 @@
 package liquibase.harness;
 
-import liquibase.harness.diff.DiffCommandTest;
+import liquibase.harness.diff.DiffTests;
 
-class DiffTest extends DiffCommandTest {
+class DiffTest extends DiffTests {
 }
diff --git a/src/test/resources/automation-runner.sh b/src/test/resources/automation-runner.sh
index 93c91b2dd..cad2920ed 100755
--- a/src/test/resources/automation-runner.sh
+++ b/src/test/resources/automation-runner.sh
@@ -131,6 +131,9 @@ case $db in
   "diff")
     test_command mvn -ntp -Dtest=DiffTest test
     ;;
+  "diffChangelog")
+    test_command mvn -ntp -Dtest=DiffChangelogTest test
+    ;;
   "hsqldb-2.4")
     test_command mvn -ntp -Dtest=$tc -DdbName=hsqldb -DdbVersion=2.4 test
     ;;
diff --git a/src/test/resources/docker/create-infra.sh b/src/test/resources/docker/create-infra.sh
index 1795ba25e..bfad8cd91 100755
--- a/src/test/resources/docker/create-infra.sh
+++ b/src/test/resources/docker/create-infra.sh
@@ -20,7 +20,13 @@ case $db in
     ;;
 
   "diff")
-    docker compose up -d postgres-17 postgres-16 postgres-15 postgres-14 postgres-13 postgres-12 mysql-5.7 mysql-8 mysql-8.4 mariadb-10.2 mariadb-10.3 mariadb-10.4 mariadb-10.5 mariadb-10.6 mariadb-10.7 mariadb-11.4 mssql-2017 mssql-2019 mssql-2022
+    docker compose up -d postgres-17 postgres-16 postgres-14 postgres-13 mysql-5.7 mysql-5.6 mysql-8 mysql-8.4 mariadb-10.4 mariadb-10.5 mariadb-10.6 mariadb-10.7 mssql-2017 mssql-2019 mssql-2022
+    sleep 40
+    docker ps -a
+    ;;
+
+  "diffChangelog")
+    docker compose up -d postgres-17 postgres-16 postgres-14 postgres-13 mysql-5.7 mysql-5.6 mysql-8 mysql-8.4 mariadb-10.4 mariadb-10.5 mariadb-10.6 mariadb-10.7 mssql-2017 mssql-2019 mssql-2022
     sleep 40
     docker ps -a
     ;;