Skip to content

Commit a2567ae

Browse files
committed
Fixes and more testing
1 parent ae41f88 commit a2567ae

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private void writeUnlabeledIndexString(
142142
encoder.writeString(stringIndexValue);
143143
}
144144

145-
private void writeIndexMap(MapValue mapIndexValue, DirectionalIndexByteEncoder encoder) {
145+
private void writeIndexVector(MapValue mapIndexValue, DirectionalIndexByteEncoder encoder) {
146146
writeValueTypeLabel(encoder, INDEX_TYPE_VECTOR);
147147

148148
Map<String, Value> map = mapIndexValue.getFieldsMap();
@@ -158,7 +158,7 @@ private void writeIndexMap(MapValue mapIndexValue, DirectionalIndexByteEncoder e
158158
this.writeIndexValueAux(map.get(key), encoder);
159159
}
160160

161-
private void writeIndexVector(MapValue mapIndexValue, DirectionalIndexByteEncoder encoder) {
161+
private void writeIndexMap(MapValue mapIndexValue, DirectionalIndexByteEncoder encoder) {
162162
writeValueTypeLabel(encoder, INDEX_TYPE_MAP);
163163
for (Map.Entry<String, Value> entry : mapIndexValue.getFieldsMap().entrySet()) {
164164
String key = entry.getKey();

firebase-firestore/src/test/java/com/google/firebase/firestore/local/SQLiteLocalStoreTest.java

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,80 @@ public void testUsesIndexForLimitQueryWhenIndexIsUpdated() {
293293
assertQueryReturned("coll/a", "coll/c");
294294
}
295295

296+
@Test
297+
public void testIndexesVectorValues() {
298+
FieldIndex index =
299+
fieldIndex(
300+
"coll", 0, FieldIndex.INITIAL_STATE, "embedding", FieldIndex.Segment.Kind.ASCENDING);
301+
configureFieldIndexes(singletonList(index));
302+
303+
writeMutation(setMutation("coll/arr1", map("embedding", Arrays.asList(0.1, 0.2, 0.3))));
304+
writeMutation(setMutation("coll/map2", map("embedding", map())));
305+
writeMutation(
306+
setMutation("coll/doc3", map("embedding", FieldValue.vector(new double[] {4, 5, 6}))));
307+
writeMutation(setMutation("coll/doc4", map("embedding", FieldValue.vector(new double[] {5}))));
308+
309+
Query query = query("coll").orderBy(orderBy("embedding", "asc"));
310+
executeQuery(query);
311+
assertQueryReturned("coll/arr1", "coll/doc4", "coll/doc3", "coll/map2");
312+
313+
query =
314+
query("coll").filter(filter("embedding", "==", FieldValue.vector(new double[] {4, 5, 6})));
315+
executeQuery(query);
316+
assertQueryReturned("coll/doc3");
317+
318+
query =
319+
query("coll").filter(filter("embedding", ">", FieldValue.vector(new double[] {4, 5, 6})));
320+
executeQuery(query);
321+
assertQueryReturned();
322+
323+
query = query("coll").filter(filter("embedding", ">=", FieldValue.vector(new double[] {4})));
324+
executeQuery(query);
325+
assertQueryReturned("coll/doc4", "coll/doc3");
326+
327+
backfillIndexes();
328+
329+
query = query("coll").orderBy(orderBy("embedding", "asc"));
330+
executeQuery(query);
331+
assertOverlaysRead(/* byKey= */ 4, /* byCollection= */ 0);
332+
assertOverlayTypes(
333+
keyMap(
334+
"coll/arr1",
335+
CountingQueryEngine.OverlayType.Set,
336+
"coll/map2",
337+
CountingQueryEngine.OverlayType.Set,
338+
"coll/doc3",
339+
CountingQueryEngine.OverlayType.Set,
340+
"coll/doc4",
341+
CountingQueryEngine.OverlayType.Set));
342+
assertQueryReturned("coll/arr1", "coll/doc4", "coll/doc3", "coll/map2");
343+
344+
query =
345+
query("coll").filter(filter("embedding", "==", FieldValue.vector(new double[] {4, 5, 6})));
346+
executeQuery(query);
347+
assertOverlaysRead(/* byKey= */ 1, /* byCollection= */ 0);
348+
assertOverlayTypes(keyMap("coll/doc3", CountingQueryEngine.OverlayType.Set));
349+
assertQueryReturned("coll/doc3");
350+
351+
query =
352+
query("coll").filter(filter("embedding", ">", FieldValue.vector(new double[] {4, 5, 6})));
353+
executeQuery(query);
354+
assertOverlaysRead(/* byKey= */ 0, /* byCollection= */ 0);
355+
assertOverlayTypes(keyMap());
356+
assertQueryReturned();
357+
358+
query = query("coll").filter(filter("embedding", ">=", FieldValue.vector(new double[] {4})));
359+
executeQuery(query);
360+
assertOverlaysRead(/* byKey= */ 2, /* byCollection= */ 0);
361+
assertOverlayTypes(
362+
keyMap(
363+
"coll/doc4",
364+
CountingQueryEngine.OverlayType.Set,
365+
"coll/doc3",
366+
CountingQueryEngine.OverlayType.Set));
367+
assertQueryReturned("coll/doc4", "coll/doc3");
368+
}
369+
296370
@Test
297371
public void testIndexesServerTimestamps() {
298372
FieldIndex index =

0 commit comments

Comments
 (0)