diff --git a/driver/src/main/java/org/neo4j/driver/SessionConfig.java b/driver/src/main/java/org/neo4j/driver/SessionConfig.java index a33d19a2eb..99f36a5dfe 100644 --- a/driver/src/main/java/org/neo4j/driver/SessionConfig.java +++ b/driver/src/main/java/org/neo4j/driver/SessionConfig.java @@ -25,6 +25,8 @@ import java.util.Arrays; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import org.neo4j.driver.async.AsyncSession; import org.neo4j.driver.reactive.RxSession; import org.reactivestreams.Subscription; @@ -184,7 +186,7 @@ public Builder withBookmarks(Bookmark... bookmarks) { if (bookmarks == null) { this.bookmarks = null; } else { - this.bookmarks = Arrays.asList(bookmarks); + this.bookmarks = Arrays.stream(bookmarks).collect(Collectors.toList()); } return this; } @@ -201,7 +203,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).collect(Collectors.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 ad27a4eb0a..63f2f412e1 100644 --- a/driver/src/test/java/org/neo4j/driver/SessionConfigTest.java +++ b/driver/src/test/java/org/neo4j/driver/SessionConfigTest.java @@ -150,6 +150,32 @@ void shouldAcceptNullInBookmarks() { assertEquals(Arrays.asList(one, two, null), config2.bookmarks()); } + @Test + void shouldSaveBookmarksCopyFromArray() { + Bookmark bookmark1 = parse("one"); + Bookmark bookmark2 = parse("two"); + Bookmark[] bookmarks = new Bookmark[] {bookmark1, bookmark2}; + SessionConfig config = builder().withBookmarks(bookmarks).build(); + assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks()); + + bookmarks[0] = parse("three"); + + assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks()); + } + + @Test + void shouldSaveBookmarksCopyFromIterable() { + Bookmark bookmark1 = parse("one"); + Bookmark bookmark2 = parse("two"); + List bookmarks = new ArrayList<>(Arrays.asList(bookmark1, bookmark2)); + SessionConfig config = builder().withBookmarks(bookmarks).build(); + assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks()); + + bookmarks.add(parse("three")); + + assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks()); + } + @ParameterizedTest @ValueSource(longs = {100, 1, 1000, Long.MAX_VALUE, -1}) void shouldChangeFetchSize(long value) {