Skip to content

Commit bd55fbf

Browse files
committed
Add tests for other cases.
1 parent 969a7ef commit bd55fbf

File tree

2 files changed

+267
-0
lines changed

2 files changed

+267
-0
lines changed

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

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,4 +716,130 @@ public void queryWithMultipleInsOnDifferentFields() throws Exception {
716716
expectFullCollectionScan(() -> runQuery(query2, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
717717
assertEquals(docSet(query2.comparator(), doc3), result2);
718718
}
719+
720+
@Test
721+
public void queryInWithArrayContainsAny() throws Exception {
722+
MutableDocument doc1 = doc("coll/1", 1, map("a", 1, "b", Arrays.asList(0)));
723+
MutableDocument doc2 = doc("coll/2", 1, map("b", Arrays.asList(1)));
724+
MutableDocument doc3 = doc("coll/3", 1, map("a", 3, "b", Arrays.asList(2, 7), "c", 10));
725+
MutableDocument doc4 = doc("coll/4", 1, map("a", 1, "b", Arrays.asList(3, 7)));
726+
MutableDocument doc5 = doc("coll/5", 1, map("a", 1));
727+
MutableDocument doc6 = doc("coll/6", 1, map("a", 2, "c", 20));
728+
addDocument(doc1, doc2, doc3, doc4, doc5, doc6);
729+
730+
Query query1 =
731+
query("coll")
732+
.filter(
733+
orFilters(
734+
filter("a", "in", Arrays.asList(2, 3)),
735+
filter("b", "array-contains-any", Arrays.asList(0, 7))));
736+
DocumentSet result1 =
737+
expectFullCollectionScan(() -> runQuery(query1, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
738+
assertEquals(docSet(query1.comparator(), doc1, doc3, doc4, doc6), result1);
739+
740+
Query query2 =
741+
query("coll")
742+
.filter(
743+
andFilters(
744+
filter("a", "in", Arrays.asList(2, 3)),
745+
filter("b", "array-contains-any", Arrays.asList(0, 7))));
746+
747+
DocumentSet result2 =
748+
expectFullCollectionScan(() -> runQuery(query2, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
749+
assertEquals(docSet(query2.comparator(), doc3), result2);
750+
751+
Query query3 =
752+
query("coll")
753+
.filter(
754+
orFilters(
755+
andFilters(filter("a", "in", Arrays.asList(2, 3)), filter("c", "==", 10)),
756+
filter("b", "array-contains-any", Arrays.asList(0, 7))));
757+
DocumentSet result3 =
758+
expectFullCollectionScan(() -> runQuery(query3, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
759+
assertEquals(docSet(query3.comparator(), doc1, doc3, doc4), result3);
760+
761+
Query query4 =
762+
query("coll")
763+
.filter(
764+
andFilters(
765+
filter("a", "in", Arrays.asList(2, 3)),
766+
orFilters(
767+
filter("b", "array-contains-any", Arrays.asList(0, 7)),
768+
filter("c", "==", 20))));
769+
DocumentSet result4 =
770+
expectFullCollectionScan(() -> runQuery(query4, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
771+
assertEquals(docSet(query4.comparator(), doc3, doc6), result4);
772+
}
773+
774+
@Test
775+
public void queryInWithArrayContains() throws Exception {
776+
MutableDocument doc1 = doc("coll/1", 1, map("a", 1, "b", Arrays.asList(0)));
777+
MutableDocument doc2 = doc("coll/2", 1, map("b", Arrays.asList(1)));
778+
MutableDocument doc3 = doc("coll/3", 1, map("a", 3, "b", Arrays.asList(2, 7), "c", 10));
779+
MutableDocument doc4 = doc("coll/4", 1, map("a", 1, "b", Arrays.asList(3, 7)));
780+
MutableDocument doc5 = doc("coll/5", 1, map("a", 1));
781+
MutableDocument doc6 = doc("coll/6", 1, map("a", 2, "c", 20));
782+
addDocument(doc1, doc2, doc3, doc4, doc5, doc6);
783+
784+
Query query1 =
785+
query("coll")
786+
.filter(
787+
orFilters(
788+
filter("a", "in", Arrays.asList(2, 3)), filter("b", "array-contains", 3)));
789+
DocumentSet result1 =
790+
expectFullCollectionScan(() -> runQuery(query1, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
791+
assertEquals(docSet(query1.comparator(), doc3, doc4, doc6), result1);
792+
793+
Query query2 =
794+
query("coll")
795+
.filter(
796+
andFilters(
797+
filter("a", "in", Arrays.asList(2, 3)), filter("b", "array-contains", 7)));
798+
799+
DocumentSet result2 =
800+
expectFullCollectionScan(() -> runQuery(query2, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
801+
assertEquals(docSet(query2.comparator(), doc3), result2);
802+
803+
Query query3 =
804+
query("coll")
805+
.filter(
806+
orFilters(
807+
filter("a", "in", Arrays.asList(2, 3)),
808+
andFilters(filter("b", "array-contains", 3), filter("a", "==", 1))));
809+
DocumentSet result3 =
810+
expectFullCollectionScan(() -> runQuery(query3, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
811+
assertEquals(docSet(query3.comparator(), doc3, doc4, doc6), result3);
812+
813+
Query query4 =
814+
query("coll")
815+
.filter(
816+
andFilters(
817+
filter("a", "in", Arrays.asList(2, 3)),
818+
orFilters(filter("b", "array-contains", 7), filter("a", "==", 1))));
819+
DocumentSet result4 =
820+
expectFullCollectionScan(() -> runQuery(query4, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
821+
assertEquals(docSet(query4.comparator(), doc3), result4);
822+
}
823+
824+
@Test
825+
public void orderByEquality() throws Exception {
826+
MutableDocument doc1 = doc("coll/1", 1, map("a", 1, "b", Arrays.asList(0)));
827+
MutableDocument doc2 = doc("coll/2", 1, map("b", Arrays.asList(1)));
828+
MutableDocument doc3 = doc("coll/3", 1, map("a", 3, "b", Arrays.asList(2, 7), "c", 10));
829+
MutableDocument doc4 = doc("coll/4", 1, map("a", 1, "b", Arrays.asList(3, 7)));
830+
MutableDocument doc5 = doc("coll/5", 1, map("a", 1));
831+
MutableDocument doc6 = doc("coll/6", 1, map("a", 2, "c", 20));
832+
addDocument(doc1, doc2, doc3, doc4, doc5, doc6);
833+
834+
Query query1 = query("coll").filter(filter("a", "==", 1)).orderBy(orderBy("a"));
835+
DocumentSet result1 =
836+
expectFullCollectionScan(() -> runQuery(query1, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
837+
assertEquals(docSet(query1.comparator(), doc1, doc4, doc5), result1);
838+
839+
Query query2 =
840+
query("coll").filter(filter("a", "in", Arrays.asList(2, 3))).orderBy(orderBy("a"));
841+
DocumentSet result2 =
842+
expectFullCollectionScan(() -> runQuery(query2, MISSING_LAST_LIMBO_FREE_SNAPSHOT));
843+
assertEquals(docSet(query2.comparator(), doc6, doc3), result2);
844+
}
719845
}

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

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,4 +397,145 @@ public void queryWithMultipleInsOnDifferentFields() throws Exception {
397397
expectOptimizedCollectionScan(() -> runQuery(query3, SnapshotVersion.NONE));
398398
assertEquals(docSet(query3.comparator(), doc4), result3);
399399
}
400+
401+
@Test
402+
public void queryInWithArrayContainsAny() throws Exception {
403+
MutableDocument doc1 = doc("coll/1", 1, map("a", 1, "b", Arrays.asList(0)));
404+
MutableDocument doc2 = doc("coll/2", 1, map("b", Arrays.asList(1)));
405+
MutableDocument doc3 = doc("coll/3", 1, map("a", 3, "b", Arrays.asList(2, 7), "c", 10));
406+
MutableDocument doc4 = doc("coll/4", 1, map("a", 1, "b", Arrays.asList(3, 7)));
407+
MutableDocument doc5 = doc("coll/5", 1, map("a", 1));
408+
MutableDocument doc6 = doc("coll/6", 1, map("a", 2, "c", 20));
409+
addDocument(doc1, doc2, doc3, doc4, doc5, doc6);
410+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.ASCENDING));
411+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.DESCENDING));
412+
indexManager.addFieldIndex(fieldIndex("coll", "b", Kind.CONTAINS));
413+
indexManager.updateIndexEntries(docMap(doc1, doc2, doc3, doc4, doc5, doc6));
414+
indexManager.updateCollectionGroup("coll", IndexOffset.fromDocument(doc6));
415+
416+
Query query1 =
417+
query("coll")
418+
.filter(
419+
orFilters(
420+
filter("a", "in", Arrays.asList(2, 3)),
421+
filter("b", "array-contains-any", Arrays.asList(0, 7))));
422+
DocumentSet result1 =
423+
expectOptimizedCollectionScan(() -> runQuery(query1, SnapshotVersion.NONE));
424+
assertEquals(docSet(query1.comparator(), doc1, doc3, doc4, doc6), result1);
425+
426+
Query query2 =
427+
query("coll")
428+
.filter(
429+
andFilters(
430+
filter("a", "in", Arrays.asList(2, 3)),
431+
filter("b", "array-contains-any", Arrays.asList(0, 7))));
432+
433+
DocumentSet result2 =
434+
expectOptimizedCollectionScan(() -> runQuery(query2, SnapshotVersion.NONE));
435+
assertEquals(docSet(query2.comparator(), doc3), result2);
436+
437+
Query query3 =
438+
query("coll")
439+
.filter(
440+
orFilters(
441+
andFilters(filter("a", "in", Arrays.asList(2, 3)), filter("c", "==", 10)),
442+
filter("b", "array-contains-any", Arrays.asList(0, 7))));
443+
DocumentSet result3 =
444+
expectOptimizedCollectionScan(() -> runQuery(query3, SnapshotVersion.NONE));
445+
assertEquals(docSet(query3.comparator(), doc1, doc3, doc4), result3);
446+
447+
Query query4 =
448+
query("coll")
449+
.filter(
450+
andFilters(
451+
filter("a", "in", Arrays.asList(2, 3)),
452+
orFilters(
453+
filter("b", "array-contains-any", Arrays.asList(0, 7)),
454+
filter("c", "==", 20))));
455+
DocumentSet result4 =
456+
expectOptimizedCollectionScan(() -> runQuery(query4, SnapshotVersion.NONE));
457+
assertEquals(docSet(query4.comparator(), doc3, doc6), result4);
458+
}
459+
460+
@Test
461+
public void queryInWithArrayContains() throws Exception {
462+
MutableDocument doc1 = doc("coll/1", 1, map("a", 1, "b", Arrays.asList(0)));
463+
MutableDocument doc2 = doc("coll/2", 1, map("b", Arrays.asList(1)));
464+
MutableDocument doc3 = doc("coll/3", 1, map("a", 3, "b", Arrays.asList(2, 7), "c", 10));
465+
MutableDocument doc4 = doc("coll/4", 1, map("a", 1, "b", Arrays.asList(3, 7)));
466+
MutableDocument doc5 = doc("coll/5", 1, map("a", 1));
467+
MutableDocument doc6 = doc("coll/6", 1, map("a", 2, "c", 20));
468+
addDocument(doc1, doc2, doc3, doc4, doc5, doc6);
469+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.ASCENDING));
470+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.DESCENDING));
471+
indexManager.addFieldIndex(fieldIndex("coll", "b", Kind.CONTAINS));
472+
indexManager.updateIndexEntries(docMap(doc1, doc2, doc3, doc4, doc5, doc6));
473+
indexManager.updateCollectionGroup("coll", IndexOffset.fromDocument(doc6));
474+
475+
Query query1 =
476+
query("coll")
477+
.filter(
478+
orFilters(
479+
filter("a", "in", Arrays.asList(2, 3)), filter("b", "array-contains", 3)));
480+
DocumentSet result1 =
481+
expectOptimizedCollectionScan(() -> runQuery(query1, SnapshotVersion.NONE));
482+
assertEquals(docSet(query1.comparator(), doc3, doc4, doc6), result1);
483+
484+
Query query2 =
485+
query("coll")
486+
.filter(
487+
andFilters(
488+
filter("a", "in", Arrays.asList(2, 3)), filter("b", "array-contains", 7)));
489+
490+
DocumentSet result2 =
491+
expectOptimizedCollectionScan(() -> runQuery(query2, SnapshotVersion.NONE));
492+
assertEquals(docSet(query2.comparator(), doc3), result2);
493+
494+
Query query3 =
495+
query("coll")
496+
.filter(
497+
orFilters(
498+
filter("a", "in", Arrays.asList(2, 3)),
499+
andFilters(filter("b", "array-contains", 3), filter("a", "==", 1))));
500+
DocumentSet result3 =
501+
expectOptimizedCollectionScan(() -> runQuery(query3, SnapshotVersion.NONE));
502+
assertEquals(docSet(query3.comparator(), doc3, doc4, doc6), result3);
503+
504+
Query query4 =
505+
query("coll")
506+
.filter(
507+
andFilters(
508+
filter("a", "in", Arrays.asList(2, 3)),
509+
orFilters(filter("b", "array-contains", 7), filter("a", "==", 1))));
510+
DocumentSet result4 =
511+
expectOptimizedCollectionScan(() -> runQuery(query4, SnapshotVersion.NONE));
512+
assertEquals(docSet(query4.comparator(), doc3), result4);
513+
}
514+
515+
@Test
516+
public void orderByEquality() throws Exception {
517+
MutableDocument doc1 = doc("coll/1", 1, map("a", 1, "b", Arrays.asList(0)));
518+
MutableDocument doc2 = doc("coll/2", 1, map("b", Arrays.asList(1)));
519+
MutableDocument doc3 = doc("coll/3", 1, map("a", 3, "b", Arrays.asList(2, 7), "c", 10));
520+
MutableDocument doc4 = doc("coll/4", 1, map("a", 1, "b", Arrays.asList(3, 7)));
521+
MutableDocument doc5 = doc("coll/5", 1, map("a", 1));
522+
MutableDocument doc6 = doc("coll/6", 1, map("a", 2, "c", 20));
523+
addDocument(doc1, doc2, doc3, doc4, doc5, doc6);
524+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.ASCENDING));
525+
indexManager.addFieldIndex(fieldIndex("coll", "a", Kind.DESCENDING));
526+
indexManager.addFieldIndex(fieldIndex("coll", "b", Kind.CONTAINS));
527+
indexManager.updateIndexEntries(docMap(doc1, doc2, doc3, doc4, doc5, doc6));
528+
indexManager.updateCollectionGroup("coll", IndexOffset.fromDocument(doc6));
529+
530+
Query query1 = query("coll").filter(filter("a", "==", 1)).orderBy(orderBy("a"));
531+
DocumentSet result1 =
532+
expectOptimizedCollectionScan(() -> runQuery(query1, SnapshotVersion.NONE));
533+
assertEquals(docSet(query1.comparator(), doc1, doc4, doc5), result1);
534+
535+
Query query2 =
536+
query("coll").filter(filter("a", "in", Arrays.asList(2, 3))).orderBy(orderBy("a"));
537+
DocumentSet result2 =
538+
expectOptimizedCollectionScan(() -> runQuery(query2, SnapshotVersion.NONE));
539+
assertEquals(docSet(query2.comparator(), doc6, doc3), result2);
540+
}
400541
}

0 commit comments

Comments
 (0)