From 12fca47c8a0d3a847606b82829c06fdedb6f0551 Mon Sep 17 00:00:00 2001 From: cherylEnkidu Date: Wed, 2 Nov 2022 13:30:35 -0400 Subject: [PATCH 1/2] Early return in getDocumentsMatchingTarget --- .../firebase/firestore/local/SQLiteIndexManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java b/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java index f5e5496a4c6..737891ec627 100644 --- a/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java +++ b/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java @@ -23,6 +23,7 @@ import static java.lang.Math.max; import android.text.TextUtils; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.firebase.Timestamp; import com.google.firebase.database.collection.ImmutableSortedMap; @@ -57,6 +58,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.PriorityQueue; import java.util.Queue; import java.util.SortedSet; @@ -476,13 +478,17 @@ public List getDocumentsMatchingTarget(Target target) { List subQueries = new ArrayList<>(); List bindings = new ArrayList<>(); + List subTargets = getSubTargets(target); - for (Target subTarget : getSubTargets(target)) { + for (Target subTarget : subTargets) { FieldIndex fieldIndex = getFieldIndex(subTarget); if (fieldIndex == null) { return null; } + } + for (Target subTarget : subTargets) { + @NonNull FieldIndex fieldIndex = Objects.requireNonNull(getFieldIndex(subTarget)); @Nullable List arrayValues = subTarget.getArrayValues(fieldIndex); @Nullable Collection notInValues = subTarget.getNotInValues(fieldIndex); Bound lowerBound = subTarget.getLowerBound(fieldIndex); From 4fd9d96144137831743c831bcfd682e2e313e3ae Mon Sep 17 00:00:00 2001 From: cherylEnkidu Date: Wed, 2 Nov 2022 16:20:01 -0400 Subject: [PATCH 2/2] Address Feedback --- .../firebase/firestore/local/SQLiteIndexManager.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java b/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java index 737891ec627..8f0d79f4ecd 100644 --- a/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java +++ b/firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteIndexManager.java @@ -23,6 +23,7 @@ import static java.lang.Math.max; import android.text.TextUtils; +import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.firebase.Timestamp; @@ -58,7 +59,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.PriorityQueue; import java.util.Queue; import java.util.SortedSet; @@ -478,17 +478,19 @@ public List getDocumentsMatchingTarget(Target target) { List subQueries = new ArrayList<>(); List bindings = new ArrayList<>(); - List subTargets = getSubTargets(target); + List> indexes = new ArrayList<>(); - for (Target subTarget : subTargets) { + for (Target subTarget : getSubTargets(target)) { FieldIndex fieldIndex = getFieldIndex(subTarget); if (fieldIndex == null) { return null; } + indexes.add(Pair.create(subTarget, fieldIndex)); } - for (Target subTarget : subTargets) { - @NonNull FieldIndex fieldIndex = Objects.requireNonNull(getFieldIndex(subTarget)); + for (Pair pair : indexes) { + Target subTarget = pair.first; + @NonNull FieldIndex fieldIndex = pair.second; @Nullable List arrayValues = subTarget.getArrayValues(fieldIndex); @Nullable Collection notInValues = subTarget.getNotInValues(fieldIndex); Bound lowerBound = subTarget.getLowerBound(fieldIndex);