diff --git a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml
index 4570d36b..0090cf0b 100644
--- a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml
+++ b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml
@@ -104,6 +104,18 @@
test
+
+ org.testcontainers
+ mssqlserver
+ test
+
+
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+ test
+
+
org.hsqldb
hsqldb
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 35f572cf..2c5b43f2 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
@@ -45,7 +45,20 @@ enum DatabaseType {
}
},
- POSTGRES("postgresql", "PostgreSQL");
+ POSTGRES("postgresql", "PostgreSQL"),
+
+ MSSQL("sqlserver", "Microsoft SQL Server"){
+
+ @Override
+ Object uuidToDatabase(UUID id) {
+ return id.toString();
+ }
+
+ @Override
+ UUID databaseToUUID(Object id) {
+ return UUID.fromString(id.toString());
+ }
+ };
static final String SCHEMA_NOT_SUPPORTED = "Setting the schema name not supported on MySQL!";
@@ -86,6 +99,7 @@ enum DatabaseType {
case MYSQL -> throw new IllegalArgumentException(SCHEMA_NOT_SUPPORTED);
case H2, HSQLDB -> "SET SCHEMA " + schema;
case POSTGRES -> "SET search_path TO " + schema;
+ case MSSQL -> ""; // No equivalent schema-switching command in MSSQL
};
}
}
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-sqlserver.sql b/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-sqlserver.sql
new file mode 100644
index 00000000..92fefec5
--- /dev/null
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-sqlserver.sql
@@ -0,0 +1,12 @@
+IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EVENT_PUBLICATION')
+CREATE TABLE EVENT_PUBLICATION
+(
+ ID VARCHAR(36) NOT NULL,
+ LISTENER_ID VARCHAR(512) NOT NULL,
+ EVENT_TYPE VARCHAR(512) NOT NULL,
+ SERIALIZED_EVENT VARCHAR(MAX) NOT NULL,
+ PUBLICATION_DATE DATETIME2(6) NOT NULL,
+ COMPLETION_DATE DATETIME2(6) NULL,
+ PRIMARY KEY (ID),
+ INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
+);
\ No newline at end of file
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 39cd35b4..a241ed6c 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
@@ -122,4 +122,8 @@ class DatabaseSchemaInitializerIntegrationTests {
@Nested
@ActiveProfiles("mysql")
class MySQL 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/JdbcEventPublicationRepositoryIntegrationTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java
index 4c6edcb2..710ced0e 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
@@ -453,6 +453,16 @@ class JdbcEventPublicationRepositoryIntegrationTests {
@WithPostgres
class PostgresWithDeleteCompletion extends WithDeleteCompletion {}
+ // MSSQL
+ @WithMssql
+ class MssqlWithNoDefinedSchemaName extends WithNoDefinedSchemaName {}
+
+ @WithMssql
+ class MssqlWithEmptySchemaName extends WithEmptySchemaName {}
+
+ @WithMssql
+ class MssqlWithDeleteCompletion extends WithDeleteCompletion {}
+
// MySQL
@WithMySql
@@ -489,4 +499,9 @@ class JdbcEventPublicationRepositoryIntegrationTests {
@ActiveProfiles("postgres")
@Retention(RetentionPolicy.RUNTIME)
@interface WithPostgres {}
+
+ @Nested
+ @ActiveProfiles("mssql")
+ @Retention(RetentionPolicy.RUNTIME)
+ @interface WithMssql {}
}
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mssql.properties b/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mssql.properties
new file mode 100644
index 00000000..e7c19b6c
--- /dev/null
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-mssql.properties
@@ -0,0 +1,2 @@
+spring.datasource.url=jdbc:tc:sqlserver:2022-latest:///events;encrypt=false;TC_ACCEPT_LICENSE=accept
+spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
\ No newline at end of file