diff --git a/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseUpdateChangeLogTest.java b/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseUpdateChangeLogTest.java new file mode 100644 index 0000000..a730150 --- /dev/null +++ b/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseUpdateChangeLogTest.java @@ -0,0 +1,59 @@ +package tech.ydb.liquibase; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import liquibase.exception.CommandExecutionException; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; + +/** + * @author Kirill Kurdyukov + */ +public class YdbDatabaseUpdateChangeLogTest extends BaseTest { + + @Test + void integrationTest() throws CommandExecutionException, SQLException { + migrateChangeFile("./changelogs/changelog-init.xml"); + try (PreparedStatement ps = DriverManager.getConnection(jdbcUrl()).prepareStatement( + "INSERT INTO DATABASECHANGELOG(" + + "ID, AUTHOR, FILENAME, DATEEXECUTED, " + + "ORDEREXECUTED, EXECTYPE, MD5SUM, " + + "DESCRIPTION, COMMENTS, TAG, LIQUIBASE, " + + "CONTEXTS, LABELS, DEPLOYMENT_ID) " + + "VALUES (?, 'kurdyukov-kir', 'stub-file.xml', DATETIME('2024-04-01T11:30:20Z'), ?, " + + "'EXECUTED', '9:cb49879b530528bc2555422bb7db58da', 'Stub', " + + "'', '', '4.25.1', '', '', '1971019939')" + )) { + for (int i = 0; i < 210; i++) { + ps.setString(1, String.valueOf(i)); + ps.setInt(2, i); + + ps.executeUpdate(); + } + } + + migrateChangeFile("./changelogs/update/changelog-step-1.xml"); + try (Connection connection = DriverManager.getConnection(jdbcUrl())) { + ResultSet resultSet = connection.createStatement() + .executeQuery("SELECT COUNT(*) AS cnt FROM test WHERE token is NULL"); + assertTrue(resultSet.next()); + assertEquals(3, resultSet.getLong("cnt")); + } + + migrateChangeFile("./changelogs/update/changelog-step-2.xml"); + try (Connection connection = DriverManager.getConnection(jdbcUrl())) { + ResultSet resultSet = connection.createStatement() + .executeQuery("SELECT COUNT(*) AS cnt FROM test WHERE token is NULL"); + assertTrue(resultSet.next()); + assertEquals(0, resultSet.getLong("cnt")); + } + + try (Connection connection = DriverManager.getConnection(jdbcUrl())) { + connection.createStatement().execute("DROP TABLE test"); + } + } +} diff --git a/liquibase-dialect/src/test/resources/changelogs/update/changelog-step-1.xml b/liquibase-dialect/src/test/resources/changelogs/update/changelog-step-1.xml new file mode 100644 index 0000000..d4a2e0a --- /dev/null +++ b/liquibase-dialect/src/test/resources/changelogs/update/changelog-step-1.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/liquibase-dialect/src/test/resources/changelogs/update/changelog-step-2.xml b/liquibase-dialect/src/test/resources/changelogs/update/changelog-step-2.xml new file mode 100644 index 0000000..a95e527 --- /dev/null +++ b/liquibase-dialect/src/test/resources/changelogs/update/changelog-step-2.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/liquibase-dialect/src/test/resources/changelogs/update/create-table.xml b/liquibase-dialect/src/test/resources/changelogs/update/create-table.xml new file mode 100644 index 0000000..a1d8225 --- /dev/null +++ b/liquibase-dialect/src/test/resources/changelogs/update/create-table.xml @@ -0,0 +1,21 @@ + + + + + + create table test( + id Int32 NOT NULL, + code Text NOT NULL, + token bool, + PRIMARY KEY (id) + ); + + + drop table test; + + + \ No newline at end of file diff --git a/liquibase-dialect/src/test/resources/changelogs/update/insert.xml b/liquibase-dialect/src/test/resources/changelogs/update/insert.xml new file mode 100644 index 0000000..22c211f --- /dev/null +++ b/liquibase-dialect/src/test/resources/changelogs/update/insert.xml @@ -0,0 +1,17 @@ + + + + + + insert into test(id, code, token) + values (1, 'A', null), + (2, 'A', null), + (3, 'A', null), + (4, 'B', true); + + + \ No newline at end of file diff --git a/liquibase-dialect/src/test/resources/changelogs/update/update.xml b/liquibase-dialect/src/test/resources/changelogs/update/update.xml new file mode 100644 index 0000000..9be3c9a --- /dev/null +++ b/liquibase-dialect/src/test/resources/changelogs/update/update.xml @@ -0,0 +1,16 @@ + + + + + + update test set token= true where code = 'A'; + + + update test set token=NULL where code='A'; + + + \ No newline at end of file