Skip to content

Commit 845b4a9

Browse files
Make LowerBound nullable
1 parent d27d5b6 commit 845b4a9

File tree

3 files changed

+27
-22
lines changed

3 files changed

+27
-22
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/core/Target.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,7 @@ public boolean hasLimit() {
123123
*/
124124
public List<Value> getArrayValues(FieldIndex fieldIndex) {
125125
// Go through all filters to find a value for the current field segment
126-
for (FieldIndex.Segment segment : fieldIndex) {
127-
if (!segment.getKind().equals(FieldIndex.Segment.Kind.ARRAYS)) {
128-
continue;
129-
}
130-
126+
for (FieldIndex.Segment segment : fieldIndex.getArraySegments()) {
131127
for (Filter filter : filters) {
132128
if (filter.getField().equals(segment.getFieldPath())) {
133129
FieldFilter fieldFilter = (FieldFilter) filter;
@@ -156,11 +152,7 @@ public List<Value> getArrayValues(FieldIndex fieldIndex) {
156152
boolean inclusive = true;
157153

158154
// Go through all filters to find a value for the current field segment
159-
for (FieldIndex.Segment segment : fieldIndex) {
160-
if (!segment.getKind().equals(FieldIndex.Segment.Kind.ORDERED)) {
161-
continue;
162-
}
163-
155+
for (FieldIndex.Segment segment : fieldIndex.getDirectionalSegments()) {
164156
Value segmentValue = null;
165157
boolean segmentInclusive = true;
166158

@@ -248,11 +240,7 @@ public List<Value> getArrayValues(FieldIndex fieldIndex) {
248240
List<Value> values = new ArrayList<>();
249241
boolean inclusive = true;
250242

251-
for (FieldIndex.Segment segment : fieldIndex) {
252-
if (!segment.getKind().equals(FieldIndex.Segment.Kind.ORDERED)) {
253-
continue;
254-
}
255-
243+
for (FieldIndex.Segment segment : fieldIndex.getDirectionalSegments()) {
256244
@Nullable Value segmentValue = null;
257245
boolean segmentInclusive = true;
258246

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ public Set<DocumentKey> getDocumentsMatchingTarget(Target target) {
223223
upperBound);
224224
}
225225

226-
Object[] lowerBoundValues = encodeBound(fieldIndex, target, lowerBound);
226+
Object[] lowerBoundValues = encodeDirectionalBound(fieldIndex, target, lowerBound);
227227
String lowerBoundOp = lowerBound != null ? (lowerBound.isInclusive() ? ">=" : ">") : null;
228-
Object[] upperBoundValues = encodeBound(fieldIndex, target, upperBound);
228+
Object[] upperBoundValues = encodeDirectionalBound(fieldIndex, target, upperBound);
229229
String upperBoundOp = upperBound != null ? (upperBound.isInclusive() ? "<=" : "<") : null;
230230

231231
SQLitePersistence.Query query =
@@ -386,7 +386,7 @@ private Object encodeDocumentValues(List<Value> values) {
386386
* Encodes the given field values according to the specification in {@code target}. For IN and
387387
* ArrayContainsAny queries, a list of possible values is returned.
388388
*/
389-
private @Nullable Object[] encodeBound(
389+
private @Nullable Object[] encodeDirectionalBound(
390390
FieldIndex fieldIndex, Target target, @Nullable Bound bound) {
391391
if (bound == null) {
392392
return null;
@@ -395,10 +395,7 @@ private Object encodeDocumentValues(List<Value> values) {
395395
encoders.add(new IndexByteEncoder());
396396

397397
int i = 0;
398-
for (FieldIndex.Segment segment : fieldIndex) { // get ordered segments, get array segments
399-
if (!segment.getKind().equals(FieldIndex.Segment.Kind.ORDERED)) {
400-
continue;
401-
}
398+
for (FieldIndex.Segment segment : fieldIndex.getDirectionalSegments()) {
402399
Value value = bound.getPosition().get(i);
403400
for (IndexByteEncoder encoder : encoders) {
404401
if (isMultiValueFilter(target, segment.getFieldPath())

firebase-firestore/src/main/java/com/google/firebase/firestore/model/FieldIndex.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,26 @@ public Iterator<Segment> iterator() {
110110
return segments.iterator();
111111
}
112112

113+
public Iterable<Segment> getDirectionalSegments() {
114+
List<Segment> filteredSegments = new ArrayList<>();
115+
for (Segment segment : segments) {
116+
if (segment.getKind().equals(Segment.Kind.ORDERED)) {
117+
filteredSegments.add(segment);
118+
}
119+
}
120+
return filteredSegments;
121+
}
122+
123+
public Iterable<Segment> getArraySegments() {
124+
List<Segment> filteredSegments = new ArrayList<>();
125+
for (Segment segment : segments) {
126+
if (segment.getKind().equals(Segment.Kind.ARRAYS)) {
127+
filteredSegments.add(segment);
128+
}
129+
}
130+
return filteredSegments;
131+
}
132+
113133
/** Returns a new field index with additional index segment. */
114134
public FieldIndex withAddedField(FieldPath fieldPath, Segment.Kind kind) {
115135
List<Segment> newSegments = new ArrayList<>(segments);

0 commit comments

Comments
 (0)