diff --git a/driver/src/main/java/org/neo4j/driver/SessionConfig.java b/driver/src/main/java/org/neo4j/driver/SessionConfig.java index 99bcc6f0b9..e1c63a74d8 100644 --- a/driver/src/main/java/org/neo4j/driver/SessionConfig.java +++ b/driver/src/main/java/org/neo4j/driver/SessionConfig.java @@ -26,6 +26,7 @@ import java.util.Arrays; import java.util.Objects; import java.util.Optional; +import java.util.stream.StreamSupport; import org.neo4j.driver.async.AsyncSession; import org.neo4j.driver.exceptions.UnsupportedFeatureException; import org.neo4j.driver.reactive.ReactiveSession; @@ -236,7 +237,7 @@ public Builder withBookmarks(Bookmark... bookmarks) { if (bookmarks == null) { this.bookmarks = null; } else { - this.bookmarks = Arrays.asList(bookmarks); + this.bookmarks = Arrays.stream(bookmarks).toList(); } return this; } @@ -261,7 +262,10 @@ public Builder withBookmarks(Bookmark... bookmarks) { * @return this builder */ public Builder withBookmarks(Iterable bookmarks) { - this.bookmarks = bookmarks; + if (bookmarks != null) { + this.bookmarks = + StreamSupport.stream(bookmarks.spliterator(), false).toList(); + } return this; } diff --git a/driver/src/test/java/org/neo4j/driver/SessionConfigTest.java b/driver/src/test/java/org/neo4j/driver/SessionConfigTest.java index 0a80570268..906f7352be 100644 --- a/driver/src/test/java/org/neo4j/driver/SessionConfigTest.java +++ b/driver/src/test/java/org/neo4j/driver/SessionConfigTest.java @@ -148,6 +148,32 @@ void shouldAcceptNullInBookmarks() { assertEquals(Arrays.asList(one, two, null), config2.bookmarks()); } + @Test + void shouldSaveBookmarksCopyFromArray() { + var bookmark1 = parse("one"); + var bookmark2 = parse("two"); + var bookmarks = new Bookmark[] {bookmark1, bookmark2}; + var config = builder().withBookmarks(bookmarks).build(); + assertEquals(List.of(bookmark1, bookmark2), config.bookmarks()); + + bookmarks[0] = parse("three"); + + assertEquals(List.of(bookmark1, bookmark2), config.bookmarks()); + } + + @Test + void shouldSaveBookmarksCopyFromIterable() { + var bookmark1 = parse("one"); + var bookmark2 = parse("two"); + var bookmarks = new ArrayList<>(List.of(bookmark1, bookmark2)); + var config = builder().withBookmarks(bookmarks).build(); + assertEquals(List.of(bookmark1, bookmark2), config.bookmarks()); + + bookmarks.add(parse("three")); + + assertEquals(List.of(bookmark1, bookmark2), config.bookmarks()); + } + @ParameterizedTest @ValueSource(longs = {100, 1, 1000, Long.MAX_VALUE, -1}) void shouldChangeFetchSize(long value) {