Skip to content

Commit fa44ba1

Browse files
committed
feat(vector): update naming
BREAKING CHANGE: Vector names have been updated. In addition, `toString` implementation has been updated.
1 parent 2d8ae2d commit fa44ba1

25 files changed

+465
-213
lines changed

driver/clirr-ignored-differences.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,5 +905,41 @@
905905
<differenceType>8001</differenceType>
906906
</difference>
907907

908+
<difference>
909+
<className>org/neo4j/driver/types/ByteVector</className>
910+
<differenceType>8001</differenceType>
911+
</difference>
912+
913+
<difference>
914+
<className>org/neo4j/driver/types/ShortVector</className>
915+
<differenceType>8001</differenceType>
916+
</difference>
917+
918+
<difference>
919+
<className>org/neo4j/driver/types/IntVector</className>
920+
<differenceType>8001</differenceType>
921+
</difference>
922+
923+
<difference>
924+
<className>org/neo4j/driver/types/LongVector</className>
925+
<differenceType>8001</differenceType>
926+
</difference>
927+
928+
<difference>
929+
<className>org/neo4j/driver/types/FloatVector</className>
930+
<differenceType>8001</differenceType>
931+
</difference>
932+
933+
<difference>
934+
<className>org/neo4j/driver/types/DoubleVector</className>
935+
<differenceType>8001</differenceType>
936+
</difference>
937+
938+
<difference>
939+
<className>org/neo4j/driver/types/Vector</className>
940+
<differenceType>7006</differenceType>
941+
<method>java.lang.Class elementType()</method>
942+
<to>org.neo4j.driver.types.Vector$ElementType</to>
943+
</difference>
908944

909945
</differences>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.neo4j.driver.types.Relationship;
4343
import org.neo4j.driver.types.Type;
4444
import org.neo4j.driver.types.TypeSystem;
45+
import org.neo4j.driver.types.Vector;
4546
import org.neo4j.driver.util.Immutable;
4647
import org.neo4j.driver.util.Preview;
4748

