22
22
import static com .google .firebase .firestore .testutil .TestUtil .path ;
23
23
import static com .google .firebase .firestore .testutil .TestUtil .query ;
24
24
import static org .junit .Assert .assertFalse ;
25
+ import static org .junit .Assert .assertNotNull ;
26
+ import static org .junit .Assert .assertNull ;
25
27
import static org .junit .Assert .assertTrue ;
26
28
27
29
import com .google .firebase .firestore .core .Query ;
@@ -645,41 +647,41 @@ private void validateDoesNotServeTarget(
645
647
@ Test
646
648
public void testBuildTargetIndexWithQueriesWithEqualities () {
647
649
for (Query query : queriesWithEqualities ) {
648
- validateBuildTargetIndexCreateFullMatchIndex (query );
650
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
649
651
}
650
652
}
651
653
652
654
@ Test
653
655
public void testBuildTargetIndexWithQueriesWithInequalities () {
654
656
for (Query query : queriesWithInequalities ) {
655
- validateBuildTargetIndexCreateFullMatchIndex (query );
657
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
656
658
}
657
659
}
658
660
659
661
@ Test
660
662
public void testBuildTargetIndexWithQueriesWithArrayContains () {
661
663
for (Query query : queriesWithArrayContains ) {
662
- validateBuildTargetIndexCreateFullMatchIndex (query );
664
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
663
665
}
664
666
}
665
667
666
668
@ Test
667
669
public void testBuildTargetIndexWithQueriesWithOrderBys () {
668
670
for (Query query : queriesWithOrderBys ) {
669
- validateBuildTargetIndexCreateFullMatchIndex (query );
671
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
670
672
}
671
673
}
672
674
673
675
@ Test
674
676
public void testBuildTargetIndexWithInequalityUsesSingleFieldIndex () {
675
677
Query query = query ("collId" ).filter (filter ("a" , ">" , 1 )).filter (filter ("a" , "<" , 10 ));
676
- validateBuildTargetIndexCreateFullMatchIndex (query );
678
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
677
679
}
678
680
679
681
@ Test
680
682
public void testBuildTargetIndexWithCollection () {
681
683
Query query = query ("collId" );
682
- validateBuildTargetIndexCreateFullMatchIndex (query );
684
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
683
685
}
684
686
685
687
@ Test
@@ -689,19 +691,19 @@ public void testBuildTargetIndexWithArrayContainsAndOrderBy() {
689
691
.filter (filter ("a" , "array-contains" , "a" ))
690
692
.filter (filter ("a" , ">" , "b" ))
691
693
.orderBy (orderBy ("a" , "asc" ));
692
- validateBuildTargetIndexCreateFullMatchIndex (query );
694
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
693
695
}
694
696
695
697
@ Test
696
698
public void testBuildTargetIndexWithEqualityAndDescendingOrder () {
697
699
Query query = query ("collId" ).filter (filter ("a" , "==" , 1 )).orderBy (orderBy ("__name__" , "desc" ));
698
- validateBuildTargetIndexCreateFullMatchIndex (query );
700
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
699
701
}
700
702
701
703
@ Test
702
704
public void testBuildTargetIndexWithMultipleEqualities () {
703
705
Query query = query ("collId" ).filter (filter ("a1" , "==" , "a" )).filter (filter ("a2" , "==" , "b" ));
704
- validateBuildTargetIndexCreateFullMatchIndex (query );
706
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
705
707
}
706
708
707
709
@ Test
@@ -711,36 +713,36 @@ public void testBuildTargetIndexWithMultipleEqualitiesAndInequality() {
711
713
.filter (filter ("equality1" , "==" , "a" ))
712
714
.filter (filter ("equality2" , "==" , "b" ))
713
715
.filter (filter ("inequality" , ">=" , "c" ));
714
- validateBuildTargetIndexCreateFullMatchIndex (query );
716
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
715
717
query =
716
718
query ("collId" )
717
719
.filter (filter ("equality1" , "==" , "a" ))
718
720
.filter (filter ("inequality" , ">=" , "c" ))
719
721
.filter (filter ("equality2" , "==" , "b" ));
720
- validateBuildTargetIndexCreateFullMatchIndex (query );
722
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
721
723
}
722
724
723
725
@ Test
724
726
public void testBuildTargetIndexWithMultipleFilters () {
725
727
Query query = query ("collId" ).filter (filter ("a" , "==" , "a" )).filter (filter ("b" , ">" , "b" ));
726
- validateBuildTargetIndexCreateFullMatchIndex (query );
728
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
727
729
query =
728
730
query ("collId" )
729
731
.filter (filter ("a1" , "==" , "a" ))
730
732
.filter (filter ("a2" , ">" , "b" ))
731
733
.orderBy (orderBy ("a2" , "asc" ));
732
- validateBuildTargetIndexCreateFullMatchIndex (query );
734
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
733
735
query =
734
736
query ("collId" )
735
737
.filter (filter ("a" , ">=" , 1 ))
736
738
.filter (filter ("a" , "==" , 5 ))
737
739
.filter (filter ("a" , "<=" , 10 ));
738
- validateBuildTargetIndexCreateFullMatchIndex (query );
740
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
739
741
query =
740
742
query ("collId" )
741
743
.filter (filter ("a" , "not-in" , Arrays .asList (1 , 2 , 3 )))
742
744
.filter (filter ("a" , ">=" , 2 ));
743
- validateBuildTargetIndexCreateFullMatchIndex (query );
745
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
744
746
}
745
747
746
748
@ Test
@@ -750,13 +752,13 @@ public void testBuildTargetIndexWithMultipleOrderBys() {
750
752
.orderBy (orderBy ("fff" ))
751
753
.orderBy (orderBy ("bar" , "desc" ))
752
754
.orderBy (orderBy ("__name__" ));
753
- validateBuildTargetIndexCreateFullMatchIndex (query );
755
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
754
756
query =
755
757
query ("collId" )
756
758
.orderBy (orderBy ("foo" ))
757
759
.orderBy (orderBy ("bar" ))
758
760
.orderBy (orderBy ("__name__" , "desc" ));
759
- validateBuildTargetIndexCreateFullMatchIndex (query );
761
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
760
762
}
761
763
762
764
@ Test
@@ -765,7 +767,7 @@ public void testBuildTargetIndexWithInAndNotIn() {
765
767
query ("collId" )
766
768
.filter (filter ("a" , "not-in" , Arrays .asList (1 , 2 , 3 )))
767
769
.filter (filter ("b" , "in" , Arrays .asList (1 , 2 , 3 )));
768
- validateBuildTargetIndexCreateFullMatchIndex (query );
770
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
769
771
}
770
772
771
773
@ Test
@@ -775,15 +777,15 @@ public void testBuildTargetIndexWithEqualityAndDifferentOrderBy() {
775
777
.filter (filter ("foo" , "==" , "" ))
776
778
.filter (filter ("bar" , "==" , "" ))
777
779
.orderBy (orderBy ("qux" ));
778
- validateBuildTargetIndexCreateFullMatchIndex (query );
780
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
779
781
query =
780
782
query ("collId" )
781
783
.filter (filter ("aaa" , "==" , "" ))
782
784
.filter (filter ("qqq" , "==" , "" ))
783
785
.filter (filter ("ccc" , "==" , "" ))
784
786
.orderBy (orderBy ("fff" , "desc" ))
785
787
.orderBy (orderBy ("bbb" ));
786
- validateBuildTargetIndexCreateFullMatchIndex (query );
788
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
787
789
}
788
790
789
791
@ Test
@@ -792,7 +794,7 @@ public void testBuildTargetIndexWithEqualsAndNotIn() {
792
794
query ("collId" )
793
795
.filter (filter ("a" , "==" , 1 ))
794
796
.filter (filter ("b" , "not-in" , Arrays .asList (1 , 2 , 3 )));
795
- validateBuildTargetIndexCreateFullMatchIndex (query );
797
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
796
798
}
797
799
798
800
@ Test
@@ -802,20 +804,32 @@ public void testBuildTargetIndexWithInAndOrderBy() {
802
804
.filter (filter ("a" , "not-in" , Arrays .asList (1 , 2 , 3 )))
803
805
.orderBy (orderBy ("a" ))
804
806
.orderBy (orderBy ("b" ));
805
- validateBuildTargetIndexCreateFullMatchIndex (query );
807
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
806
808
}
807
809
808
810
@ Test
809
811
public void testBuildTargetIndexWithInAndOrderBySameField () {
810
812
Query query =
811
813
query ("collId" ).filter (filter ("a" , "in" , Arrays .asList (1 , 2 , 3 ))).orderBy (orderBy ("a" ));
812
- validateBuildTargetIndexCreateFullMatchIndex (query );
814
+ validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (query );
813
815
}
814
816
815
- private void validateBuildTargetIndexCreateFullMatchIndex (Query query ) {
817
+ @ Test
818
+ public void testBuildTargetIndexReturnsNullForMultipleInequality () {
819
+ Query query = query ("collId" ).filter (filter ("a" , ">=" , 1 )).filter (filter ("b" , "<=" , 10 ));
820
+ Target target = query .toTarget ();
821
+ TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher (target );
822
+ assertTrue (targetIndexMatcher .hasMultipleInequality ());
823
+ FieldIndex expectedIndex = targetIndexMatcher .buildTargetIndex ();
824
+ assertNull (expectedIndex );
825
+ }
826
+
827
+ private void validateBuildTargetIndexCreateFullMatchIndexForSingleInequality (Query query ) {
816
828
Target target = query .toTarget ();
817
829
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher (target );
830
+ assertFalse (targetIndexMatcher .hasMultipleInequality ());
818
831
FieldIndex expectedIndex = targetIndexMatcher .buildTargetIndex ();
832
+ assertNotNull (expectedIndex );
819
833
assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
820
834
// Check the index created is a FULL MATCH index
821
835
assertTrue (expectedIndex .getSegments ().size () >= target .getSegmentCount ());
0 commit comments