From e0b79e5fb19195a09bb07eb1ca2c432f0811e4f8 Mon Sep 17 00:00:00 2001 From: FezLight Date: Tue, 24 Sep 2024 00:47:06 +0200 Subject: [PATCH] GH-836 - Add support for MariaDB database. --- .../spring-modulith-events-jdbc/pom.xml | 12 ++++++++++++ .../modulith/events/jdbc/DatabaseType.java | 18 ++++++++++++++++++ .../src/main/resources/schema-mariadb.sql | 11 +++++++++++ ...abaseSchemaInitializerIntegrationTests.java | 4 ++++ .../DatabaseSchemaInitializerUnitTests.java | 7 +++++++ ...tPublicationRepositoryIntegrationTests.java | 13 +++++++++++++ .../resources/application-mariadb.properties | 2 ++ .../antora/modules/ROOT/pages/appendix.adoc | 8 ++++++++ 8 files changed, 75 insertions(+) create mode 100644 spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mariadb.sql create mode 100644 spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mariadb.properties diff --git a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml index 0090cf0b..ab264c5c 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml +++ b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml @@ -104,6 +104,12 @@ test + + org.testcontainers + mariadb + test + + org.testcontainers mssqlserver @@ -140,6 +146,12 @@ test + + org.mariadb.jdbc + mariadb-java-client + test + + diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java index 34367f00..7a0e8513 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java @@ -50,6 +50,24 @@ enum DatabaseType { } }, + MARIADB("mariadb", "MariaDB") { + + @Override + Object uuidToDatabase(UUID id) { + return id.toString(); + } + + @Override + UUID databaseToUUID(Object id) { + return UUID.fromString(id.toString()); + } + + @Override + boolean isSchemaSupported() { + return false; + } + }, + POSTGRES("postgresql", "PostgreSQL"), MSSQL("sqlserver", "Microsoft SQL Server") { diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mariadb.sql b/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mariadb.sql new file mode 100644 index 00000000..370dec71 --- /dev/null +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-mariadb.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION +( + ID VARCHAR(36) NOT NULL, + LISTENER_ID VARCHAR(512) NOT NULL, + EVENT_TYPE VARCHAR(512) NOT NULL, + SERIALIZED_EVENT VARCHAR(4000) NOT NULL, + PUBLICATION_DATE TIMESTAMP(6) NOT NULL, + COMPLETION_DATE TIMESTAMP(6) DEFAULT NULL NULL, + PRIMARY KEY (ID), + INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE) +); diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java index a241ed6c..86dd9d5f 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java @@ -123,6 +123,10 @@ class DatabaseSchemaInitializerIntegrationTests { @ActiveProfiles("mysql") class MySQL extends WithInitEnabled {} + @Nested + @ActiveProfiles("mariadb") + class MariaDB extends WithInitEnabled {} + @Nested @ActiveProfiles("mssql") class MSSQL extends WithInitEnabled {} diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java index b376e547..cb5b177a 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerUnitTests.java @@ -47,6 +47,13 @@ class DatabaseSchemaInitializerUnitTests { assertThatIllegalStateException().isThrownBy(() -> createInitializer(withSchema(schema), DatabaseType.MYSQL)); } + // GH-836 + @ParameterizedTest + @ValueSource(strings = { "", "test" }) + void rejectsExplicitSchemaNameForMariDB(String schema) { + assertThatIllegalStateException().isThrownBy(() -> createInitializer(withSchema(schema), DatabaseType.MARIADB)); + } + // GH-804 @ParameterizedTest @ValueSource(strings = { "", "test" }) diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java index 73b40847..4e77f087 100644 --- a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java @@ -469,6 +469,14 @@ class JdbcEventPublicationRepositoryIntegrationTests { @WithMySql class MysqlWithDeleteCompletion extends WithDeleteCompletion {} + // MariaDB + + @WithMariaDB + class MariaDBWithNoDefinedSchemaName extends WithNoDefinedSchemaName {} + + @WithMariaDB + class MariaDBWithDeleteCompletion extends WithDeleteCompletion {} + @Value private static final class TestEvent { String eventId; @@ -493,6 +501,11 @@ class JdbcEventPublicationRepositoryIntegrationTests { @Retention(RetentionPolicy.RUNTIME) @interface WithMySql {} + @Nested + @ActiveProfiles("mariadb") + @Retention(RetentionPolicy.RUNTIME) + @interface WithMariaDB {} + @Nested @ActiveProfiles("postgres") @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mariadb.properties b/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mariadb.properties new file mode 100644 index 00000000..f15d301f --- /dev/null +++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mariadb.properties @@ -0,0 +1,2 @@ +spring.datasource.url=jdbc:tc:mariadb:11.5.2:///events +spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver diff --git a/src/docs/antora/modules/ROOT/pages/appendix.adoc b/src/docs/antora/modules/ROOT/pages/appendix.adoc index eb175693..ea1708b4 100644 --- a/src/docs/antora/modules/ROOT/pages/appendix.adoc +++ b/src/docs/antora/modules/ROOT/pages/appendix.adoc @@ -203,6 +203,14 @@ include::{jdbc-schema-base}/schema-hsqldb.sql[] include::{jdbc-schema-base}/schema-mysql.sql[] ---- +[[schemas.mariadb]] +=== MariaDB + +[source, sql] +---- +include::{jdbc-schema-base}/schema-mariadb.sql[] +---- + [[schemas.postgresql]] === PostgreSQL