Skip to content

Commit b0d13a7

Browse files
committed
PR issues
1 parent a2567ae commit b0d13a7

File tree

9 files changed

+55
-22
lines changed

9 files changed

+55
-22
lines changed

firebase-firestore/src/androidTest/java/com/google/firebase/firestore/VectorTest.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,6 @@ public void writeAndReadVectorEmbeddings() throws ExecutionException, Interrupte
7878
assertTrue(actual.get("vector2") instanceof VectorValue);
7979
assertTrue(actual.get("vector3") instanceof VectorValue);
8080

81-
VectorValue pojo = actual.get("vector0", VectorValue.class);
82-
8381
assertArrayEquals(
8482
expected.get("vector0").toArray(),
8583
actual.get("vector0", VectorValue.class).toArray(),
@@ -96,6 +94,23 @@ public void writeAndReadVectorEmbeddings() throws ExecutionException, Interrupte
9694
expected.get("vector3").toArray(),
9795
actual.get("vector3", VectorValue.class).toArray(),
9896
DOUBLE_EPSILON);
97+
98+
assertArrayEquals(
99+
expected.get("vector0").toArray(),
100+
actual.getVectorValue("vector0").toArray(),
101+
DOUBLE_EPSILON);
102+
assertArrayEquals(
103+
expected.get("vector1").toArray(),
104+
actual.getVectorValue("vector1").toArray(),
105+
DOUBLE_EPSILON);
106+
assertArrayEquals(
107+
expected.get("vector2").toArray(),
108+
actual.getVectorValue("vector2").toArray(),
109+
DOUBLE_EPSILON);
110+
assertArrayEquals(
111+
expected.get("vector3").toArray(),
112+
actual.getVectorValue("vector3").toArray(),
113+
DOUBLE_EPSILON);
99114
}
100115

101116
@Test

firebase-firestore/src/main/java/com/google/firebase/firestore/DocumentSnapshot.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,8 @@ public DocumentReference getReference() {
485485
}
486486

487487
/**
488-
* Returns the value of the field as a VectorValue.
488+
* Returns the value of the field as a {@link VectorValue} or
489+
* `null` if the field does not exist in the document.
489490
*
490491
* @param field The path to the field.
491492
* @throws RuntimeException if the value is not a VectorValue.

firebase-firestore/src/main/java/com/google/firebase/firestore/FieldValue.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public static FieldValue increment(double l) {
186186
/**
187187
* Creates a new {@link VectorValue} constructed with a copy of the given array of doubles.
188188
*
189-
* @param values Create a {@link VectorValue} instance with a copy of this array of doubles.
189+
* @param values Array of doubles to be copied to create a {@link VectorValue}.
190190
* @return A new {@link VectorValue} constructed with a copy of the given array of doubles.
191191
*/
192192
@NonNull

firebase-firestore/src/main/java/com/google/firebase/firestore/UserDataReader.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@
4646
import com.google.protobuf.NullValue;
4747
import com.google.type.LatLng;
4848
import java.util.ArrayList;
49-
import java.util.Arrays;
5049
import java.util.Date;
5150
import java.util.Iterator;
5251
import java.util.List;
5352
import java.util.Map;
5453
import java.util.Map.Entry;
55-
import java.util.stream.Collectors;
5654

