Skip to content

Commit 3a84896

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

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.util.Arrays;
2626
import java.util.Objects;
2727
import java.util.Optional;
28+
import java.util.stream.Collectors;
29+
import java.util.stream.StreamSupport;
2830
import org.neo4j.driver.async.AsyncSession;
2931
import org.neo4j.driver.reactive.RxSession;
3032
import org.reactivestreams.Subscription;
@@ -184,7 +186,7 @@ public Builder withBookmarks(Bookmark... bookmarks) {
184186
if (bookmarks == null) {
185187
this.bookmarks = null;
186188
} else {
187-
this.bookmarks = Arrays.asList(bookmarks);
189+
this.bookmarks = Arrays.stream(bookmarks).collect(Collectors.toList());
188190
}
189191
return this;
190192
}
@@ -201,7 +203,10 @@ public Builder withBookmarks(Bookmark... bookmarks) {
201203
* @return this builder
202204
*/
203205
public Builder withBookmarks(Iterable<Bookmark> bookmarks) {
204-
this.bookmarks = bookmarks;
206+
if (bookmarks != null) {
207+
this.bookmarks =
208+
StreamSupport.stream(bookmarks.spliterator(), false).collect(Collectors.toList());
209+
}
205210
return this;
206211
}
207212

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+
Bookmark bookmark1 = parse("one");
156+
Bookmark bookmark2 = parse("two");
157+
Bookmark[] bookmarks = new Bookmark[] {bookmark1, bookmark2};
158+
SessionConfig config = builder().withBookmarks(bookmarks).build();
159+
assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks());
160+
161+
bookmarks[0] = parse("three");
162+
163+
assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks());
164+
}
165+
166+
@Test
167+
void shouldSaveBookmarksCopyFromIterable() {
168+
Bookmark bookmark1 = parse("one");
169+
Bookmark bookmark2 = parse("two");
170+
List<Bookmark> bookmarks = new ArrayList<>(Arrays.asList(bookmark1, bookmark2));
171+
SessionConfig config = builder().withBookmarks(bookmarks).build();
172+
assertEquals(Arrays.asList(bookmark1, bookmark2), config.bookmarks());
173+
174+
bookmarks.add(parse("three"));
175+
176+
assertEquals(Arrays.asList(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)