Skip to content

Commit 3f03a8e

Browse files
authored
Make a copy of bookmarks in SessionConfig builder (#1465)
1 parent 9ee21c0 commit 3f03a8e

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

driver/src/main/java/org/neo4j/driver/SessionConfig.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Arrays;
2727
import java.util.Objects;
2828
import java.util.Optional;
29+
import java.util.stream.StreamSupport;
2930
import org.neo4j.driver.async.AsyncSession;
3031
import org.neo4j.driver.exceptions.UnsupportedFeatureException;
3132
import org.neo4j.driver.reactive.ReactiveSession;
@@ -236,7 +237,7 @@ public Builder withBookmarks(Bookmark... bookmarks) {
236237
if (bookmarks == null) {
237238
this.bookmarks = null;
238239
} else {
239-
this.bookmarks = Arrays.asList(bookmarks);
240+
this.bookmarks = Arrays.stream(bookmarks).toList();
240241
}
241242
return this;
242243
}
@@ -261,7 +262,10 @@ public Builder withBookmarks(Bookmark... bookmarks) {
261262
* @return this builder
262263
*/
263264
public Builder withBookmarks(Iterable<Bookmark> bookmarks) {
264-
this.bookmarks = bookmarks;
265+
if (bookmarks != null) {
266+
this.bookmarks =
267+
StreamSupport.stream(bookmarks.spliterator(), false).toList();
268+
}
265269
return this;
266270
}
267271

driver/src/test/java/org/neo4j/driver/SessionConfigTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,32 @@ void shouldAcceptNullInBookmarks() {
148148
assertEquals(Arrays.asList(one, two, null), config2.bookmarks());
149149
}
150150

151+
@Test
152+
void shouldSaveBookmarksCopyFromArray() {
153+
var bookmark1 = parse("one");
154+
var bookmark2 = parse("two");
155+
var bookmarks = new Bookmark[] {bookmark1, bookmark2};
156+
var config = builder().withBookmarks(bookmarks).build();
157+
assertEquals(List.of(bookmark1, bookmark2), config.bookmarks());
158+
159+
bookmarks[0] = parse("three");
160+
161+
assertEquals(List.of(bookmark1, bookmark2), config.bookmarks());
162+
}
163+
164+
@Test
165+
void shouldSaveBookmarksCopyFromIterable() {
166+
var bookmark1 = parse("one");
167+
var bookmark2 = parse("two");
168+
var bookmarks = new ArrayList<>(List.of(bookmark1, bookmark2));
169+
var config = builder().withBookmarks(bookmarks).build();
170+
assertEquals(List.of(bookmark1, bookmark2), config.bookmarks());
171+
172+
bookmarks.add(parse("three"));
173+
174+
assertEquals(List.of(bookmark1, bookmark2), config.bookmarks());
175+
}
176+
151177
@ParameterizedTest
152178
@ValueSource(longs = {100, 1, 1000, Long.MAX_VALUE, -1})
153179
void shouldChangeFetchSize(long value) {

0 commit comments

Comments
 (0)