From 93cd816761ea4fcbfe49de093a5db026ccaa50d9 Mon Sep 17 00:00:00 2001 From: Kirill Kurdyukov Date: Fri, 8 Nov 2024 15:48:37 +0300 Subject: [PATCH 1/3] feat: support UUID type --- liquibase-dialect/pom.xml | 4 +-- .../tech/ydb/liquibase/type/UuidTypeYdb.java | 28 +++++++++++++++++++ .../liquibase.datatype.LiquibaseDataType | 3 +- .../ydb/liquibase/YdbDatabaseCSVLoadTest.java | 16 +++++------ ...YdbDatabaseLiquibaseAllTypesTableTest.java | 1 + .../resources/changelogs/csv/test-insert.csv | 8 +++--- .../resources/changelogs/csv/test-upsert.csv | 6 ++-- .../changelogs/migration/all_types_table.xml | 2 ++ 8 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 liquibase-dialect/src/main/java/tech/ydb/liquibase/type/UuidTypeYdb.java diff --git a/liquibase-dialect/pom.xml b/liquibase-dialect/pom.xml index a5b0826..b38f242 100644 --- a/liquibase-dialect/pom.xml +++ b/liquibase-dialect/pom.xml @@ -43,7 +43,7 @@ 1.8 4.24.0 - 2.2.0 + 2.3.3 @@ -119,7 +119,7 @@ true - cr.yandex/yc/yandex-docker-local-ydb:24.1 + cr.yandex/yc/yandex-docker-local-ydb:trunk src/test/resources/logging.properties diff --git a/liquibase-dialect/src/main/java/tech/ydb/liquibase/type/UuidTypeYdb.java b/liquibase-dialect/src/main/java/tech/ydb/liquibase/type/UuidTypeYdb.java new file mode 100644 index 0000000..f190ab5 --- /dev/null +++ b/liquibase-dialect/src/main/java/tech/ydb/liquibase/type/UuidTypeYdb.java @@ -0,0 +1,28 @@ +package tech.ydb.liquibase.type; + +import liquibase.change.core.LoadDataChange; +import liquibase.datatype.DataTypeInfo; +import liquibase.datatype.LiquibaseDataType; + +/** + * @author Kirill Kurdyukov + */ +@DataTypeInfo( + name = "UUID", + aliases = {"uniqueidentifier", "java.util.UUID"}, + minParameters = 0, + maxParameters = 0, + priority = LiquibaseDataType.PRIORITY_DATABASE +) +public class UuidTypeYdb extends BaseTypeYdb { + + @Override + public LoadDataChange.LOAD_DATA_TYPE getLoadTypeName() { + return LoadDataChange.LOAD_DATA_TYPE.UUID; + } + + @Override + protected String objectToSql(Object value) { + return "Uuid('" + value + "')"; + } +} diff --git a/liquibase-dialect/src/main/resources/META-INF/services/liquibase.datatype.LiquibaseDataType b/liquibase-dialect/src/main/resources/META-INF/services/liquibase.datatype.LiquibaseDataType index 50d9525..351f4e5 100644 --- a/liquibase-dialect/src/main/resources/META-INF/services/liquibase.datatype.LiquibaseDataType +++ b/liquibase-dialect/src/main/resources/META-INF/services/liquibase.datatype.LiquibaseDataType @@ -17,4 +17,5 @@ tech.ydb.liquibase.type.TinyIntTypeYdb tech.ydb.liquibase.type.Uint8TypeYdb tech.ydb.liquibase.type.Uint16TypeYdb tech.ydb.liquibase.type.Uint32TypeYdb -tech.ydb.liquibase.type.Uint64TypeYdb \ No newline at end of file +tech.ydb.liquibase.type.Uint64TypeYdb +tech.ydb.liquibase.type.UuidTypeYdb \ No newline at end of file diff --git a/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseCSVLoadTest.java b/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseCSVLoadTest.java index a631fe8..16addd6 100644 --- a/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseCSVLoadTest.java +++ b/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseCSVLoadTest.java @@ -24,32 +24,32 @@ void changeLogLoadCSVFileTest() throws SQLException, LiquibaseException { assertTrue(migrationStr.contains("UPSERT INTO all_types_table (id, bool_column, bigint_column, smallint_column, " + "tinyint_column, float_column, double_column, decimal_column, uint8_column, " + "uint16_column, uint32_column, uint64_column, text_column, binary_column, json_column, " + - "jsondocument_column, date_column, datetime_column, timestamp_column, interval_column) VALUES " + + "jsondocument_column, date_column, datetime_column, timestamp_column, interval_column, uuid_column) VALUES " + "('1', 'true', '123123', '13000', '113', '1.123', '1.123123', '1.123123', '12', '13', '14', " + "'15', 'Кирилл Курдюков Алексеевич', 'binary', '{\"asd\": \"asd\"}', '{\"asd\": \"asd\"}', " + - "'2014-04-06', '2023-09-16T12:30', '2023-07-31T17:00:00.000000Z', 'PT10S');" + "'2014-04-06', '2023-09-16T12:30', '2023-07-31T17:00:00.000000Z', 'PT10S', '689fd2b6-5764-4c43-8803-519da8f5f305');" )); assertTrue(migrationStr.contains("UPSERT INTO all_types_table (id, bool_column, bigint_column, smallint_column, " + "tinyint_column, float_column, double_column, decimal_column, uint8_column, " + "uint16_column, uint32_column, uint64_column, text_column, binary_column, json_column, " + - "jsondocument_column, date_column, datetime_column, timestamp_column, interval_column) VALUES " + + "jsondocument_column, date_column, datetime_column, timestamp_column, interval_column, uuid_column) VALUES " + "('5', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, " + - "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);" + "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);" )); assertTrue(migrationStr.contains("INSERT INTO all_types_table (id, bool_column, bigint_column, smallint_column, " + "tinyint_column, float_column, double_column, decimal_column, uint8_column, uint16_column, " + "uint32_column, uint64_column, text_column, binary_column, json_column, jsondocument_column, " + - "date_column, datetime_column, timestamp_column, interval_column) VALUES " + + "date_column, datetime_column, timestamp_column, interval_column, uuid_column) VALUES " + "('2', 'true', '123123', '13000', '112', '1.123', '1.123123', '1.123123', '12', '13', " + "'14', '15', 'Кирилл Курдюков Алексеевич', 'binary', '{\"asd\": \"asd\"}', '{\"asd\": \"asd\"}', " + - "'2014-04-06', '2023-09-16T12:30', '2023-07-31T17:00:00.000000Z', 'PT10S'), " + + "'2014-04-06', '2023-09-16T12:30', '2023-07-31T17:00:00.000000Z', 'PT10S', '689fd2b6-5764-4c43-8803-519da8f5f305'), " + "('3', 'true', '123123', '13000', '112', '1.123', '1.123123', '1.123123', '12', " + "'13', '14', '15', 'Кирилл Курдюков Алексеевич', 'binary', '{\"asd\": \"asd\"}', " + - "'{\"asd\": \"asd\"}', '2014-04-06', '2023-09-16T12:30', '2023-07-31T17:00:00.000000Z', 'PT10S'), " + + "'{\"asd\": \"asd\"}', '2014-04-06', '2023-09-16T12:30', '2023-07-31T17:00:00.000000Z', 'PT10S', '689fd2b6-5764-4c43-8803-519da8f5f305'), " + "('6', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, " + - "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);" + "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);" )); migrateChangeFile(changeLogFile); diff --git a/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseLiquibaseAllTypesTableTest.java b/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseLiquibaseAllTypesTableTest.java index f5ae155..ad6927f 100644 --- a/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseLiquibaseAllTypesTableTest.java +++ b/liquibase-dialect/src/test/java/tech/ydb/liquibase/YdbDatabaseLiquibaseAllTypesTableTest.java @@ -38,6 +38,7 @@ void changelogXmlMigrationAllTypesTableTest() throws SQLException, LiquibaseExce "datetime_column DATETIME, " + "timestamp_column TIMESTAMP, " + "interval_column INTERVAL, " + + "uuid_column UUID, " + "PRIMARY KEY (id) " + ");" ) diff --git a/liquibase-dialect/src/test/resources/changelogs/csv/test-insert.csv b/liquibase-dialect/src/test/resources/changelogs/csv/test-insert.csv index 1cc0f33..77c7539 100644 --- a/liquibase-dialect/src/test/resources/changelogs/csv/test-insert.csv +++ b/liquibase-dialect/src/test/resources/changelogs/csv/test-insert.csv @@ -1,4 +1,4 @@ -id,bool_column,bigint_column,smallint_column,tinyint_column,float_column,double_column,decimal_column,uint8_column,uint16_column,uint32_column,uint64_column,text_column,binary_column,json_column,jsondocument_column,date_column,datetime_column,timestamp_column,interval_column -2,true,123123,13000,112,1.123,1.123123,1.123123,12,13,14,15,Кирилл Курдюков Алексеевич,binary,{"asd": "asd"},{"asd": "asd"},2014-04-06,2023-09-16T12:30,2023-07-31T17:00:00.000000Z,PT10S -3,true,123123,13000,112,1.123,1.123123,1.123123,12,13,14,15,Кирилл Курдюков Алексеевич,binary,{"asd": "asd"},{"asd": "asd"},2014-04-06,2023-09-16T12:30,2023-07-31T17:00:00.000000Z,PT10S -6,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null \ No newline at end of file +id,bool_column,bigint_column,smallint_column,tinyint_column,float_column,double_column,decimal_column,uint8_column,uint16_column,uint32_column,uint64_column,text_column,binary_column,json_column,jsondocument_column,date_column,datetime_column,timestamp_column,interval_column,uuid_column +2,true,123123,13000,112,1.123,1.123123,1.123123,12,13,14,15,Кирилл Курдюков Алексеевич,binary,{"asd": "asd"},{"asd": "asd"},2014-04-06,2023-09-16T12:30,2023-07-31T17:00:00.000000Z,PT10S,689fd2b6-5764-4c43-8803-519da8f5f305 +3,true,123123,13000,112,1.123,1.123123,1.123123,12,13,14,15,Кирилл Курдюков Алексеевич,binary,{"asd": "asd"},{"asd": "asd"},2014-04-06,2023-09-16T12:30,2023-07-31T17:00:00.000000Z,PT10S,689fd2b6-5764-4c43-8803-519da8f5f305 +6,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null \ No newline at end of file diff --git a/liquibase-dialect/src/test/resources/changelogs/csv/test-upsert.csv b/liquibase-dialect/src/test/resources/changelogs/csv/test-upsert.csv index 39b8d6a..bcff415 100644 --- a/liquibase-dialect/src/test/resources/changelogs/csv/test-upsert.csv +++ b/liquibase-dialect/src/test/resources/changelogs/csv/test-upsert.csv @@ -1,3 +1,3 @@ -id,bool_column,bigint_column,smallint_column,tinyint_column,float_column,double_column,decimal_column,uint8_column,uint16_column,uint32_column,uint64_column,text_column,binary_column,json_column,jsondocument_column,date_column,datetime_column,timestamp_column,interval_column -1,true,123123,13000,113,1.123,1.123123,1.123123,12,13,14,15,Кирилл Курдюков Алексеевич,binary,{"asd": "asd"},{"asd": "asd"},2014-04-06,2023-09-16T12:30,2023-07-31T17:00:00.000000Z,PT10S -5,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null \ No newline at end of file +id,bool_column,bigint_column,smallint_column,tinyint_column,float_column,double_column,decimal_column,uint8_column,uint16_column,uint32_column,uint64_column,text_column,binary_column,json_column,jsondocument_column,date_column,datetime_column,timestamp_column,interval_column,uuid_column +1,true,123123,13000,113,1.123,1.123123,1.123123,12,13,14,15,Кирилл Курдюков Алексеевич,binary,{"asd": "asd"},{"asd": "asd"},2014-04-06,2023-09-16T12:30,2023-07-31T17:00:00.000000Z,PT10S,689fd2b6-5764-4c43-8803-519da8f5f305 +5,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null \ No newline at end of file diff --git a/liquibase-dialect/src/test/resources/changelogs/migration/all_types_table.xml b/liquibase-dialect/src/test/resources/changelogs/migration/all_types_table.xml index e1cb5ef..4b5a868 100644 --- a/liquibase-dialect/src/test/resources/changelogs/migration/all_types_table.xml +++ b/liquibase-dialect/src/test/resources/changelogs/migration/all_types_table.xml @@ -51,6 +51,8 @@ + + From 91860cbf8c52f2f80d71fdd1c082aefd973ad435 Mon Sep 17 00:00:00 2001 From: Kirill Kurdyukov Date: Fri, 8 Nov 2024 16:09:57 +0300 Subject: [PATCH 2/3] feat: support UUID type --- liquibase-dialect/CHANGELOG.md | 4 ++++ liquibase-dialect/pom.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/liquibase-dialect/CHANGELOG.md b/liquibase-dialect/CHANGELOG.md index a0cf5d7..d02d0a8 100644 --- a/liquibase-dialect/CHANGELOG.md +++ b/liquibase-dialect/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.0 ## + +* Supported UUID type in .xml, .yaml, and .json formats + ## 1.0.2 ## * Added duration format for `Interval` type and ISO for time types when loading data into tables diff --git a/liquibase-dialect/pom.xml b/liquibase-dialect/pom.xml index b38f242..77b154a 100644 --- a/liquibase-dialect/pom.xml +++ b/liquibase-dialect/pom.xml @@ -6,7 +6,7 @@ tech.ydb.dialects liquibase-ydb-dialect - 1.1.0-SNAPSHOT + 1.1.0 Liquibase YDB Dialect Support Liquibase YDB Dialect From 7153ea3d8c80d222f082d31ba62a2535396cbcbc Mon Sep 17 00:00:00 2001 From: Kirill Kurdyukov Date: Fri, 8 Nov 2024 16:11:23 +0300 Subject: [PATCH 3/3] feat: support UUID type --- liquibase-dialect/stress-test/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase-dialect/stress-test/run.sh b/liquibase-dialect/stress-test/run.sh index c68920d..82de411 100644 --- a/liquibase-dialect/stress-test/run.sh +++ b/liquibase-dialect/stress-test/run.sh @@ -1,4 +1,4 @@ -YDB_JDBC_DRIVER_VERSION=2.2.0 +YDB_JDBC_DRIVER_VERSION=2.3.3 echo Stress test using ydb-jdbc-driver-shaded:"$YDB_JDBC_DRIVER_VERSION"