GH-628 - 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.
This commit is contained in:
Oliver Drotbohm
2024-05-23 00:05:03 +02:00
parent 1707be1c54
commit adb8411d0b
3 changed files with 19 additions and 6 deletions

View File

@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.slf4j.Logger;
@@ -99,7 +100,7 @@ class JdbcEventPublicationRepository implements EventPublicationRepository {
DELETE
FROM EVENT_PUBLICATION
WHERE
ID IN (?)
ID IN
""";
private static final String SQL_STATEMENT_DELETE_UNCOMPLETED = """
@@ -233,9 +234,10 @@ class JdbcEventPublicationRepository implements EventPublicationRepository {
@Override
public void deletePublications(List<UUID> identifiers) {
var databaseIds = identifiers.stream().map(this::uuidToDatabase).toList();
var dbIdentifiers = identifiers.stream().map(databaseType::uuidToDatabase).toList();
operations.batchUpdate(SQL_STATEMENT_DELETE, batch(databaseIds, DELETE_BATCH_SIZE));
batch(dbIdentifiers, DELETE_BATCH_SIZE)
.forEach(it -> operations.update(SQL_STATEMENT_DELETE.concat(toParameterPlaceholders(it.length)), it));
}
/*
@@ -341,6 +343,13 @@ class JdbcEventPublicationRepository implements EventPublicationRepository {
.toList();
}
private static String toParameterPlaceholders(int length) {
return IntStream.range(0, length)
.mapToObj(__ -> "?")
.collect(Collectors.joining(", ", "(", ")"));
}
private static class JdbcEventPublication implements TargetEventPublication {
private final UUID id;

View File

@@ -265,14 +265,15 @@ class JdbcEventPublicationRepositoryIntegrationTests {
var first = createPublication(new TestEvent("first"));
var second = createPublication(new TestEvent("second"));
var third = createPublication(new TestEvent("third"));
repository.deletePublications(List.of(first.getIdentifier()));
repository.deletePublications(List.of(first.getIdentifier(), second.getIdentifier()));
assertThat(repository.findIncompletePublications())
.hasSize(1)
.element(0)
.matches(it -> it.getIdentifier().equals(second.getIdentifier()))
.matches(it -> it.getEvent().equals(second.getEvent()));
.matches(it -> it.getIdentifier().equals(third.getIdentifier()))
.matches(it -> it.getEvent().equals(third.getEvent()));
}
@Test // GH-294

View File

@@ -4,3 +4,6 @@ spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.test.database.replace=NONE
spring.modulith.events.jdbc-schema-initialization.enabled=true
logging.level.org.springframework.jdbc=trace
spring.main.banner-mode=off