Fix export of queryable stores with multiple parent IDs

This commit is contained in:
Rene Pfeuffer
2025-04-30 11:51:03 +02:00
parent 243ff9ed95
commit 82b7ad16ea
3 changed files with 32 additions and 1 deletions

View File

@@ -0,0 +1,2 @@
- type: fixed
description: Export with multiple parent IDs

View File

@@ -139,8 +139,8 @@ class SQLiteQueryableStore<T> implements QueryableStore<T>, QueryableMaintenance
statement -> {
List<R> result = new ArrayList<>();
ResultSet resultSet = statement.executeQuery();
String[] allParentIds = new String[parentIdsLength];
while (resultSet.next()) {
String[] allParentIds = new String[parentIdsLength];
for (int i = 0; i < parentIdsLength; i++) {
allParentIds[i] = resultSet.getString(i + 1);
}

View File

@@ -915,6 +915,35 @@ class SQLiteQueryableStoreTest {
.containsExactlyInAnyOrder("trillian", "dent");
}
@Test
void shouldReadAllWithMultipleIds() {
StoreTestBuilder testStoreBuilder = new StoreTestBuilder(connectionString, Repository.class.getName(), Group.class.getName());
SQLiteQueryableMutableStore<User> store1 = testStoreBuilder.withIds("42", "astronauts");
store1.put("trisha", new User("trillian", "Trillian McMillan", "mcmillan@hog.com"));
SQLiteQueryableMutableStore<User> store2 = testStoreBuilder.withIds("42", "earthlings");
store2.put("dent", new User("dent", "Arthur Dent", "dent@hog.com"));
QueryableMaintenanceStore<User> store = testStoreBuilder.forMaintenanceWithSubIds("42");
Collection<QueryableMaintenanceStore.Row<User>> rows = store.readAll();
Optional<QueryableMaintenanceStore.Row<User>> trisha = rows.stream()
.filter(row -> row.getId().equals("trisha"))
.findFirst();
assertThat(trisha)
.get()
.extracting(QueryableMaintenanceStore.Row::getParentIds)
.isEqualTo(new String[]{"42", "astronauts"});
Optional<QueryableMaintenanceStore.Row<User>> dent = rows.stream()
.filter(row -> row.getId().equals("dent"))
.findFirst();
assertThat(dent)
.get()
.extracting(QueryableMaintenanceStore.Row::getParentIds)
.isEqualTo(new String[]{"42", "earthlings"});
}
@Test
void shouldWriteAllForNewParent() {
StoreTestBuilder testStoreBuilder = new StoreTestBuilder(connectionString, Repository.class.getName());