5755
/**
5856
* Helper for parsing raw user input (provided via the API) into internal model classes.
@@ -456,9 +454,7 @@ private Value parseVectorValue(VectorValue vector, ParseContext context) {
456454
MapValue.Builder mapBuilder = MapValue.newBuilder();
457455

458456
mapBuilder.putFields(Values.TYPE_KEY, Values.VECTOR_VALUE_TYPE);
459-
mapBuilder.putFields(
460-
Values.VECTOR_MAP_VECTORS_KEY,
461-
parseData(Arrays.stream(vector.toArray()).boxed().collect(Collectors.toList()), context));
457+
mapBuilder.putFields(Values.VECTOR_MAP_VECTORS_KEY, parseData(vector.toList(), context));
462458

463459
return Value.newBuilder().setMapValue(mapBuilder).build();
464460
}

firebase-firestore/src/main/java/com/google/firebase/firestore/UserDataWriter.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,15 @@ Map<String, Object> convertObject(Map<String, Value> mapValue) {
104104
}
105105

106106
VectorValue convertVectorValue(Map<String, Value> mapValue) {
107-
double[] values =
108-
mapValue.get(Values.VECTOR_MAP_VECTORS_KEY).getArrayValue().getValuesList().stream()
109-
.mapToDouble(val -> val.getDoubleValue())
110-
.toArray();
111-
return new VectorValue(values);
107+
List<Value> values =
108+
mapValue.get(Values.VECTOR_MAP_VECTORS_KEY).getArrayValue().getValuesList();
109+
110+
double[] doubles = new double[values.size()];
111+
for (int i = 0; i < values.size(); i++) {
112+
doubles[i] = values.get(i).getDoubleValue();
113+
}
114+
115+
return new VectorValue(doubles);
112116
}
113117

114118
private Object convertServerTimestamp(Value serverTimestampValue) {

firebase-firestore/src/main/java/com/google/firebase/firestore/VectorValue.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616

1717
import androidx.annotation.NonNull;
1818
import androidx.annotation.Nullable;
19-
import java.io.Serializable;
19+
import java.util.ArrayList;
2020
import java.util.Arrays;
21+
import java.util.List;
2122

2223
/**
2324
* Represent a vector type in Firestore documents.
2425
* Create an instance with {@link FieldValue#vector(double[])}.
2526
*/
26-
public class VectorValue implements Serializable {
27+
public class VectorValue {
2728
private final double[] values;
2829

2930
VectorValue(@Nullable double[] values) {
30-
if (values == null) this.values = new double[] {};
31-
else this.values = values.clone();
31+
this.values = (values == null) ? new double[] {} : values.clone();
3232
}
3333

3434
/**
@@ -41,6 +41,21 @@ public double[] toArray() {
4141
return this.values.clone();
4242
}
4343

44+
/**
45+
* Package private.
46+
* Returns a representation of the vector as a List<Doubles>.
47+
*
48+
* @return A representation of the vector as an List<Doubles>
49+
*/
50+
@NonNull
51+
List<Double> toList() {
52+
ArrayList<Double> result = new ArrayList<Double>(this.values.length);
53+
for (int i = 0; i < this.values.length; i++) {
54+
result.add(i, this.values[i]);
55+
}
56+
return result;
57+
}
58+
4459
/**
4560
* Returns true if this VectorValue is equal to the provided object.
4661
*

firebase-firestore/src/main/java/com/google/firebase/firestore/index/FirestoreIndexValueWriter.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,13 @@ private void writeUnlabeledIndexString(
143143
}
144144

145145
private void writeIndexVector(MapValue mapIndexValue, DirectionalIndexByteEncoder encoder) {
146-
writeValueTypeLabel(encoder, INDEX_TYPE_VECTOR);
147-
148146
Map<String, Value> map = mapIndexValue.getFieldsMap();
147+
String key = Values.VECTOR_MAP_VECTORS_KEY;
148+
writeValueTypeLabel(encoder, INDEX_TYPE_VECTOR);
149149

150150
// Vectors sort first by length
151-
String key = Values.VECTOR_MAP_VECTORS_KEY;
152151
int length = map.get(key).getArrayValue().getValuesCount();
153-
this.writeValueTypeLabel(encoder, INDEX_TYPE_VECTOR);
152+
writeValueTypeLabel(encoder, INDEX_TYPE_NUMBER);
154153
encoder.writeLong(length);
155154

156155
// Vectors then sort by position value

firebase-firestore/src/main/java/com/google/firebase/firestore/model/Values.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ public static Value getLowerBound(Value value) {
560560
case ARRAY_VALUE:
561561
return MIN_ARRAY;
562562
case MAP_VALUE:
563+
// VectorValue sorts after ArrayValue and before an empty MapValue
563564
if (isVectorValue(value)) {
564565
return MIN_VECTOR_VALUE;
565566
}
@@ -592,6 +593,7 @@ public static Value getUpperBound(Value value) {
592593
case ARRAY_VALUE:
593594
return MIN_VECTOR_VALUE;
594595
case MAP_VALUE:
596+
// VectorValue sorts after ArrayValue and before an empty MapValue
595597
if (isVectorValue(value)) {
596598
return MIN_MAP;
597599
}

firebase-firestore/src/test/java/com/google/firebase/firestore/model/ValuesTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ public void testValueOrdering() {
201201
.addEqualityGroup(wrap(Arrays.asList("foo", "0")))
202202

203203
// vector
204+
// .addEqualityGroup(wrap(FieldValue.vector(new double[] {})))
204205
.addEqualityGroup(wrap(FieldValue.vector(new double[] {100})))
205206
.addEqualityGroup(wrap(FieldValue.vector(new double[] {1, 2, 3})))
206207
.addEqualityGroup(wrap(FieldValue.vector(new double[] {1, 3, 2})))

0 commit comments

Comments
 (0)