Skip to content

Commit df89d6c

Browse files
committed
Make a copy of bookmarks in SessionConfig builder (neo4j#1465)
1 parent 753629f commit df89d6c

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
@@ -25,6 +25,7 @@
2525
import java.util.Arrays;
2626
import java.util.Objects;
2727
import java.util.Optional;
28+
import java.util.stream.StreamSupport;
2829
import org.neo4j.driver.async.AsyncSession;
2930
import org.neo4j.driver.reactive.RxSession;
3031
import org.reactivestreams.Subscription;
@@ -184,7 +185,7 @@ public Builder withBookmarks(Bookmark... bookmarks) {
184185
if (bookmarks == null) {
185186
this.bookmarks = null;
186187
} else {
187-
this.bookmarks = Arrays.asList(bookmarks);
188+
this.bookmarks = Arrays.stream(bookmarks).toList();
188189
}
189190
return this;
190191
}
@@ -201,7 +202,10 @@ public Builder withBookmarks(Bookmark... bookmarks) {
201202
* @return this builder
202203
*/
203204
public Builder withBookmarks(Iterable<Bookmark> bookmarks) {
204-
this.bookmarks = bookmarks;
205+
if (bookmarks != null) {
206+
this.bookmarks =
207+
StreamSupport.stream(bookmarks.spliterator(), false).toList();
208+
}
205209
return this;
206210
}
207211

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

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

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

0 commit comments

Comments
 (0)