diff --git a/driver/src/main/java/org/neo4j/driver/Values.java b/driver/src/main/java/org/neo4j/driver/Values.java index 7bf5685f0d..e68454d9a0 100644 --- a/driver/src/main/java/org/neo4j/driver/Values.java +++ b/driver/src/main/java/org/neo4j/driver/Values.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Map; import java.util.function.Function; +import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; import org.neo4j.driver.exceptions.ClientException; @@ -44,7 +45,6 @@ import org.neo4j.driver.internal.InternalIsoDuration; import org.neo4j.driver.internal.InternalPoint2D; import org.neo4j.driver.internal.InternalPoint3D; -import org.neo4j.driver.internal.value.BoltValue; import org.neo4j.driver.internal.value.BooleanValue; import org.neo4j.driver.internal.value.BytesValue; import org.neo4j.driver.internal.value.DateTimeValue; @@ -110,9 +110,6 @@ public static Value value(Object value) { return NullValue.NULL; } - if (value instanceof BoltValue boltValue) { - return boltValue.asDriverValue(); - } if (value instanceof AsValue) { return ((AsValue) value).asValue(); } @@ -252,10 +249,7 @@ public static Value[] values(final Object... input) { * @return the value */ public static Value value(Value... input) { - var size = input.length; - var values = new Value[size]; - System.arraycopy(input, 0, values, 0, size); - return new ListValue(values); + return new ListValue(List.of(input)); } /** @@ -273,7 +267,9 @@ public static Value value(byte... input) { * @return the value */ public static Value value(String... input) { - var values = Arrays.stream(input).map(StringValue::new).toArray(StringValue[]::new); + var values = Arrays.stream(input) + .map(StringValue::new) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } @@ -283,8 +279,9 @@ public static Value value(String... input) { * @return the value */ public static Value value(boolean... input) { - var values = - IntStream.range(0, input.length).mapToObj(i -> value(input[i])).toArray(Value[]::new); + var values = IntStream.range(0, input.length) + .mapToObj(i -> value(input[i])) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } @@ -294,8 +291,9 @@ public static Value value(boolean... input) { * @return the value */ public static Value value(char... input) { - var values = - IntStream.range(0, input.length).mapToObj(i -> value(input[i])).toArray(Value[]::new); + var values = IntStream.range(0, input.length) + .mapToObj(i -> value(input[i])) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } @@ -305,7 +303,9 @@ public static Value value(char... input) { * @return the value */ public static Value value(long... input) { - var values = Arrays.stream(input).mapToObj(Values::value).toArray(Value[]::new); + var values = Arrays.stream(input) + .mapToObj(Values::value) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } @@ -315,8 +315,9 @@ public static Value value(long... input) { * @return the value */ public static Value value(short... input) { - var values = - IntStream.range(0, input.length).mapToObj(i -> value(input[i])).toArray(Value[]::new); + var values = IntStream.range(0, input.length) + .mapToObj(i -> value(input[i])) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } /** @@ -325,7 +326,9 @@ public static Value value(short... input) { * @return the value */ public static Value value(int... input) { - var values = Arrays.stream(input).mapToObj(Values::value).toArray(Value[]::new); + var values = Arrays.stream(input) + .mapToObj(Values::value) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } /** @@ -334,7 +337,9 @@ public static Value value(int... input) { * @return the value */ public static Value value(double... input) { - var values = Arrays.stream(input).mapToObj(Values::value).toArray(Value[]::new); + var values = Arrays.stream(input) + .mapToObj(Values::value) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } @@ -344,8 +349,9 @@ public static Value value(double... input) { * @return the value */ public static Value value(float... input) { - var values = - IntStream.range(0, input.length).mapToObj(i -> value(input[i])).toArray(Value[]::new); + var values = IntStream.range(0, input.length) + .mapToObj(i -> value(input[i])) + .collect(Collectors.toCollection(() -> new ArrayList<>(input.length))); return new ListValue(values); } @@ -355,11 +361,8 @@ public static Value value(float... input) { * @return the value */ public static Value value(List vals) { - var values = new Value[vals.size()]; - var i = 0; - for (var val : vals) { - values[i++] = value(val); - } + var values = + vals.stream().map(Values::value).collect(Collectors.toCollection(() -> new ArrayList<>(vals.size()))); return new ListValue(values); } @@ -382,7 +385,7 @@ public static Value value(Iterator val) { while (val.hasNext()) { values.add(value(val.next())); } - return new ListValue(values.toArray(new Value[0])); + return new ListValue(values); } /** @@ -391,7 +394,7 @@ public static Value value(Iterator val) { * @return the value */ public static Value value(Stream stream) { - var values = stream.map(Values::value).toArray(Value[]::new); + var values = stream.map(Values::value).collect(Collectors.toList()); return new ListValue(values); } diff --git a/driver/src/main/java/org/neo4j/driver/internal/InternalRecord.java b/driver/src/main/java/org/neo4j/driver/internal/InternalRecord.java index 954c09fb06..afb7961620 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/InternalRecord.java +++ b/driver/src/main/java/org/neo4j/driver/internal/InternalRecord.java @@ -21,7 +21,6 @@ import static org.neo4j.driver.Values.ofValue; import static org.neo4j.driver.internal.util.Format.formatPairs; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -39,15 +38,15 @@ public class InternalRecord extends InternalMapAccessorWithDefaultValue implements Record { private final QueryKeys queryKeys; - private final Value[] values; + private final List values; private int hashCode = 0; - public InternalRecord(List keys, Value[] values) { + public InternalRecord(List keys, List values) { this.queryKeys = new QueryKeys(keys); this.values = values; } - public InternalRecord(QueryKeys queryKeys, Value[] values) { + public InternalRecord(QueryKeys queryKeys, List values) { this.queryKeys = queryKeys; this.values = values; } @@ -59,7 +58,7 @@ public List keys() { @Override public List values() { - return Arrays.asList(values); + return values; } @Override @@ -94,18 +93,18 @@ public Value get(String key) { if (fieldIndex == -1) { return Values.NULL; } else { - return values[fieldIndex]; + return values.get(fieldIndex); } } @Override public Value get(int index) { - return index >= 0 && index < values.length ? values[index] : Values.NULL; + return index >= 0 && index < values.size() ? values.get(index) : Values.NULL; } @Override public int size() { - return values.length; + return values.size(); } @Override @@ -161,7 +160,7 @@ public boolean equals(Object other) { @Override public int hashCode() { if (hashCode == 0) { - hashCode = 31 * queryKeys.hashCode() + Arrays.hashCode(values); + hashCode = 31 * queryKeys.hashCode() + values.hashCode(); } return hashCode; } diff --git a/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/AdaptingDriverResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/AdaptingDriverResponseHandler.java index a503069597..91e1369c37 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/AdaptingDriverResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/AdaptingDriverResponseHandler.java @@ -16,7 +16,7 @@ */ package org.neo4j.driver.internal.adaptedbolt; -import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.Objects; import org.neo4j.bolt.connection.ResponseHandler; @@ -32,7 +32,6 @@ import org.neo4j.bolt.connection.summary.RunSummary; import org.neo4j.bolt.connection.summary.TelemetrySummary; import org.neo4j.driver.Value; -import org.neo4j.driver.internal.value.BoltValue; import org.neo4j.driver.internal.value.BoltValueFactory; final class AdaptingDriverResponseHandler implements ResponseHandler { @@ -63,11 +62,8 @@ public void onRunSummary(RunSummary summary) { } @Override - public void onRecord(org.neo4j.bolt.connection.values.Value[] fields) { - var mappedFields = Arrays.stream(fields) - .map(field -> ((BoltValue) field).asDriverValue()) - .toArray(Value[]::new); - delegate.onRecord(mappedFields); + public void onRecord(List fields) { + delegate.onRecord(boltValueFactory.toDriverList(fields)); } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/BasicResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/BasicResponseHandler.java index 3736ca539b..bb88bb9029 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/BasicResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/BasicResponseHandler.java @@ -37,7 +37,7 @@ public class BasicResponseHandler implements DriverResponseHandler { private final CompletableFuture summariesFuture = new CompletableFuture<>(); - private final List valuesList = new ArrayList<>(); + private final List> valuesList = new ArrayList<>(); private BeginSummary beginSummary; private RunSummary runSummary; @@ -83,7 +83,7 @@ public void onRunSummary(RunSummary summary) { } @Override - public void onRecord(Value[] fields) { + public void onRecord(List fields) { valuesList.add(fields); } @@ -162,7 +162,7 @@ public void onComplete() { public record Summaries( BeginSummary beginSummary, RunSummary runSummary, - List valuesList, + List> valuesList, PullSummary pullSummary, DiscardSummary discardSummary, CommitSummary commitSummary, diff --git a/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/DriverResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/DriverResponseHandler.java index b575b62d74..2973413351 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/DriverResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/adaptedbolt/DriverResponseHandler.java @@ -16,6 +16,7 @@ */ package org.neo4j.driver.internal.adaptedbolt; +import java.util.List; import org.neo4j.bolt.connection.summary.BeginSummary; import org.neo4j.bolt.connection.summary.CommitSummary; import org.neo4j.bolt.connection.summary.LogoffSummary; @@ -41,7 +42,7 @@ default void onRunSummary(RunSummary summary) { // ignored } - default void onRecord(Value[] fields) { + default void onRecord(List fields) { // ignored } diff --git a/driver/src/main/java/org/neo4j/driver/internal/async/DelegatingResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/async/DelegatingResponseHandler.java index 15ea6ee4e0..70056dfd3d 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/async/DelegatingResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/async/DelegatingResponseHandler.java @@ -16,6 +16,7 @@ */ package org.neo4j.driver.internal.async; +import java.util.List; import java.util.Objects; import org.neo4j.bolt.connection.summary.BeginSummary; import org.neo4j.bolt.connection.summary.CommitSummary; @@ -54,7 +55,7 @@ public void onRunSummary(RunSummary summary) { } @Override - public void onRecord(Value[] fields) { + public void onRecord(List fields) { delegate.onRecord(fields); } diff --git a/driver/src/main/java/org/neo4j/driver/internal/cursor/ResultCursorImpl.java b/driver/src/main/java/org/neo4j/driver/internal/cursor/ResultCursorImpl.java index bf34aa3c19..b948b07894 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/cursor/ResultCursorImpl.java +++ b/driver/src/main/java/org/neo4j/driver/internal/cursor/ResultCursorImpl.java @@ -591,7 +591,7 @@ public void onRunSummary(RunSummary summary) { } @Override - public void onRecord(Value[] fields) { + public void onRecord(List fields) { var record = new InternalRecord(runSummary.keys(), fields); CompletableFuture peekFuture; CompletableFuture recordFuture = null; diff --git a/driver/src/main/java/org/neo4j/driver/internal/cursor/RxResultCursorImpl.java b/driver/src/main/java/org/neo4j/driver/internal/cursor/RxResultCursorImpl.java index 9ff8138672..fe4824e0f2 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/cursor/RxResultCursorImpl.java +++ b/driver/src/main/java/org/neo4j/driver/internal/cursor/RxResultCursorImpl.java @@ -331,7 +331,7 @@ public synchronized void onIgnored() { } @Override - public void onRecord(Value[] fields) { + public void onRecord(List fields) { log.trace("[%d] onRecord", hashCode()); synchronized (this) { updateRecordState(RecordState.HAD_RECORD); diff --git a/driver/src/main/java/org/neo4j/driver/internal/util/Extract.java b/driver/src/main/java/org/neo4j/driver/internal/util/Extract.java index ed38d9bff9..6fb125bc05 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/util/Extract.java +++ b/driver/src/main/java/org/neo4j/driver/internal/util/Extract.java @@ -26,7 +26,6 @@ import static org.neo4j.driver.internal.util.Iterables.newHashMapWithSize; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -52,25 +51,17 @@ private Extract() { throw new UnsupportedOperationException(); } - public static List list(Value[] values) { - return switch (values.length) { - case 0 -> emptyList(); - case 1 -> singletonList(values[0]); - default -> List.of(values); - }; - } - - public static List list(Value[] data, Function mapFunction) { - var size = data.length; + public static List list(List data, Function mapFunction) { + var size = data.size(); switch (size) { case 0 -> { return emptyList(); } case 1 -> { - return singletonList(mapFunction.apply(data[0])); + return singletonList(mapFunction.apply(data.get(0))); } default -> { - return Arrays.stream(data).map(mapFunction).toList(); + return data.stream().map(mapFunction).toList(); } } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/BoltValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/BoltValue.java deleted file mode 100644 index e1b813bc8f..0000000000 --- a/driver/src/main/java/org/neo4j/driver/internal/value/BoltValue.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [https://neo4j.com] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.neo4j.driver.internal.value; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.OffsetTime; -import java.time.ZonedDateTime; -import java.util.Iterator; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; -import org.neo4j.bolt.connection.values.IsoDuration; -import org.neo4j.bolt.connection.values.Point; -import org.neo4j.bolt.connection.values.Type; -import org.neo4j.bolt.connection.values.Value; -import org.neo4j.driver.exceptions.value.Uncoercible; -import org.neo4j.driver.internal.InternalIsoDuration; -import org.neo4j.driver.internal.InternalPoint2D; -import org.neo4j.driver.internal.InternalPoint3D; - -public class BoltValue implements org.neo4j.bolt.connection.values.Value { - private final InternalValue value; - private final Type type; - - public BoltValue(InternalValue value, Type type) { - this.value = Objects.requireNonNull(value); - this.type = Objects.requireNonNull(type); - } - - public org.neo4j.driver.Value asDriverValue() { - return value; - } - - @Override - public Type type() { - return type; - } - - @Override - public boolean asBoolean() { - return value.asBoolean(); - } - - @Override - public byte[] asByteArray() { - return value.asByteArray(); - } - - @Override - public String asString() { - return value.asString(); - } - - @Override - public long asLong() { - return value.asLong(); - } - - @Override - public double asDouble() { - return value.asDouble(); - } - - @Override - public LocalDate asLocalDate() { - return value.asLocalDate(); - } - - @Override - public OffsetTime asOffsetTime() { - return value.asOffsetTime(); - } - - @Override - public LocalTime asLocalTime() { - return value.asLocalTime(); - } - - @Override - public LocalDateTime asLocalDateTime() { - return value.asLocalDateTime(); - } - - @Override - public ZonedDateTime asZonedDateTime() { - return value.asZonedDateTime(); - } - - @Override - public IsoDuration asIsoDuration() { - return (InternalIsoDuration) value.asIsoDuration(); - } - - @Override - public Point asPoint() { - var point = value.asPoint(); - if (point instanceof InternalPoint2D internalPoint2D) { - return internalPoint2D; - } else if (point instanceof InternalPoint3D internalPoint3D) { - return internalPoint3D; - } - throw new Uncoercible(value.type().name(), "Bolt IsoDuration"); - } - - @Override - public boolean isNull() { - return value.isNull(); - } - - @Override - public boolean isEmpty() { - return value.isEmpty(); - } - - @Override - public Iterable keys() { - return value.keys(); - } - - @Override - public int size() { - return value.size(); - } - - @Override - public org.neo4j.bolt.connection.values.Value get(String key) { - return ((InternalValue) value.get(key)).asBoltValue(); - } - - @Override - public Iterable values() { - return () -> new Iterator<>() { - private final Iterator iterator = - value.values().iterator(); - - @Override - public boolean hasNext() { - return iterator.hasNext(); - } - - @Override - public Value next() { - return ((InternalValue) iterator.next()).asBoltValue(); - } - }; - } - - @Override - public boolean containsKey(String key) { - return value.containsKey(key); - } - - @Override - public Map asMap(Function mapFunction) { - return value.asMap(v -> mapFunction.apply(((InternalValue) v).asBoltValue())); - } - - @Override - public boolean equals(Object o) { - if (o == null || getClass() != o.getClass()) return false; - var boltValue = (BoltValue) o; - return Objects.equals(value, boltValue.value) && type == boltValue.type; - } - - @Override - public int hashCode() { - return Objects.hash(value, type); - } - - @Override - public String toString() { - return value.toString(); - } -} diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/BoltValueFactory.java b/driver/src/main/java/org/neo4j/driver/internal/value/BoltValueFactory.java index c324cf4513..e9618f7274 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/BoltValueFactory.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/BoltValueFactory.java @@ -27,7 +27,6 @@ import java.time.ZonedDateTime; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import org.neo4j.bolt.connection.values.Node; @@ -52,22 +51,22 @@ private BoltValueFactory() {} @Override public Value value(Object value) { - return ((InternalValue) Values.value(value)).asBoltValue(); + return ((InternalValue) Values.value(value)); } @Override public Value value(boolean value) { - return ((InternalValue) Values.value(value)).asBoltValue(); + return ((InternalValue) Values.value(value)); } @Override public Value value(long value) { - return ((InternalValue) Values.value(value)).asBoltValue(); + return ((InternalValue) Values.value(value)); } @Override public Value value(double value) { - return ((InternalValue) Values.value(value)).asBoltValue(); + return ((InternalValue) Values.value(value)); } @Override @@ -75,7 +74,7 @@ public Value value(byte[] values) { if (values == null) { return value((Object) null); } - return ((InternalValue) Values.value(values)).asBoltValue(); + return ((InternalValue) Values.value(values)); } @Override @@ -83,23 +82,25 @@ public Value value(String value) { if (value == null) { return value((Object) null); } - return ((InternalValue) Values.value(value)).asBoltValue(); + return ((InternalValue) Values.value(value)); } + @SuppressWarnings("unchecked") @Override public Value value(Map stringToValue) { if (stringToValue == null) { return value((Object) null); } - return ((InternalValue) Values.value(stringToValue)).asBoltValue(); + return new MapValue((Map) (Map) stringToValue); } + @SuppressWarnings("unchecked") @Override - public Value value(Value[] values) { + public Value value(List values) { if (values == null) { return value((Object) null); } - return ((InternalValue) Values.value(values)).asBoltValue(); + return new ListValue((List) (List) values); } @Override @@ -107,7 +108,7 @@ public Value value(Node node) { if (node == null) { return value((Object) null); } - return ((InternalValue) Values.value(node)).asBoltValue(); + return (InternalValue) ((InternalNode) node).asValue(); } @Override @@ -115,7 +116,7 @@ public Value value(Relationship relationship) { if (relationship == null) { return value((Object) null); } - return ((InternalValue) Values.value(relationship)).asBoltValue(); + return (InternalValue) ((InternalRelationship) relationship).asValue(); } @Override @@ -123,7 +124,7 @@ public Value value(Path path) { if (path == null) { return value((Object) null); } - return ((InternalValue) Values.value(path)).asBoltValue(); + return (InternalValue) ((InternalPath) path).asValue(); } @Override @@ -131,7 +132,7 @@ public Value value(LocalDate localDate) { if (localDate == null) { return value((Object) null); } - return ((InternalValue) Values.value(localDate)).asBoltValue(); + return ((InternalValue) Values.value(localDate)); } @Override @@ -139,7 +140,7 @@ public Value value(OffsetTime offsetTime) { if (offsetTime == null) { return value((Object) null); } - return ((InternalValue) Values.value(offsetTime)).asBoltValue(); + return ((InternalValue) Values.value(offsetTime)); } @Override @@ -147,7 +148,7 @@ public Value value(LocalTime localTime) { if (localTime == null) { return value((Object) null); } - return ((InternalValue) Values.value(localTime)).asBoltValue(); + return ((InternalValue) Values.value(localTime)); } @Override @@ -155,7 +156,7 @@ public Value value(LocalDateTime localDateTime) { if (localDateTime == null) { return value((Object) null); } - return ((InternalValue) Values.value(localDateTime)).asBoltValue(); + return ((InternalValue) Values.value(localDateTime)); } @Override @@ -163,7 +164,7 @@ public Value value(OffsetDateTime offsetDateTime) { if (offsetDateTime == null) { return value((Object) null); } - return ((InternalValue) Values.value(offsetDateTime)).asBoltValue(); + return ((InternalValue) Values.value(offsetDateTime)); } @Override @@ -171,7 +172,7 @@ public Value value(ZonedDateTime zonedDateTime) { if (zonedDateTime == null) { return value((Object) null); } - return ((InternalValue) Values.value(zonedDateTime)).asBoltValue(); + return ((InternalValue) Values.value(zonedDateTime)); } @Override @@ -179,7 +180,7 @@ public Value value(Period period) { if (period == null) { return value((Object) null); } - return ((InternalValue) Values.value(period)).asBoltValue(); + return ((InternalValue) Values.value(period)); } @Override @@ -187,7 +188,7 @@ public Value value(Duration duration) { if (duration == null) { return value((Object) null); } - return ((InternalValue) Values.value(duration)).asBoltValue(); + return ((InternalValue) Values.value(duration)); } @Override @@ -230,39 +231,36 @@ public Path path(List segments, List nodes, List re @Override public Value isoDuration(long months, long days, long seconds, int nanoseconds) { - return ((InternalValue) Values.isoDuration(months, days, seconds, nanoseconds)).asBoltValue(); + return ((InternalValue) Values.isoDuration(months, days, seconds, nanoseconds)); } @Override public Value point(int srid, double x, double y) { - return ((InternalValue) Values.point(srid, x, y)).asBoltValue(); + return ((InternalValue) Values.point(srid, x, y)); } @Override public Value point(int srid, double x, double y, double z) { - return ((InternalValue) Values.point(srid, x, y, z)).asBoltValue(); + return ((InternalValue) Values.point(srid, x, y, z)); } @Override public Value unsupportedDateTimeValue(DateTimeException e) { - return new UnsupportedDateTimeValue(e).asBoltValue(); + return new UnsupportedDateTimeValue(e); } + @SuppressWarnings("unchecked") public Map toBoltMap(Map map) { - var result = new HashMap(map.size()); - for (var entry : map.entrySet()) { - var boltValue = ((InternalValue) entry.getValue()).asBoltValue(); - result.put(entry.getKey(), boltValue); - } - return Collections.unmodifiableMap(result); + return Collections.unmodifiableMap((Map) (Map) map); } + @SuppressWarnings("unchecked") public Map toDriverMap(Map map) { - var result = new HashMap(map.size()); - for (var entry : map.entrySet()) { - var boltValue = ((BoltValue) entry.getValue()).asDriverValue(); - result.put(entry.getKey(), boltValue); - } - return Collections.unmodifiableMap(result); + return Collections.unmodifiableMap((Map) (Map) map); + } + + @SuppressWarnings("unchecked") + public List toDriverList(List list) { + return (List) (List) list; } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/BooleanValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/BooleanValue.java index 2671c66df5..3619165e35 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/BooleanValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/BooleanValue.java @@ -40,6 +40,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.BOOLEAN(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.BOOLEAN; + } + @Override public int hashCode() { var value = asBoolean() ? Boolean.TRUE : Boolean.FALSE; @@ -84,11 +89,6 @@ public boolean equals(Object obj) { public String toString() { return "TRUE"; } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.BOOLEAN); - } } private static class FalseValue extends BooleanValue { @@ -128,10 +128,5 @@ public boolean equals(Object obj) { public String toString() { return "FALSE"; } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.BOOLEAN); - } } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/BytesValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/BytesValue.java index c8ad70a580..5e79060238 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/BytesValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/BytesValue.java @@ -64,6 +64,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.BYTES(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.BYTES; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -93,9 +98,4 @@ public String toString() { } return s.toString(); } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.BYTES); - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/DateTimeValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/DateTimeValue.java index e2c0ca0164..7ddbeacca7 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/DateTimeValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/DateTimeValue.java @@ -43,8 +43,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.DATE_TIME); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.DATE_TIME; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/DateValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/DateValue.java index 07ab3415e9..7e67dabb5a 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/DateValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/DateValue.java @@ -37,8 +37,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.DATE); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.DATE; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/DurationValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/DurationValue.java index cf37b54d13..a8bf16c564 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/DurationValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/DurationValue.java @@ -36,8 +36,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.DURATION); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.DURATION; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/FloatValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/FloatValue.java index df6771ed5e..be2b8ea7ae 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/FloatValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/FloatValue.java @@ -33,6 +33,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.FLOAT(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.FLOAT; + } + @Override public Double asNumber() { return val; @@ -119,9 +124,4 @@ public int hashCode() { public String toString() { return Double.toString(val); } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.FLOAT); - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/IntegerValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/IntegerValue.java index 3588b7ffea..3616580db2 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/IntegerValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/IntegerValue.java @@ -33,6 +33,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.INTEGER(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.INTEGER; + } + @Override public Long asNumber() { return val; @@ -122,9 +127,4 @@ public boolean equals(Object o) { public int hashCode() { return (int) (val ^ (val >>> 32)); } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.INTEGER); - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/InternalValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/InternalValue.java index f41927dc24..6a5712b0bd 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/InternalValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/InternalValue.java @@ -18,16 +18,18 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.Iterator; +import java.util.Map; +import org.neo4j.bolt.connection.values.IsoDuration; +import org.neo4j.bolt.connection.values.Point; import org.neo4j.driver.Value; import org.neo4j.driver.exceptions.value.Uncoercible; import org.neo4j.driver.internal.AsValue; import org.neo4j.driver.internal.types.TypeConstructor; -public interface InternalValue extends Value, AsValue { +public interface InternalValue extends Value, AsValue, org.neo4j.bolt.connection.values.Value { TypeConstructor typeConstructor(); - BoltValue asBoltValue(); - default Object as(Type type) { if (type instanceof ParameterizedType parameterizedType) { return as(parameterizedType); @@ -41,4 +43,44 @@ default Object as(Type type) { default Object as(ParameterizedType type) { throw new Uncoercible(type().name(), type.toString()); } + + @Override + default org.neo4j.bolt.connection.values.Value getBoltValue(String key) { + return (org.neo4j.bolt.connection.values.Value) get(key); + } + + @Override + default IsoDuration asBoltIsoDuration() { + return (IsoDuration) asIsoDuration(); + } + + @Override + default Point asBoltPoint() { + return (Point) asPoint(); + } + + @Override + default Iterable boltValues() { + var values = values(); + return () -> { + var iterator = values.iterator(); + return new Iterator<>() { + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public org.neo4j.bolt.connection.values.Value next() { + var next = iterator.next(); + return next != null ? (org.neo4j.bolt.connection.values.Value) next : null; + } + }; + }; + } + + @Override + default Map asBoltMap() { + return asMap(value -> (org.neo4j.bolt.connection.values.Value) value); + } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/ListValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/ListValue.java index 9809ac71ac..347115ea9e 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/ListValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/ListValue.java @@ -20,7 +20,6 @@ import java.lang.reflect.Array; import java.lang.reflect.ParameterizedType; -import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.function.Function; @@ -33,9 +32,9 @@ import org.neo4j.driver.types.Type; public class ListValue extends ValueAdapter { - private final Value[] values; + private final List values; - public ListValue(Value... values) { + public ListValue(List values) { if (values == null) { throw new IllegalArgumentException("Cannot construct ListValue from null"); } @@ -44,7 +43,7 @@ public ListValue(Value... values) { @Override public boolean isEmpty() { - return values.length == 0; + return values.isEmpty(); } @Override @@ -68,11 +67,11 @@ public T as(Class targetClass) { return targetClass.cast(asList()); } else if (targetClass.isArray()) { var componentType = targetClass.componentType(); - var array = Array.newInstance(componentType, values.length); - for (var i = 0; i < values.length; i++) { + var array = Array.newInstance(componentType, values.size()); + for (var i = 0; i < values.size(); i++) { Object value; try { - value = values[i].as(componentType); + value = values.get(i).as(componentType); } catch (Throwable throwable) { throw new ValueException( "Failed to map LIST value to %s - an error occured while mapping the element at index %d" @@ -103,31 +102,27 @@ public Object as(ParameterizedType type) { @Override public int size() { - return values.length; + return values.size(); } @Override public Value get(int index) { - return index >= 0 && index < values.length ? values[index] : Values.NULL; + return index >= 0 && index < values.size() ? values.get(index) : Values.NULL; } @Override public Iterable values(final Function mapFunction) { + var iterator = values.iterator(); return () -> new Iterator<>() { - private int cursor = 0; - @Override public boolean hasNext() { - return cursor < values.length; + return iterator.hasNext(); } @Override public T next() { - return mapFunction.apply(values[cursor++]); + return mapFunction.apply(iterator.next()); } - - @Override - public void remove() {} }; } @@ -136,9 +131,20 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.LIST(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.LIST; + } + + @SuppressWarnings("unchecked") + @Override + public Iterable boltValues() { + return (Iterable) (Iterable) values; + } + @Override public String toString() { - return Arrays.toString(values); + return values.toString(); } @Override @@ -151,16 +157,11 @@ public boolean equals(Object o) { } var otherValues = (ListValue) o; - return Arrays.equals(values, otherValues.values); + return values.equals(otherValues.values); } @Override public int hashCode() { - return Arrays.hashCode(values); - } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.LIST); + return values.hashCode(); } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/LocalDateTimeValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/LocalDateTimeValue.java index 90d670a316..8c527ecead 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/LocalDateTimeValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/LocalDateTimeValue.java @@ -37,8 +37,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.LOCAL_DATE_TIME); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.LOCAL_DATE_TIME; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/LocalTimeValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/LocalTimeValue.java index 1b275a24c8..de279e40c2 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/LocalTimeValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/LocalTimeValue.java @@ -37,8 +37,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.LOCAL_TIME); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.LOCAL_TIME; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/MapValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/MapValue.java index c58e77c257..42ab5a3a76 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/MapValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/MapValue.java @@ -129,6 +129,17 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.MAP(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.MAP; + } + + @SuppressWarnings("unchecked") + @Override + public Map asBoltMap() { + return (Map) (Map) val; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -146,9 +157,4 @@ public boolean equals(Object o) { public int hashCode() { return val.hashCode(); } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.MAP); - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/NodeValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/NodeValue.java index d859db9ddd..e79e2af833 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/NodeValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/NodeValue.java @@ -36,8 +36,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.NODE); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.NODE; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/NullValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/NullValue.java index 9ad122f4a0..88aab5f4e5 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/NullValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/NullValue.java @@ -56,6 +56,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.NULL(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.NULL; + } + @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") @Override public boolean equals(Object obj) { @@ -71,9 +76,4 @@ public int hashCode() { public String toString() { return "NULL"; } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.NULL); - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/PathValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/PathValue.java index 36d0f84996..45aaa0bfd9 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/PathValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/PathValue.java @@ -41,8 +41,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.PATH); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.PATH; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/PointValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/PointValue.java index feb8ac3e69..ac32787caa 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/PointValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/PointValue.java @@ -37,8 +37,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.POINT); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.POINT; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/RelationshipValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/RelationshipValue.java index 84dead0f11..ce0a46f3d1 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/RelationshipValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/RelationshipValue.java @@ -36,8 +36,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.RELATIONSHIP); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.RELATIONSHIP; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/StringValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/StringValue.java index 49a17810d0..59e94a2b3b 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/StringValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/StringValue.java @@ -77,6 +77,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.STRING(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.STRING; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -93,9 +98,4 @@ public boolean equals(Object o) { public int hashCode() { return val.hashCode(); } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.STRING); - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/TimeValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/TimeValue.java index 0cbe2cb944..65632b45e7 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/TimeValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/TimeValue.java @@ -37,8 +37,8 @@ public Type type() { } @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.TIME); + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.TIME; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/value/UnsupportedDateTimeValue.java b/driver/src/main/java/org/neo4j/driver/internal/value/UnsupportedDateTimeValue.java index d04068b325..2ef6d3763d 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/value/UnsupportedDateTimeValue.java +++ b/driver/src/main/java/org/neo4j/driver/internal/value/UnsupportedDateTimeValue.java @@ -56,6 +56,11 @@ public Type type() { return InternalTypeSystem.TYPE_SYSTEM.DATE_TIME(); } + @Override + public org.neo4j.bolt.connection.values.Type boltValueType() { + return org.neo4j.bolt.connection.values.Type.DATE_TIME; + } + @Override public boolean equals(Object obj) { return this == obj; @@ -86,9 +91,4 @@ private DateTimeException instantiateDateTimeException() { } return newException; } - - @Override - public BoltValue asBoltValue() { - return new BoltValue(this, org.neo4j.bolt.connection.values.Type.DATE_TIME); - } } diff --git a/driver/src/test/java/org/neo4j/driver/AuthTokensTest.java b/driver/src/test/java/org/neo4j/driver/AuthTokensTest.java index 497af61fe0..8eca08f1d3 100644 --- a/driver/src/test/java/org/neo4j/driver/AuthTokensTest.java +++ b/driver/src/test/java/org/neo4j/driver/AuthTokensTest.java @@ -16,17 +16,17 @@ */ package org.neo4j.driver; -import static java.util.Arrays.asList; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.neo4j.driver.AuthTokens.basic; import static org.neo4j.driver.AuthTokens.custom; -import static org.neo4j.driver.Values.values; +import static org.testng.internal.collections.Ints.asList; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; import org.junit.jupiter.api.Test; import org.neo4j.driver.internal.security.InternalAuthToken; import org.neo4j.driver.internal.value.ListValue; @@ -79,7 +79,7 @@ void customAuthParameters() { var basic = (InternalAuthToken) custom("foo", "bar", "baz", "my_scheme", parameters); Map expectedParameters = new HashMap<>(); - expectedParameters.put("list", new ListValue(values(1, 2, 3))); + expectedParameters.put("list", new ListValue(Values.value(1, 2, 3).asList(Function.identity()))); var map = basic.toMap(); assertThat(map.size(), equalTo(5)); diff --git a/driver/src/test/java/org/neo4j/driver/ObjectMappingTests.java b/driver/src/test/java/org/neo4j/driver/ObjectMappingTests.java index 3c8c025510..ea106fa1d4 100644 --- a/driver/src/test/java/org/neo4j/driver/ObjectMappingTests.java +++ b/driver/src/test/java/org/neo4j/driver/ObjectMappingTests.java @@ -131,12 +131,10 @@ static Stream shouldMapValueArgs() { "map", properties -> Values.value(properties).as(ValueHolder.class))), Arguments.of(Named., ValueHolder>>of("record", properties -> { var keys = new ArrayList(); - var values = new Value[properties.size()]; - var i = 0; + var values = new ArrayList(); for (var entry : properties.entrySet()) { keys.add(entry.getKey()); - values[i] = entry.getValue(); - i++; + values.add(entry.getValue()); } return new InternalRecord(keys, values).as(ValueHolder.class); }))); diff --git a/driver/src/test/java/org/neo4j/driver/ParametersTest.java b/driver/src/test/java/org/neo4j/driver/ParametersTest.java index e0109ee852..ef59a81e52 100644 --- a/driver/src/test/java/org/neo4j/driver/ParametersTest.java +++ b/driver/src/test/java/org/neo4j/driver/ParametersTest.java @@ -32,6 +32,7 @@ import static org.neo4j.driver.internal.util.ValueFactory.filledPathValue; import java.util.Collections; +import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -91,7 +92,7 @@ void shouldNotBePossibleToUseInvalidParametersViaMap(Object obj, String expected @SuppressWarnings("resource") void shouldNotBePossibleToUseInvalidParametersViaRecord(Object obj, String expectedMsg) { assumeTrue(obj instanceof Value); - Record record = new InternalRecord(singletonList("a"), new Value[] {(Value) obj}); + Record record = new InternalRecord(singletonList("a"), List.of((Value) obj)); var session = mockedSession(); var e = assertThrows(ClientException.class, () -> session.run("RETURN {a}", record)); diff --git a/driver/src/test/java/org/neo4j/driver/integration/ScalarTypeIT.java b/driver/src/test/java/org/neo4j/driver/integration/ScalarTypeIT.java index f9364928af..f3217eb960 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/ScalarTypeIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/ScalarTypeIT.java @@ -18,11 +18,12 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.neo4j.driver.Values.parameters; import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -53,9 +54,11 @@ static Stream typesToTest() { Arguments.of("RETURN 'hello' as v", Values.value("hello")), Arguments.of("RETURN true as v", Values.value(true)), Arguments.of("RETURN false as v", Values.value(false)), - Arguments.of("RETURN [1,2,3] as v", new ListValue(Values.value(1), Values.value(2), Values.value(3))), - Arguments.of("RETURN ['hello'] as v", new ListValue(Values.value("hello"))), - Arguments.of("RETURN [] as v", new ListValue()), + Arguments.of( + "RETURN [1,2,3] as v", + new ListValue(List.of(Values.value(1), Values.value(2), Values.value(3)))), + Arguments.of("RETURN ['hello'] as v", new ListValue(List.of(Values.value("hello")))), + Arguments.of("RETURN [] as v", new ListValue(List.of())), Arguments.of("RETURN {k:'hello'} as v", parameters("k", Values.value("hello"))), Arguments.of("RETURN {} as v", new MapValue(Collections.emptyMap()))); } @@ -96,7 +99,7 @@ void shouldEchoVeryLongMap(Value collectionItem) { @MethodSource("collectionItems") void shouldEchoVeryLongList(Value collectionItem) { // Given - var input = IntStream.range(0, 1000).mapToObj(i -> collectionItem).toArray(Value[]::new); + var input = IntStream.range(0, 1000).mapToObj(i -> collectionItem).toList(); var listValue = new ListValue(input); // When & Then @@ -155,14 +158,14 @@ static Stream listToTest() { Arguments.of(Values.value(NullValue.NULL, NullValue.NULL)), Arguments.of(Values.value(Values.values( NullValue.NULL, true, "-17∂ßå®", 1.7976931348623157E+308d, -9223372036854775808d))), - Arguments.of(new ListValue(parameters("a", 1, "b", true, "c", 1.1, "d", "˚C", "e", null)))); + Arguments.of(new ListValue(List.of(parameters("a", 1, "b", true, "c", 1.1, "d", "˚C", "e", null))))); } @ParameterizedTest @MethodSource("listToTest") void shouldEchoList(Value input) { // When & Then - assertTrue(input instanceof ListValue); + assertInstanceOf(ListValue.class, input); verifyCanEncodeAndDecode(input); } @@ -171,7 +174,7 @@ void shouldEchoNestedList() { var input = Values.value(toValueStream(listToTest())); // When & Then - assertTrue(input instanceof ListValue); + assertInstanceOf(ListValue.class, input); verifyCanEncodeAndDecode(input); } @@ -188,7 +191,7 @@ static Stream mapToTest() { @ParameterizedTest @MethodSource("mapToTest") void shouldEchoMap(Value input) { - assertTrue(input instanceof MapValue); + assertInstanceOf(MapValue.class, input); // When & Then verifyCanEncodeAndDecode(input); } @@ -205,7 +208,7 @@ void shouldEchoNestedMap() { private Stream toValueStream(Stream arguments) { return arguments.map(arg -> { var obj = arg.get()[0]; - assertTrue(obj instanceof Value); + assertInstanceOf(Value.class, obj); return (Value) obj; }); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/ExtractTest.java b/driver/src/test/java/org/neo4j/driver/internal/ExtractTest.java index 9a3905c6f3..6c03c284cf 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/ExtractTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/ExtractTest.java @@ -16,7 +16,6 @@ */ package org.neo4j.driver.internal; -import static java.util.Arrays.asList; import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; @@ -24,7 +23,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.empty; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -34,6 +32,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; import org.neo4j.driver.Value; @@ -42,33 +41,9 @@ import org.neo4j.driver.internal.util.Iterables; class ExtractTest { - @Test - void extractEmptyArrayShouldNotBeModifiable() { - var list = Extract.list(new Value[] {}); - - assertThat(list, empty()); - assertThrows(UnsupportedOperationException.class, () -> list.add(null)); - } - - @Test - void extractSingletonShouldNotBeModifiable() { - var list = Extract.list(new Value[] {value(42)}); - - assertThat(list, equalTo(singletonList(value(42)))); - assertThrows(UnsupportedOperationException.class, () -> list.add(null)); - } - - @Test - void extractMultipleShouldNotBeModifiable() { - var list = Extract.list(new Value[] {value(42), value(43)}); - - assertThat(list, equalTo(asList(value(42), value(43)))); - assertThrows(UnsupportedOperationException.class, () -> list.add(null)); - } - @Test void testMapOverList() { - var mapped = Extract.list(new Value[] {value(42), value(43)}, Value::asInt); + var mapped = Extract.list(List.of(value(42), value(43)), Value::asInt); assertThat(mapped, equalTo(Arrays.asList(42, 43))); } @@ -124,7 +99,7 @@ void testProperties() { @Test void testFields() { // GIVEN - var record = new InternalRecord(singletonList("k1"), new Value[] {value(42)}); + var record = new InternalRecord(singletonList("k1"), List.of(value(42))); // WHEN var fields = Extract.fields(record, Value::asInt); diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalMapAccessorWithDefaultValueTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalMapAccessorWithDefaultValueTest.java index c17a871370..855ecb7111 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalMapAccessorWithDefaultValueTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalMapAccessorWithDefaultValueTest.java @@ -71,9 +71,9 @@ var record = createRecord(); // List assertThat( - record.get("ListValue", new ListValue()), - equalTo(new ListValue(new IntegerValue(1), new IntegerValue(2)))); - assertThat(record.get(wrongKey, new ListValue()), equalTo(new ListValue())); + record.get("ListValue", new ListValue(List.of())), + equalTo(new ListValue(List.of(new IntegerValue(1), new IntegerValue(2))))); + assertThat(record.get(wrongKey, new ListValue(List.of())), equalTo(new ListValue(List.of()))); // Map Value defaultMapValue = new MapValue(new HashMap<>()); @@ -304,19 +304,18 @@ private Record createRecord() { "NodeValue", "RelValue", "float"); - var values = new Value[] { - NullValue.NULL, - BooleanValue.TRUE, - new StringValue("hello world"), - new IntegerValue(11), - new FloatValue(2.2), - new ListValue(new IntegerValue(1), new IntegerValue(2)), - new MapValue(map), - new PathValue(path), - new NodeValue(node), - new RelationshipValue(rel), - Values.value(0.1F) - }; + var values = List.of( + NullValue.NULL, + BooleanValue.TRUE, + new StringValue("hello world"), + new IntegerValue(11), + new FloatValue(2.2), + new ListValue(List.of(new IntegerValue(1), new IntegerValue(2))), + new MapValue(map), + new PathValue(path), + new NodeValue(node), + new RelationshipValue(rel), + Values.value(0.1F)); return new InternalRecord(keys, values); } } diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalRecordTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalRecordTest.java index 6ac28ea1c4..d181fddded 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalRecordTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalRecordTest.java @@ -124,7 +124,7 @@ var record = createRecord(); void mapExtractionShouldPreserveIterationOrder() { // GIVEN var keys = Arrays.asList("k2", "k1"); - var record = new InternalRecord(keys, new Value[] {value(0), value(1)}); + var record = new InternalRecord(keys, List.of(value(0), value(1))); Function addOne = value -> value.asInt() + 1; // WHEN @@ -148,7 +148,7 @@ var record = createRecord(); void shouldHaveMethodToGetKeys() { // GIVEN var keys = Arrays.asList("k2", "k1"); - var record = new InternalRecord(keys, new Value[] {value(0), value(1)}); + var record = new InternalRecord(keys, List.of(value(0), value(1))); // WHEN var appendedKeys = record.keys(); @@ -161,7 +161,7 @@ var record = new InternalRecord(keys, new Value[] {value(0), value(1)}); void emptyKeysShouldGiveEmptyList() { // GIVEN List keys = Collections.emptyList(); - var record = new InternalRecord(keys, new Value[] {}); + var record = new InternalRecord(keys, List.of()); // WHEN var appendedKeys = record.keys(); @@ -174,32 +174,32 @@ var record = new InternalRecord(keys, new Value[] {}); void shouldHaveMethodToGetValues() { // GIVEN var keys = Arrays.asList("k2", "k1"); - var values = new Value[] {value(0), value(1)}; + var values = List.of(value(0), value(1)); var record = new InternalRecord(keys, values); // WHEN var appendedValues = record.values(); // THEN - assertThat(appendedValues, equalTo(Arrays.asList(values))); + assertThat(appendedValues, equalTo(values)); } @Test void emptyValuesShouldGiveEmptyList() { // GIVEN List keys = Collections.emptyList(); - var values = new Value[] {}; + var values = List.of(); var record = new InternalRecord(keys, values); // WHEN var appendedValues = record.values(); // THEN - assertThat(appendedValues, equalTo(Arrays.asList(values))); + assertThat(appendedValues, equalTo(values)); } private InternalRecord createRecord() { var keys = Arrays.asList("k1", "k2"); - return new InternalRecord(keys, new Value[] {value(0), value(1)}); + return new InternalRecord(keys, List.of(value(0), value(1))); } } diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalResultTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalResultTest.java index e24911c95a..a81f9ba53c 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalResultTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalResultTest.java @@ -350,7 +350,7 @@ private Result createResult(int numberOfRecords) { given(runSummary.keys()).willReturn(asList("k1", "k2")); resultCursor.onRunSummary(runSummary); for (var i = 1; i <= numberOfRecords; i++) { - resultCursor.onRecord(new Value[] {value("v1-" + i), value("v2-" + i)}); + resultCursor.onRecord(List.of(value("v1-" + i), value("v2-" + i))); } resultCursor.onPullSummary(new PullSummary() { @Override diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalTransactionTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalTransactionTest.java index 589d4c3cdb..16213eda04 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalTransactionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalTransactionTest.java @@ -55,7 +55,6 @@ import org.neo4j.driver.Query; import org.neo4j.driver.Result; import org.neo4j.driver.Transaction; -import org.neo4j.driver.Value; import org.neo4j.driver.internal.adaptedbolt.DriverBoltConnection; import org.neo4j.driver.internal.adaptedbolt.DriverBoltConnectionSource; import org.neo4j.driver.internal.adaptedbolt.DriverResponseHandler; @@ -93,7 +92,7 @@ private static Stream> allSessionRunMethods() { tx -> tx.run("RETURN 1"), tx -> tx.run("RETURN $x", parameters("x", 1)), tx -> tx.run("RETURN $x", singletonMap("x", 1)), - tx -> tx.run("RETURN $x", new InternalRecord(singletonList("x"), new Value[] {new IntegerValue(1)})), + tx -> tx.run("RETURN $x", new InternalRecord(singletonList("x"), List.of(new IntegerValue(1)))), tx -> tx.run(new Query("RETURN $x", parameters("x", 1)))); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/ValuesTest.java b/driver/src/test/java/org/neo4j/driver/internal/ValuesTest.java index 48f24084f1..f606539a6a 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/ValuesTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/ValuesTest.java @@ -59,6 +59,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.stream.Stream; import org.hamcrest.Matchers; import org.junit.jupiter.api.Test; @@ -80,41 +81,73 @@ class ValuesTest { @Test @SuppressWarnings("RedundantArrayCreation") void shouldConvertPrimitiveArrays() { - assertThat(value(new short[] {1, 2, 3}), equalTo(new ListValue(values(1, 2, 3)))); - assertThat(value(new int[] {1, 2, 3}), equalTo(new ListValue(values(1, 2, 3)))); + assertThat( + value(new short[] {1, 2, 3}), + equalTo(new ListValue(Values.value(1, 2, 3).asList(Function.identity())))); + + assertThat( + value(new int[] {1, 2, 3}), + equalTo(new ListValue(Values.value(1, 2, 3).asList(Function.identity())))); - assertThat(value(new long[] {1, 2, 3}), equalTo(new ListValue(values(1, 2, 3)))); + assertThat( + value(new long[] {1, 2, 3}), + equalTo(new ListValue(Values.value(1, 2, 3).asList(Function.identity())))); - assertThat(value(new float[] {1.1f, 2.2f, 3.3f}), equalTo(new ListValue(values(1.1f, 2.2f, 3.3f)))); + assertThat( + value(new float[] {1.1f, 2.2f, 3.3f}), + equalTo(new ListValue(Values.value(1.1f, 2.2f, 3.3f).asList(Function.identity())))); - assertThat(value(new double[] {1.1, 2.2, 3.3}), equalTo(new ListValue(values(1.1, 2.2, 3.3)))); + assertThat( + value(new double[] {1.1, 2.2, 3.3}), + equalTo(new ListValue(Values.value(1.1, 2.2, 3.3).asList(Function.identity())))); - assertThat(value(new boolean[] {true, false, true}), equalTo(new ListValue(values(true, false, true)))); + assertThat( + value(new boolean[] {true, false, true}), + equalTo(new ListValue(Values.value(true, false, true).asList(Function.identity())))); - assertThat(value(new char[] {'a', 'b', 'c'}), equalTo(new ListValue(values('a', 'b', 'c')))); + assertThat( + value(new char[] {'a', 'b', 'c'}), + equalTo(new ListValue(Values.value('a', 'b', 'c').asList(Function.identity())))); - assertThat(value(new String[] {"a", "b", "c"}), equalTo(new ListValue(values("a", "b", "c")))); + assertThat( + value(new String[] {"a", "b", "c"}), + equalTo(new ListValue(Values.value("a", "b", "c").asList(Function.identity())))); } @Test void shouldConvertPrimitiveArraysFromObject() { - assertThat(value((Object) new short[] {1, 2, 3}), equalTo(new ListValue(values(1, 2, 3)))); + assertThat( + value((Object) new short[] {1, 2, 3}), + equalTo(new ListValue(Values.value(1, 2, 3).asList(Function.identity())))); - assertThat(value((Object) new int[] {1, 2, 3}), equalTo(new ListValue(values(1, 2, 3)))); + assertThat( + value((Object) new int[] {1, 2, 3}), + equalTo(new ListValue(Values.value(1, 2, 3).asList(Function.identity())))); - assertThat(value((Object) new long[] {1, 2, 3}), equalTo(new ListValue(values(1, 2, 3)))); + assertThat( + value((Object) new long[] {1, 2, 3}), + equalTo(new ListValue(Values.value(1, 2, 3).asList(Function.identity())))); - assertThat(value((Object) new float[] {1.1f, 2.2f, 3.3f}), equalTo(new ListValue(values(1.1f, 2.2f, 3.3f)))); + assertThat( + value((Object) new float[] {1.1f, 2.2f, 3.3f}), + equalTo(new ListValue(Values.value(1.1f, 2.2f, 3.3f).asList(Function.identity())))); - assertThat(value((Object) new double[] {1.1, 2.2, 3.3}), equalTo(new ListValue(values(1.1, 2.2, 3.3)))); + assertThat( + value((Object) new double[] {1.1, 2.2, 3.3}), + equalTo(new ListValue(Values.value(1.1, 2.2, 3.3).asList(Function.identity())))); assertThat( - value((Object) new boolean[] {true, false, true}), equalTo(new ListValue(values(true, false, true)))); + value((Object) new boolean[] {true, false, true}), + equalTo(new ListValue(Values.value(true, false, true).asList(Function.identity())))); - assertThat(value((Object) new char[] {'a', 'b', 'c'}), equalTo(new ListValue(values('a', 'b', 'c')))); + assertThat( + value((Object) new char[] {'a', 'b', 'c'}), + equalTo(new ListValue(Values.value('a', 'b', 'c').asList(Function.identity())))); - assertThat(value((Object) new String[] {"a", "b", "c"}), equalTo(new ListValue(values("a", "b", "c")))); + assertThat( + value((Object) new String[] {"a", "b", "c"}), + equalTo(new ListValue(Values.value("a", "b", "c").asList(Function.identity())))); } @Test @@ -153,9 +186,9 @@ void equalityRules() { void shouldMapDriverComplexTypesToListOfJavaPrimitiveTypes() { // Given Map map = new HashMap<>(); - map.put("Cat", new ListValue(values("meow", "miaow"))); - map.put("Dog", new ListValue(values("wow"))); - map.put("Wrong", new ListValue(values(-1))); + map.put("Cat", new ListValue(Values.value("meow", "miaow").asList(Function.identity()))); + map.put("Dog", new ListValue(List.of(Values.value("wow")))); + map.put("Wrong", new ListValue(List.of(Values.value(-1)))); var mapValue = new MapValue(map); // When @@ -184,7 +217,7 @@ void shouldMapDriverMapsToJavaMaps() { var values = new MapValue(map); // When - var result = values.asMap(Values.ofToString()); + var result = values.asMap(ofToString()); // Then assertThat(result.size(), equalTo(2)); diff --git a/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncSessionTest.java b/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncSessionTest.java index 7fe27e8e30..4f638e5615 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncSessionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncSessionTest.java @@ -76,7 +76,6 @@ import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.TransactionConfig; -import org.neo4j.driver.Value; import org.neo4j.driver.async.AsyncSession; import org.neo4j.driver.async.AsyncTransaction; import org.neo4j.driver.async.AsyncTransactionCallback; @@ -120,7 +119,7 @@ private static Stream>> all session -> session.runAsync("RETURN $x", parameters("x", 1)), session -> session.runAsync("RETURN $x", singletonMap("x", 1)), session -> session.runAsync( - "RETURN $x", new InternalRecord(singletonList("x"), new Value[] {new IntegerValue(1)})), + "RETURN $x", new InternalRecord(singletonList("x"), List.of(new IntegerValue(1)))), session -> session.runAsync(new Query("RETURN $x", parameters("x", 1))), session -> session.runAsync(new Query("RETURN $x", parameters("x", 1)), empty()), session -> session.runAsync("RETURN $x", singletonMap("x", 1), empty()), diff --git a/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncTransactionTest.java b/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncTransactionTest.java index 804dd43b2f..84545c93d6 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncTransactionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/async/InternalAsyncTransactionTest.java @@ -60,7 +60,6 @@ import org.neo4j.bolt.connection.summary.RollbackSummary; import org.neo4j.bolt.connection.summary.RunSummary; import org.neo4j.driver.Query; -import org.neo4j.driver.Value; import org.neo4j.driver.async.AsyncTransaction; import org.neo4j.driver.async.ResultCursor; import org.neo4j.driver.exceptions.ServiceUnavailableException; @@ -95,8 +94,7 @@ private static Stream>> tx -> tx.runAsync("RETURN 1"), tx -> tx.runAsync("RETURN $x", parameters("x", 1)), tx -> tx.runAsync("RETURN $x", singletonMap("x", 1)), - tx -> tx.runAsync( - "RETURN $x", new InternalRecord(singletonList("x"), new Value[] {new IntegerValue(1)})), + tx -> tx.runAsync("RETURN $x", new InternalRecord(singletonList("x"), List.of(new IntegerValue(1)))), tx -> tx.runAsync(new Query("RETURN $x", parameters("x", 1)))); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/cursor/ResultCursorImplTest.java b/driver/src/test/java/org/neo4j/driver/internal/cursor/ResultCursorImplTest.java index a2d4b8b6e6..54dc5af9d1 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/cursor/ResultCursorImplTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/cursor/ResultCursorImplTest.java @@ -29,6 +29,7 @@ import static org.mockito.MockitoAnnotations.openMocks; import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; @@ -84,7 +85,7 @@ void shouldNextAsync() { given(connection.writeAndFlush(any(), any(Message.class))) .willAnswer((Answer>) invocation -> { var handler = (DriverResponseHandler) invocation.getArgument(0); - handler.onRecord(new Value[0]); + handler.onRecord(List.of()); return CompletableFuture.completedStage(null); }); @@ -121,7 +122,7 @@ void shouldFailNextAsyncOnFlushError() { @Test void shouldSingleAsync() { given(connection.serverAddress()).willReturn(BoltServerAddress.LOCAL_DEFAULT); - cursor.onRecord(new Value[0]); + cursor.onRecord(List.of()); cursor.onPullSummary(mock(PullSummary.class)); var record = cursor.singleAsync().toCompletableFuture().join(); @@ -136,7 +137,7 @@ void shouldFailSingleAsync() { given(connection.writeAndFlush(any(), any(Message.class))) .willAnswer((Answer>) invocation -> { var handler = (DriverResponseHandler) invocation.getArgument(0); - handler.onRecord(new Value[0]); + handler.onRecord(List.of()); var pullSummary = mock(PullSummary.class); given(pullSummary.hasMore()).willReturn(true); handler.onPullSummary(pullSummary); @@ -190,7 +191,7 @@ void shouldFetchMore() { .willAnswer((Answer>) invocation -> { var handler = (DriverResponseHandler) invocation.getArgument(0); for (var i = 0; i < fetchSize; i++) { - handler.onRecord(new Value[0]); + handler.onRecord(List.of()); } var pullSummary = mock(PullSummary.class); given(pullSummary.hasMore()).willReturn(true); @@ -213,7 +214,7 @@ void shouldListAsync() { given(connection.writeAndFlush(any(), any(Message.class))) .willAnswer((Answer>) invocation -> { var handler = (DriverResponseHandler) invocation.getArgument(0); - handler.onRecord(new Value[0]); + handler.onRecord(List.of()); var pullSummary = mock(PullSummary.class); handler.onPullSummary(pullSummary); return CompletableFuture.completedStage(null); diff --git a/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java b/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java index e0269a9601..cf97577931 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java @@ -56,7 +56,6 @@ import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.TransactionConfig; -import org.neo4j.driver.Value; import org.neo4j.driver.internal.InternalRecord; import org.neo4j.driver.internal.async.NetworkSession; import org.neo4j.driver.internal.async.UnmanagedTransaction; @@ -83,7 +82,7 @@ private static Stream>> allS rxSession -> rxSession.run("RETURN $x", parameters("x", 1)), rxSession -> rxSession.run("RETURN $x", singletonMap("x", 1)), rxSession -> rxSession.run( - "RETURN $x", new InternalRecord(singletonList("x"), new Value[] {new IntegerValue(1)})), + "RETURN $x", new InternalRecord(singletonList("x"), List.of(new IntegerValue(1)))), rxSession -> rxSession.run(new Query("RETURN $x", parameters("x", 1))), rxSession -> rxSession.run(new Query("RETURN $x", parameters("x", 1)), empty()), rxSession -> rxSession.run("RETURN $x", singletonMap("x", 1), empty()), diff --git a/driver/src/test/java/org/neo4j/driver/internal/summary/InternalProfiledPlanTest.java b/driver/src/test/java/org/neo4j/driver/internal/summary/InternalProfiledPlanTest.java index 940fd170fb..3392115588 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/summary/InternalProfiledPlanTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/summary/InternalProfiledPlanTest.java @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; import org.neo4j.driver.Value; @@ -52,7 +53,7 @@ void shouldHandlePlanWithNoChildren() { void shouldHandlePlanWithChildren() { // GIVEN var planMap = createPlanMap(); - planMap.put("children", new ListValue(new MapValue(createPlanMap()), new MapValue(createPlanMap()))); + planMap.put("children", new ListValue(List.of(new MapValue(createPlanMap()), new MapValue(createPlanMap())))); Value value = new MapValue(planMap); // WHEN @@ -73,7 +74,7 @@ private Map createPlanMap() { map.put("pageCacheMisses", new IntegerValue(3456)); map.put("pageCacheHitRatio", new FloatValue(0.123)); map.put("time", new IntegerValue(999)); - map.put("identifiers", new ListValue(new StringValue("n1"), new StringValue("n2"))); + map.put("identifiers", new ListValue(List.of(new StringValue("n1"), new StringValue("n2")))); Map args = new HashMap<>(); args.put("version", new StringValue("CYPHER 1337")); map.put("args", new MapValue(args)); diff --git a/driver/src/test/java/org/neo4j/driver/internal/value/ListValueTest.java b/driver/src/test/java/org/neo4j/driver/internal/value/ListValueTest.java index 2b528bfd45..7db4d4f648 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/value/ListValueTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/value/ListValueTest.java @@ -158,6 +158,6 @@ void shouldMapMatrixValuesToArrays() { } private ListValue listValue(Value... values) { - return new ListValue(values); + return new ListValue(Arrays.asList(values)); } } diff --git a/pom.xml b/pom.xml index 4909bfb77b..69b8235550 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ true - 4.1.0 + 5.0.0 1.0.4 diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartTest.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartTest.java index eb1a60589f..bcfe007691 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartTest.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartTest.java @@ -92,9 +92,6 @@ public class StartTest implements TestkitRequest { COMMON_SKIP_PATTERN_TO_REASON.put( "^stub\\.summary\\.test_summary\\.TestSummaryBasicInfoDiscard\\.test_times$", "Driver sets summary's resultAvailableAfter to -1 on discard"); - skipMessage = "Driver expects serverAgent string starting with Neo4j only"; - COMMON_SKIP_PATTERN_TO_REASON.put( - "^stub\\.versions\\.test_versions\\.TestProtocolVersions\\.test_server_agent$", skipMessage); SYNC_SKIP_PATTERN_TO_REASON.putAll(COMMON_SKIP_PATTERN_TO_REASON); skipMessage = diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitNodeValueSerializer.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitNodeValueSerializer.java index 7ea8c87a8e..3967a9a9c6 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitNodeValueSerializer.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitNodeValueSerializer.java @@ -52,7 +52,7 @@ public void serialize(NodeValue nodeValue, JsonGenerator gen, SerializerProvider var labels = StreamSupport.stream(node.labels().spliterator(), false) .map(StringValue::new) - .toArray(StringValue[]::new); + .toList(); gen.writeObjectField("labels", new ListValue(labels)); gen.writeObjectField("props", new MapValue(node.asMap(Function.identity()))); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitPathValueSerializer.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitPathValueSerializer.java index 16f387f1ec..6d5934a8de 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitPathValueSerializer.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/serializer/TestkitPathValueSerializer.java @@ -43,11 +43,11 @@ public void serialize(PathValue pathValue, JsonGenerator gen, SerializerProvider var path = pathValue.asPath(); var nodes = StreamSupport.stream(path.nodes().spliterator(), false) .map(NodeValue::new) - .toArray(NodeValue[]::new); + .toList(); gen.writeObjectField("nodes", new ListValue(nodes)); var relationships = StreamSupport.stream(path.relationships().spliterator(), false) .map(RelationshipValue::new) - .toArray(RelationshipValue[]::new); + .toList(); gen.writeObjectField("relationships", new ListValue(relationships)); }); }