Skip to content

Commit a18b631

Browse files
committed
Add tests and fix bugs for BuildTargetIndex
1 parent ad7fc61 commit a18b631

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

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

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,163 @@ public void withMultipleNotIn() {
449449
validateServesTarget(q, "a", FieldIndex.Segment.Kind.ASCENDING);
450450
}
451451

452+
@Test
453+
public void buildTargetIndex() {
454+
Query q =
455+
query("collId")
456+
.filter(filter("a", "==", 1))
457+
.filter(filter("b", "==", 2))
458+
.orderBy(orderBy("__name__", "desc"));
459+
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
460+
FieldIndex expectedIndex = targetIndexMatcher.BuildTargetIndex();
461+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
462+
463+
q = query("collId").orderBy(orderBy("a"));
464+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
465+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
466+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
467+
468+
q = query("collId").orderBy(orderBy("a")).orderBy(orderBy("b"));
469+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
470+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
471+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
472+
473+
q = query("collId").filter(filter("a", "array-contains", "a")).orderBy(orderBy("b"));
474+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
475+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
476+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
477+
478+
q = query("collId").orderBy(orderBy("b"));
479+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
480+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
481+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
482+
483+
q = query("collId").orderBy(orderBy("a"));
484+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
485+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
486+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
487+
488+
q = query("collId").filter(filter("a", ">", 1)).filter(filter("a", "<", 10));
489+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
490+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
491+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
492+
493+
q = query("collId").filter(filter("a", "in", Arrays.asList(1, 2))).filter(filter("b", "==", 5));
494+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
495+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
496+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
497+
498+
q = query("collId").filter(filter("value", "array-contains", "foo")).orderBy(orderBy("value"));
499+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
500+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
501+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
502+
503+
q =
504+
query("collId")
505+
.filter(filter("a", "array-contains", "a"))
506+
.filter(filter("a", ">", "b"))
507+
.orderBy(orderBy("a", "asc"));
508+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
509+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
510+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
511+
512+
q = query("collId").filter(filter("a", "==", 1)).orderBy(orderBy("__name__", "desc"));
513+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
514+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
515+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
516+
517+
q = query("collId").filter(filter("a1", "==", "a")).filter(filter("a2", "==", "b"));
518+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
519+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
520+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
521+
522+
q =
523+
query("collId")
524+
.filter(filter("equality1", "==", "a"))
525+
.filter(filter("equality2", "==", "b"))
526+
.filter(filter("inequality", ">=", "c"));
527+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
528+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
529+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
530+
531+
q =
532+
query("collId")
533+
.filter(filter("equality1", "==", "a"))
534+
.filter(filter("inequality", ">=", "c"))
535+
.filter(filter("equality2", "==", "b"));
536+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
537+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
538+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
539+
540+
q = query("collId").orderBy(orderBy("a"));
541+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
542+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
543+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
544+
545+
q = query("collId").orderBy(orderBy("a", "desc"));
546+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
547+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
548+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
549+
550+
q = query("collId").orderBy(orderBy("a")).orderBy(orderBy("__name__"));
551+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
552+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
553+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
554+
555+
q = query("collId").filter(filter("a", "!=", 1));
556+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
557+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
558+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
559+
560+
q = query("collId").filter(filter("a", "!=", 1)).orderBy(orderBy("a")).orderBy(orderBy("b"));
561+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
562+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
563+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
564+
565+
q = query("collId").filter(filter("a", "==", "a")).filter(filter("b", ">", "b"));
566+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
567+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
568+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
569+
570+
q =
571+
query("collId")
572+
.filter(filter("a1", "==", "a"))
573+
.filter(filter("a2", ">", "b"))
574+
.orderBy(orderBy("a2", "asc"));
575+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
576+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
577+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
578+
579+
q =
580+
query("collId")
581+
.filter(filter("a", ">=", 1))
582+
.filter(filter("a", "==", 5))
583+
.filter(filter("a", "<=", 10));
584+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
585+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
586+
// assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
587+
588+
q =
589+
query("collId")
590+
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
591+
.filter(filter("a", ">=", 2));
592+
targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
593+
expectedIndex = targetIndexMatcher.BuildTargetIndex();
594+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
595+
}
596+
597+
@Test
598+
public void failedTest() {
599+
Query q =
600+
query("collId")
601+
.filter(filter("a", ">=", 1))
602+
.filter(filter("a", "==", 5))
603+
.filter(filter("a", "<=", 10));
604+
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(q.toTarget());
605+
FieldIndex expectedIndex = targetIndexMatcher.BuildTargetIndex();
606+
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
607+
}
608+
452609
@Test
453610
public void withMultipleOrderBys() {
454611
Query q =

0 commit comments

Comments
 (0)