Skip to content

Commit c11198f

Browse files
committed
GH-617 - Fix JDBC event deletion implementation.
We now augment the basic query with exactly the number of parameter placeholders as we're handing in as parameters.
1 parent cffb0a2 commit c11198f

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepository.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Objects;
2626
import java.util.Optional;
2727
import java.util.UUID;
28+
import java.util.stream.Collectors;
2829
import java.util.stream.IntStream;
2930

3031
import org.slf4j.Logger;
@@ -99,7 +100,7 @@ INSERT INTO EVENT_PUBLICATION (ID, EVENT_TYPE, LISTENER_ID, PUBLICATION_DATE, SE
99100
DELETE
100101
FROM EVENT_PUBLICATION
101102
WHERE
102-
ID IN (?)
103+
ID IN
103104
""";
104105

105106
private static final String SQL_STATEMENT_DELETE_UNCOMPLETED = """
@@ -233,9 +234,10 @@ public List<TargetEventPublication> findIncompletePublicationsPublishedBefore(In
233234
@Override
234235
public void deletePublications(List<UUID> identifiers) {
235236

236-
var databaseIds = identifiers.stream().map(this::uuidToDatabase).toList();
237+
var dbIdentifiers = identifiers.stream().map(databaseType::uuidToDatabase).toList();
237238

238-
operations.batchUpdate(SQL_STATEMENT_DELETE, batch(databaseIds, DELETE_BATCH_SIZE));
239+
batch(dbIdentifiers, DELETE_BATCH_SIZE)
240+
.forEach(it -> operations.update(SQL_STATEMENT_DELETE.concat(toParameterPlaceholders(it.length)), it));
239241
}
240242

241243
/*
@@ -341,6 +343,13 @@ private static List<Object[]> batch(List<?> input, int batchSize) {
341343
.toList();
342344
}
343345

346+
private static String toParameterPlaceholders(int length) {
347+
348+
return IntStream.range(0, length)
349+
.mapToObj(__ -> "?")
350+
.collect(Collectors.joining(", ", "(", ")"));
351+
}
352+
344353
private static class JdbcEventPublication implements TargetEventPublication {
345354

346355
private final UUID id;

spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,14 +265,15 @@ void deletesPublicationsByIdentifier() {
265265

266266
var first = createPublication(new TestEvent("first"));
267267
var second = createPublication(new TestEvent("second"));
268+
var third = createPublication(new TestEvent("third"));
268269

269-
repository.deletePublications(List.of(first.getIdentifier()));
270+
repository.deletePublications(List.of(first.getIdentifier(), second.getIdentifier()));
270271

271272
assertThat(repository.findIncompletePublications())
272273
.hasSize(1)
273274
.element(0)
274-
.matches(it -> it.getIdentifier().equals(second.getIdentifier()))
275-
.matches(it -> it.getEvent().equals(second.getEvent()));
275+
.matches(it -> it.getIdentifier().equals(third.getIdentifier()))
276+
.matches(it -> it.getEvent().equals(third.getEvent()));
276277
}
277278

278279
@Test // GH-294

spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-h2.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
44
spring.test.database.replace=NONE
55

66
spring.modulith.events.jdbc-schema-initialization.enabled=true
7+
8+
logging.level.org.springframework.jdbc=trace
9+
spring.main.banner-mode=off

0 commit comments

Comments
 (0)