diff --git a/gradle/changelog/export_with_multiple_parent_ids.yaml b/gradle/changelog/export_with_multiple_parent_ids.yaml new file mode 100644 index 0000000000..6f2a8b9ffe --- /dev/null +++ b/gradle/changelog/export_with_multiple_parent_ids.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Export with multiple parent IDs diff --git a/scm-persistence/src/main/java/sonia/scm/store/sqlite/SQLiteQueryableStore.java b/scm-persistence/src/main/java/sonia/scm/store/sqlite/SQLiteQueryableStore.java index af152b3c52..3b8d9174dc 100644 --- a/scm-persistence/src/main/java/sonia/scm/store/sqlite/SQLiteQueryableStore.java +++ b/scm-persistence/src/main/java/sonia/scm/store/sqlite/SQLiteQueryableStore.java @@ -139,8 +139,8 @@ class SQLiteQueryableStore implements QueryableStore, QueryableMaintenance statement -> { List 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); } diff --git a/scm-persistence/src/test/java/sonia/scm/store/sqlite/SQLiteQueryableStoreTest.java b/scm-persistence/src/test/java/sonia/scm/store/sqlite/SQLiteQueryableStoreTest.java index 54e306fe3b..648654321c 100644 --- a/scm-persistence/src/test/java/sonia/scm/store/sqlite/SQLiteQueryableStoreTest.java +++ b/scm-persistence/src/test/java/sonia/scm/store/sqlite/SQLiteQueryableStoreTest.java @@ -915,6 +915,35 @@ class SQLiteQueryableStoreTest { .containsExactlyInAnyOrder("trillian", "dent"); } + @Test + void shouldReadAllWithMultipleIds() { + StoreTestBuilder testStoreBuilder = new StoreTestBuilder(connectionString, Repository.class.getName(), Group.class.getName()); + SQLiteQueryableMutableStore store1 = testStoreBuilder.withIds("42", "astronauts"); + store1.put("trisha", new User("trillian", "Trillian McMillan", "mcmillan@hog.com")); + SQLiteQueryableMutableStore store2 = testStoreBuilder.withIds("42", "earthlings"); + store2.put("dent", new User("dent", "Arthur Dent", "dent@hog.com")); + + QueryableMaintenanceStore store = testStoreBuilder.forMaintenanceWithSubIds("42"); + + Collection> rows = store.readAll(); + + Optional> trisha = rows.stream() + .filter(row -> row.getId().equals("trisha")) + .findFirst(); + assertThat(trisha) + .get() + .extracting(QueryableMaintenanceStore.Row::getParentIds) + .isEqualTo(new String[]{"42", "astronauts"}); + + Optional> 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());