Skip to content

Commit 9f62c29

Browse files
committed
address feedbacks
1 parent 71bfc77 commit 9f62c29

File tree

4 files changed

+45
-30
lines changed

4 files changed

+45
-30
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/local/IndexManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ enum IndexType {
7373
* <p>Values for this index are persisted asynchronously. The index will only be used for query
7474
* execution once values are persisted.
7575
*/
76-
void addFieldIndex(@Nullable FieldIndex index);
76+
void addFieldIndex(FieldIndex index);
7777

7878
/** Removes the given field index and deletes all index values. */
7979
void deleteFieldIndex(FieldIndex index);

firebase-firestore/src/main/java/com/google/firebase/firestore/local/MemoryIndexManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public List<ResourcePath> getCollectionParents(String collectionId) {
5151
}
5252

5353
@Override
54-
public void addFieldIndex(@Nullable FieldIndex index) {
54+
public void addFieldIndex(FieldIndex index) {
5555
// Field indices are not supported with memory persistence.
5656
}
5757

firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,9 @@ public List<ResourcePath> getCollectionParents(String collectionId) {
201201
}
202202

203203
@Override
204-
public void addFieldIndex(@Nullable FieldIndex index) {
204+
public void addFieldIndex(FieldIndex index) {
205205
hardAssert(started, "IndexManager not started");
206206

207-
if (index == null) return;
208-
209207
int nextIndexId = memoizedMaxIndexId + 1;
210208
index =
211209
FieldIndex.create(
@@ -253,7 +251,10 @@ public void createTargetIndexes(Target target) {
253251
IndexType type = getIndexType(subTarget);
254252
if (type == IndexType.NONE || type == IndexType.PARTIAL) {
255253
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(subTarget);
256-
addFieldIndex(targetIndexMatcher.buildTargetIndex());
254+
FieldIndex fieldIndex = targetIndexMatcher.buildTargetIndex();
255+
if (fieldIndex != null) {
256+
addFieldIndex(fieldIndex);
257+
}
257258
}
258259
}
259260
}

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

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import static com.google.firebase.firestore.testutil.TestUtil.path;
2323
import static com.google.firebase.firestore.testutil.TestUtil.query;
2424
import static org.junit.Assert.assertFalse;
25+
import static org.junit.Assert.assertNotNull;
26+
import static org.junit.Assert.assertNull;
2527
import static org.junit.Assert.assertTrue;
2628

2729
import com.google.firebase.firestore.core.Query;
@@ -645,41 +647,41 @@ private void validateDoesNotServeTarget(
645647
@Test
646648
public void testBuildTargetIndexWithQueriesWithEqualities() {
647649
for (Query query : queriesWithEqualities) {
648-
validateBuildTargetIndexCreateFullMatchIndex(query);
650+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
649651
}
650652
}
651653

652654
@Test
653655
public void testBuildTargetIndexWithQueriesWithInequalities() {
654656
for (Query query : queriesWithInequalities) {
655-
validateBuildTargetIndexCreateFullMatchIndex(query);
657+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
656658
}
657659
}
658660

659661
@Test
660662
public void testBuildTargetIndexWithQueriesWithArrayContains() {
661663
for (Query query : queriesWithArrayContains) {
662-
validateBuildTargetIndexCreateFullMatchIndex(query);
664+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
663665
}
664666
}
665667

666668
@Test
667669
public void testBuildTargetIndexWithQueriesWithOrderBys() {
668670
for (Query query : queriesWithOrderBys) {
669-
validateBuildTargetIndexCreateFullMatchIndex(query);
671+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
670672
}
671673
}
672674

673675
@Test
674676
public void testBuildTargetIndexWithInequalityUsesSingleFieldIndex() {
675677
Query query = query("collId").filter(filter("a", ">", 1)).filter(filter("a", "<", 10));
676-
validateBuildTargetIndexCreateFullMatchIndex(query);
678+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
677679
}
678680

679681
@Test
680682
public void testBuildTargetIndexWithCollection() {
681683
Query query = query("collId");
682-
validateBuildTargetIndexCreateFullMatchIndex(query);
684+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
683685
}
684686

685687
@Test
@@ -689,19 +691,19 @@ public void testBuildTargetIndexWithArrayContainsAndOrderBy() {
689691
.filter(filter("a", "array-contains", "a"))
690692
.filter(filter("a", ">", "b"))
691693
.orderBy(orderBy("a", "asc"));
692-
validateBuildTargetIndexCreateFullMatchIndex(query);
694+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
693695
}
694696

695697
@Test
696698
public void testBuildTargetIndexWithEqualityAndDescendingOrder() {
697699
Query query = query("collId").filter(filter("a", "==", 1)).orderBy(orderBy("__name__", "desc"));
698-
validateBuildTargetIndexCreateFullMatchIndex(query);
700+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
699701
}
700702

701703
@Test
702704
public void testBuildTargetIndexWithMultipleEqualities() {
703705
Query query = query("collId").filter(filter("a1", "==", "a")).filter(filter("a2", "==", "b"));
704-
validateBuildTargetIndexCreateFullMatchIndex(query);
706+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
705707
}
706708

707709
@Test
@@ -711,36 +713,36 @@ public void testBuildTargetIndexWithMultipleEqualitiesAndInequality() {
711713
.filter(filter("equality1", "==", "a"))
712714
.filter(filter("equality2", "==", "b"))
713715
.filter(filter("inequality", ">=", "c"));
714-
validateBuildTargetIndexCreateFullMatchIndex(query);
716+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
715717
query =
716718
query("collId")
717719
.filter(filter("equality1", "==", "a"))
718720
.filter(filter("inequality", ">=", "c"))
719721
.filter(filter("equality2", "==", "b"));
720-
validateBuildTargetIndexCreateFullMatchIndex(query);
722+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
721723
}
722724

723725
@Test
724726
public void testBuildTargetIndexWithMultipleFilters() {
725727
Query query = query("collId").filter(filter("a", "==", "a")).filter(filter("b", ">", "b"));
726-
validateBuildTargetIndexCreateFullMatchIndex(query);
728+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
727729
query =
728730
query("collId")
729731
.filter(filter("a1", "==", "a"))
730732
.filter(filter("a2", ">", "b"))
731733
.orderBy(orderBy("a2", "asc"));
732-
validateBuildTargetIndexCreateFullMatchIndex(query);
734+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
733735
query =
734736
query("collId")
735737
.filter(filter("a", ">=", 1))
736738
.filter(filter("a", "==", 5))
737739
.filter(filter("a", "<=", 10));
738-
validateBuildTargetIndexCreateFullMatchIndex(query);
740+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
739741
query =
740742
query("collId")
741743
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
742744
.filter(filter("a", ">=", 2));
743-
validateBuildTargetIndexCreateFullMatchIndex(query);
745+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
744746
}
745747

746748
@Test
@@ -750,13 +752,13 @@ public void testBuildTargetIndexWithMultipleOrderBys() {
750752
.orderBy(orderBy("fff"))
751753
.orderBy(orderBy("bar", "desc"))
752754
.orderBy(orderBy("__name__"));
753-
validateBuildTargetIndexCreateFullMatchIndex(query);
755+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
754756
query =
755757
query("collId")
756758
.orderBy(orderBy("foo"))
757759
.orderBy(orderBy("bar"))
758760
.orderBy(orderBy("__name__", "desc"));
759-
validateBuildTargetIndexCreateFullMatchIndex(query);
761+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
760762
}
761763

762764
@Test
@@ -765,7 +767,7 @@ public void testBuildTargetIndexWithInAndNotIn() {
765767
query("collId")
766768
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
767769
.filter(filter("b", "in", Arrays.asList(1, 2, 3)));
768-
validateBuildTargetIndexCreateFullMatchIndex(query);
770+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
769771
}
770772

771773
@Test
@@ -775,15 +777,15 @@ public void testBuildTargetIndexWithEqualityAndDifferentOrderBy() {
775777
.filter(filter("foo", "==", ""))
776778
.filter(filter("bar", "==", ""))
777779
.orderBy(orderBy("qux"));
778-
validateBuildTargetIndexCreateFullMatchIndex(query);
780+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
779781
query =
780782
query("collId")
781783
.filter(filter("aaa", "==", ""))
782784
.filter(filter("qqq", "==", ""))
783785
.filter(filter("ccc", "==", ""))
784786
.orderBy(orderBy("fff", "desc"))
785787
.orderBy(orderBy("bbb"));
786-
validateBuildTargetIndexCreateFullMatchIndex(query);
788+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
787789
}
788790

789791
@Test
@@ -792,7 +794,7 @@ public void testBuildTargetIndexWithEqualsAndNotIn() {
792794
query("collId")
793795
.filter(filter("a", "==", 1))
794796
.filter(filter("b", "not-in", Arrays.asList(1, 2, 3)));
795-
validateBuildTargetIndexCreateFullMatchIndex(query);
797+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
796798
}
797799

798800
@Test
@@ -802,20 +804,32 @@ public void testBuildTargetIndexWithInAndOrderBy() {
802804
.filter(filter("a", "not-in", Arrays.asList(1, 2, 3)))
803805
.orderBy(orderBy("a"))
804806
.orderBy(orderBy("b"));
805-
validateBuildTargetIndexCreateFullMatchIndex(query);
807+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
806808
}
807809

808810
@Test
809811
public void testBuildTargetIndexWithInAndOrderBySameField() {
810812
Query query =
811813
query("collId").filter(filter("a", "in", Arrays.asList(1, 2, 3))).orderBy(orderBy("a"));
812-
validateBuildTargetIndexCreateFullMatchIndex(query);
814+
validateBuildTargetIndexCreateFullMatchIndexForSingleInequality(query);
813815
}
814816

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) {
816828
Target target = query.toTarget();
817829
TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher(target);
830+
assertFalse(targetIndexMatcher.hasMultipleInequality());
818831
FieldIndex expectedIndex = targetIndexMatcher.buildTargetIndex();
832+
assertNotNull(expectedIndex);
819833
assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
820834
// Check the index created is a FULL MATCH index
821835
assertTrue(expectedIndex.getSegments().size() >= target.getSegmentCount());

0 commit comments

Comments
 (0)