@@ -679,6 +680,10 @@ public interface Value extends MapAccessor, MapAccessorWithDefaultValue {
679680
* <td>{@link TypeSystem#RELATIONSHIP}</td>
680681
* <td>{@link Relationship}</td>
681682
* </tr>
683+
* <tr>
684+
* <td>{@link TypeSystem#VECTOR}</td>
685+
* <td>{@link Vector}</td>
686+
* </tr>
682687
* </tbody>
683688
* </table>
684689
*

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@
4343
import org.neo4j.driver.exceptions.ClientException;
4444
import org.neo4j.driver.internal.AsValue;
4545
import org.neo4j.driver.internal.GqlStatusError;
46-
import org.neo4j.driver.internal.InternalByteVector;
47-
import org.neo4j.driver.internal.InternalDoubleVector;
48-
import org.neo4j.driver.internal.InternalFloatVector;
49-
import org.neo4j.driver.internal.InternalIntVector;
46+
import org.neo4j.driver.internal.InternalFloat32Vector;
47+
import org.neo4j.driver.internal.InternalFloat64Vector;
48+
import org.neo4j.driver.internal.InternalInt16Vector;
49+
import org.neo4j.driver.internal.InternalInt32Vector;
50+
import org.neo4j.driver.internal.InternalInt64Vector;
51+
import org.neo4j.driver.internal.InternalInt8Vector;
5052
import org.neo4j.driver.internal.InternalIsoDuration;
51-
import org.neo4j.driver.internal.InternalLongVector;
5253
import org.neo4j.driver.internal.InternalPoint2D;
5354
import org.neo4j.driver.internal.InternalPoint3D;
54-
import org.neo4j.driver.internal.InternalShortVector;
5555
import org.neo4j.driver.internal.value.BooleanValue;
5656
import org.neo4j.driver.internal.value.BytesValue;
5757
import org.neo4j.driver.internal.value.DateTimeValue;
@@ -1064,7 +1064,7 @@ public static <T> Function<Value, List<T>> ofList(final Function<Value, T> inner
10641064
*/
10651065
@Preview(name = "Neo4j Vector")
10661066
public static Value vector(byte[] elements) {
1067-
return value(new InternalByteVector(elements));
1067+
return value(new InternalInt8Vector(elements));
10681068
}
10691069

10701070
/**
@@ -1076,7 +1076,7 @@ public static Value vector(byte[] elements) {
10761076
*/
10771077
@Preview(name = "Neo4j Vector")
10781078
public static Value vector(short[] elements) {
1079-
return value(new InternalShortVector(elements));
1079+
return value(new InternalInt16Vector(elements));
10801080
}
10811081

10821082
/**
@@ -1088,7 +1088,7 @@ public static Value vector(short[] elements) {
10881088
*/
10891089
@Preview(name = "Neo4j Vector")
10901090
public static Value vector(int[] elements) {
1091-
return value(new InternalIntVector(elements));
1091+
return value(new InternalInt32Vector(elements));
10921092
}
10931093

10941094
/**
@@ -1100,7 +1100,7 @@ public static Value vector(int[] elements) {
11001100
*/
11011101
@Preview(name = "Neo4j Vector")
11021102
public static Value vector(long[] elements) {
1103-
return value(new InternalLongVector(elements));
1103+
return value(new InternalInt64Vector(elements));
11041104
}
11051105

11061106
/**
@@ -1112,7 +1112,7 @@ public static Value vector(long[] elements) {
11121112
*/
11131113
@Preview(name = "Neo4j Vector")
11141114
public static Value vector(float[] elements) {
1115-
return value(new InternalFloatVector(elements));
1115+
return value(new InternalFloat32Vector(elements));
11161116
}
11171117

11181118
/**
@@ -1124,7 +1124,7 @@ public static Value vector(float[] elements) {
11241124
*/
11251125
@Preview(name = "Neo4j Vector")
11261126
public static Value vector(double[] elements) {
1127-
return value(new InternalDoubleVector(elements));
1127+
return value(new InternalFloat64Vector(elements));
11281128
}
11291129

11301130
private static Value value(Vector vector) {

driver/src/main/java/org/neo4j/driver/internal/AbstractArrayVector.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.lang.reflect.Array;
2020
import java.util.Objects;
21+
import java.util.stream.Collectors;
22+
import java.util.stream.Stream;
2123
import org.neo4j.bolt.connection.values.Vector;
2224

2325
public abstract class AbstractArrayVector<T> implements Vector {
@@ -31,6 +33,7 @@ public abstract class AbstractArrayVector<T> implements Vector {
3133
this.elements = arraycopy(elements);
3234
}
3335

36+
@Override
3437
public Class<?> elementType() {
3538
return elementType;
3639
}
@@ -48,6 +51,10 @@ public Object elements() {
4851
return elements;
4952
}
5053

54+
protected abstract Stream<? extends Number> elementsStream();
55+
56+
protected abstract String neo4jElementType();
57+
5158
@Override
5259
public boolean equals(Object o) {
5360
if (o == null || getClass() != o.getClass()) return false;
@@ -64,10 +71,8 @@ public int hashCode() {
6471

6572
@Override
6673
public String toString() {
67-
return "AbstractArrayVector{" + "elementType="
68-
+ elementType + ", length="
69-
+ length + ", elements="
70-
+ elements + '}';
74+
var value = elementsStream().map(Number::toString).collect(Collectors.joining(", ", "[", "]"));
75+
return "vector(%s, %d, %s NOT NULL)".formatted(value, length, neo4jElementType());
7176
}
7277

7378
@SuppressWarnings({"unchecked", "SuspiciousSystemArraycopy"})
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) "Neo4j"
3+
* Neo4j Sweden AB [https://neo4j.com]
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package org.neo4j.driver.internal;
18+
19+
import java.util.stream.IntStream;
20+
import java.util.stream.Stream;
21+
import org.neo4j.driver.types.Float32Vector;
22+
23+
public final class InternalFloat32Vector extends AbstractArrayVector<float[]> implements Float32Vector {
24+
public InternalFloat32Vector(float[] elements) {
25+
super(elements);
26+
}
27+
28+
@Override
29+
protected Stream<? extends Number> elementsStream() {
30+
return IntStream.range(0, this.elements.length).mapToObj(i -> this.elements[i]);
31+
}
32+
33+
@Override
34+
protected String neo4jElementType() {
35+
return "FLOAT32";
36+
}
37+
}

driver/src/main/java/org/neo4j/driver/internal/InternalFloatVector.java renamed to driver/src/main/java/org/neo4j/driver/internal/InternalFloat64Vector.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,22 @@
1616
*/
1717
package org.neo4j.driver.internal;
1818

19-
import org.neo4j.driver.types.FloatVector;
19+
import java.util.Arrays;
20+
import java.util.stream.Stream;
21+
import org.neo4j.driver.types.Float64Vector;
2022

21-
public final class InternalFloatVector extends AbstractArrayVector<float[]> implements FloatVector {
22-
public InternalFloatVector(float[] elements) {
23+
public final class InternalFloat64Vector extends AbstractArrayVector<double[]> implements Float64Vector {
24+
public InternalFloat64Vector(double[] elements) {
2325
super(elements);
2426
}
27+
28+
@Override
29+
protected Stream<? extends Number> elementsStream() {
30+
return Arrays.stream(elements).boxed();
31+
}
32+
33+
@Override
34+
protected String neo4jElementType() {
35+
return "FLOAT";
36+
}
2537
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) "Neo4j"
3+
* Neo4j Sweden AB [https://neo4j.com]
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package org.neo4j.driver.internal;
18+
19+
import java.util.stream.IntStream;
20+
import java.util.stream.Stream;
21+
import org.neo4j.driver.types.Int16Vector;
22+
23+
public final class InternalInt16Vector extends AbstractArrayVector<short[]> implements Int16Vector {
24+
public InternalInt16Vector(short[] elements) {
25+
super(elements);
26+
}
27+
28+
@Override
29+
protected Stream<? extends Number> elementsStream() {
30+
return IntStream.range(0, this.elements.length).mapToObj(i -> this.elements[i]);
31+
}
32+
33+
@Override
34+
protected String neo4jElementType() {
35+
return "INTEGER16";
36+
}
37+
}

driver/src/main/java/org/neo4j/driver/internal/InternalByteVector.java renamed to driver/src/main/java/org/neo4j/driver/internal/InternalInt32Vector.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,22 @@
1616
*/
1717
package org.neo4j.driver.internal;
1818

19-
import org.neo4j.driver.types.ByteVector;
19+
import java.util.Arrays;
20+
import java.util.stream.Stream;
21+
import org.neo4j.driver.types.Int32Vector;
2022

21-
public final class InternalByteVector extends AbstractArrayVector<byte[]> implements ByteVector {
22-
public InternalByteVector(byte[] elements) {
23+
public final class InternalInt32Vector extends AbstractArrayVector<int[]> implements Int32Vector {
24+
public InternalInt32Vector(int[] elements) {
2325
super(elements);
2426
}
27+
28+
@Override
29+
protected Stream<? extends Number> elementsStream() {
30+
return Arrays.stream(elements).boxed();
31+
}
32+
33+
@Override
34+
protected String neo4jElementType() {
35+
return "INTEGER32";
36+
}
2537
}

driver/src/main/java/org/neo4j/driver/internal/InternalDoubleVector.java renamed to driver/src/main/java/org/neo4j/driver/internal/InternalInt64Vector.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,22 @@
1616
*/
1717
package org.neo4j.driver.internal;
1818

19-
import org.neo4j.driver.types.DoubleVector;
19+
import java.util.Arrays;
20+
import java.util.stream.Stream;
21+
import org.neo4j.driver.types.Int64Vector;
2022

21-
public final class InternalDoubleVector extends AbstractArrayVector<double[]> implements DoubleVector {
22-
public InternalDoubleVector(double[] elements) {
23+
public final class InternalInt64Vector extends AbstractArrayVector<long[]> implements Int64Vector {
24+
public InternalInt64Vector(long[] elements) {
2325
super(elements);
2426
}
27+
28+
@Override
29+
protected Stream<? extends Number> elementsStream() {
30+
return Arrays.stream(elements).boxed();
31+
}
32+
33+
@Override
34+
protected String neo4jElementType() {
35+
return "INTEGER";
36+
}
2537
}

driver/src/main/java/org/neo4j/driver/internal/InternalIntVector.java renamed to driver/src/main/java/org/neo4j/driver/internal/InternalInt8Vector.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,22 @@
1616
*/
1717
package org.neo4j.driver.internal;
1818

19-
import org.neo4j.driver.types.IntVector;
19+
import java.util.stream.IntStream;
20+
import java.util.stream.Stream;
21+
import org.neo4j.driver.types.Int8Vector;
2022

21-
public final class InternalIntVector extends AbstractArrayVector<int[]> implements IntVector {
22-
public InternalIntVector(int[] elements) {
23+
public final class InternalInt8Vector extends AbstractArrayVector<byte[]> implements Int8Vector {
24+
public InternalInt8Vector(byte[] elements) {
2325
super(elements);
2426
}
27+
28+
@Override
29+
protected Stream<? extends Number> elementsStream() {
30+
return IntStream.range(0, this.elements.length).mapToObj(i -> this.elements[i]);
31+
}
32+
33+
@Override
34+
protected String neo4jElementType() {
35+
return "INTEGER8";
36+
}
2537
}

0 commit comments

Comments
 (0)