Skip to content

Commit e471819

Browse files
committed
Create firestore/Filter.java and remove firestore/core/Filter.java.
1 parent ba0e6c4 commit e471819

File tree

11 files changed

+71
-64
lines changed

11 files changed

+71
-64
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/core/Filter.java renamed to firebase-firestore/src/main/java/com/google/firebase/firestore/Filter.java

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2018 Google LLC
1+
// Copyright 2021 Google LLC
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -12,42 +12,17 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package com.google.firebase.firestore.core;
15+
package com.google.firebase.firestore;
1616

17+
import androidx.annotation.NonNull;
18+
import androidx.annotation.RestrictTo;
1719
import com.google.firebase.firestore.model.Document;
18-
import com.google.firebase.firestore.model.FieldPath;
1920

20-
/** Interface used for all query filters. */
21+
/** @hide */
22+
@RestrictTo(RestrictTo.Scope.LIBRARY)
2123
public abstract class Filter {
22-
public enum Operator {
23-
LESS_THAN("<"),
24-
LESS_THAN_OR_EQUAL("<="),
25-
EQUAL("=="),
26-
NOT_EQUAL("!="),
27-
GREATER_THAN(">"),
28-
GREATER_THAN_OR_EQUAL(">="),
29-
ARRAY_CONTAINS("array_contains"),
30-
ARRAY_CONTAINS_ANY("array_contains_any"),
31-
IN("in"),
32-
NOT_IN("not_in");
33-
34-
private final String text;
35-
36-
Operator(String text) {
37-
this.text = text;
38-
}
39-
40-
@Override
41-
public String toString() {
42-
return text;
43-
}
44-
}
45-
46-
/** Returns the field the Filter operates over. */
47-
public abstract FieldPath getField();
48-
4924
/** Returns true if a document matches the filter. */
50-
public abstract boolean matches(Document doc);
25+
public abstract boolean matches(@NonNull Document doc);
5126

5227
/** A unique ID identifying the filter; used when serializing queries. */
5328
public abstract String getCanonicalId();

firebase-firestore/src/main/java/com/google/firebase/firestore/Query.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030
import com.google.firebase.firestore.core.Bound;
3131
import com.google.firebase.firestore.core.EventManager.ListenOptions;
3232
import com.google.firebase.firestore.core.FieldFilter;
33-
import com.google.firebase.firestore.core.Filter;
34-
import com.google.firebase.firestore.core.Filter.Operator;
33+
import com.google.firebase.firestore.core.FieldFilter.Operator;
3534
import com.google.firebase.firestore.core.ListenerRegistrationImpl;
3635
import com.google.firebase.firestore.core.OrderBy;
3736
import com.google.firebase.firestore.core.QueryListener;
@@ -554,7 +553,7 @@ private void validateNewFilter(Filter filter) {
554553
Operator filterOp = fieldFilter.getOperator();
555554
if (fieldFilter.isInequality()) {
556555
com.google.firebase.firestore.model.FieldPath existingInequality = query.inequalityField();
557-
com.google.firebase.firestore.model.FieldPath newInequality = filter.getField();
556+
com.google.firebase.firestore.model.FieldPath newInequality = fieldFilter.getField();
558557

559558
if (existingInequality != null && !existingInequality.equals(newInequality)) {
560559
throw new IllegalArgumentException(

firebase-firestore/src/main/java/com/google/firebase/firestore/bundle/BundleSerializer.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
import android.util.Base64;
1818
import androidx.annotation.Nullable;
1919
import com.google.firebase.Timestamp;
20+
import com.google.firebase.firestore.Filter;
2021
import com.google.firebase.firestore.core.Bound;
2122
import com.google.firebase.firestore.core.FieldFilter;
22-
import com.google.firebase.firestore.core.Filter;
2323
import com.google.firebase.firestore.core.OrderBy;
2424
import com.google.firebase.firestore.core.Query;
2525
import com.google.firebase.firestore.core.Target;
@@ -432,16 +432,17 @@ private void decodeUnaryFilter(List<Filter> result, JSONObject unaryFilter) thro
432432

433433
switch (operator) {
434434
case "IS_NAN":
435-
result.add(FieldFilter.create(fieldPath, Filter.Operator.EQUAL, Values.NAN_VALUE));
435+
result.add(FieldFilter.create(fieldPath, FieldFilter.Operator.EQUAL, Values.NAN_VALUE));
436436
break;
437437
case "IS_NULL":
438-
result.add(FieldFilter.create(fieldPath, Filter.Operator.EQUAL, Values.NULL_VALUE));
438+
result.add(FieldFilter.create(fieldPath, FieldFilter.Operator.EQUAL, Values.NULL_VALUE));
439439
break;
440440
case "IS_NOT_NAN":
441-
result.add(FieldFilter.create(fieldPath, Filter.Operator.NOT_EQUAL, Values.NAN_VALUE));
441+
result.add(FieldFilter.create(fieldPath, FieldFilter.Operator.NOT_EQUAL, Values.NAN_VALUE));
442442
break;
443443
case "IS_NOT_NULL":
444-
result.add(FieldFilter.create(fieldPath, Filter.Operator.NOT_EQUAL, Values.NULL_VALUE));
444+
result.add(
445+
FieldFilter.create(fieldPath, FieldFilter.Operator.NOT_EQUAL, Values.NULL_VALUE));
445446
break;
446447
default:
447448
throw new IllegalArgumentException("Unexpected unary filter: " + operator);

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import static com.google.firebase.firestore.util.Assert.hardAssert;
1818

19+
import com.google.firebase.firestore.Filter;
1920
import com.google.firebase.firestore.model.Document;
2021
import com.google.firebase.firestore.model.FieldPath;
2122
import com.google.firebase.firestore.model.Values;
@@ -25,6 +26,30 @@
2526

2627
/** Represents a filter to be applied to query. */
2728
public class FieldFilter extends Filter {
29+
public enum Operator {
30+
LESS_THAN("<"),
31+
LESS_THAN_OR_EQUAL("<="),
32+
EQUAL("=="),
33+
NOT_EQUAL("!="),
34+
GREATER_THAN(">"),
35+
GREATER_THAN_OR_EQUAL(">="),
36+
ARRAY_CONTAINS("array_contains"),
37+
ARRAY_CONTAINS_ANY("array_contains_any"),
38+
IN("in"),
39+
NOT_IN("not_in");
40+
41+
private final String text;
42+
43+
Operator(String text) {
44+
this.text = text;
45+
}
46+
47+
@Override
48+
public String toString() {
49+
return text;
50+
}
51+
}
52+
2853
private final Operator operator;
2954

3055
private final Value value;
@@ -45,7 +70,6 @@ public Operator getOperator() {
4570
return operator;
4671
}
4772

48-
@Override
4973
public FieldPath getField() {
5074
return field;
5175
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
import static com.google.firebase.firestore.util.Assert.hardAssert;
1818

1919
import androidx.annotation.Nullable;
20-
import com.google.firebase.firestore.core.Filter.Operator;
20+
import com.google.firebase.firestore.Filter;
21+
import com.google.firebase.firestore.core.FieldFilter.Operator;
2122
import com.google.firebase.firestore.core.OrderBy.Direction;
2223
import com.google.firebase.firestore.model.Document;
2324
import com.google.firebase.firestore.model.DocumentKey;
@@ -238,7 +239,7 @@ public Query filter(Filter filter) {
238239
hardAssert(!isDocumentQuery(), "No filter is allowed for document query");
239240
FieldPath newInequalityField = null;
240241
if (filter instanceof FieldFilter && ((FieldFilter) filter).isInequality()) {
241-
newInequalityField = filter.getField();
242+
newInequalityField = ((FieldFilter) filter).getField();
242243
}
243244

244245
FieldPath queryInequalityField = inequalityField();

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static com.google.firebase.firestore.model.Values.min;
1919

2020
import androidx.annotation.Nullable;
21+
import com.google.firebase.firestore.Filter;
2122
import com.google.firebase.firestore.model.DocumentKey;
2223
import com.google.firebase.firestore.model.FieldIndex;
2324
import com.google.firebase.firestore.model.ResourcePath;
@@ -124,7 +125,8 @@ public boolean hasLimit() {
124125
if (segment == null) return null;
125126

126127
for (Filter filter : filters) {
127-
if (filter.getField().equals(segment.getFieldPath())) {
128+
if ((filter instanceof FieldFilter)
129+
&& (((FieldFilter) filter).getField()).equals(segment.getFieldPath())) {
128130
FieldFilter fieldFilter = (FieldFilter) filter;
129131
switch (fieldFilter.getOperator()) {
130132
case ARRAY_CONTAINS_ANY:
@@ -147,7 +149,8 @@ public boolean hasLimit() {
147149

148150
for (FieldIndex.Segment segment : fieldIndex.getDirectionalSegments()) {
149151
for (Filter filter : filters) {
150-
if (filter.getField().equals(segment.getFieldPath())) {
152+
if ((filter instanceof FieldFilter)
153+
&& ((FieldFilter) filter).getField().equals(segment.getFieldPath())) {
151154
FieldFilter fieldFilter = (FieldFilter) filter;
152155
switch (fieldFilter.getOperator()) {
153156
case EQUAL:
@@ -185,7 +188,8 @@ public Bound getLowerBound(FieldIndex fieldIndex) {
185188

186189
// Process all filters to find a value for the current field segment
187190
for (Filter filter : filters) {
188-
if (filter.getField().equals(segment.getFieldPath())) {
191+
if ((filter instanceof FieldFilter)
192+
&& ((FieldFilter) filter).getField().equals(segment.getFieldPath())) {
189193
FieldFilter fieldFilter = (FieldFilter) filter;
190194
Value filterValue = null;
191195
boolean filterInclusive = true;
@@ -270,7 +274,8 @@ public Bound getLowerBound(FieldIndex fieldIndex) {
270274

271275
// Process all filters to find a value for the current field segment
272276
for (Filter filter : filters) {
273-
if (filter.getField().equals(segment.getFieldPath())) {
277+
if ((filter instanceof FieldFilter)
278+
&& ((FieldFilter) filter).getField().equals(segment.getFieldPath())) {
274279
FieldFilter fieldFilter = (FieldFilter) filter;
275280
Value filterValue = null;
276281
boolean filterInclusive = true;

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
@@ -23,10 +23,10 @@
2323

2424
import androidx.annotation.Nullable;
2525
import com.google.firebase.Timestamp;
26+
import com.google.firebase.firestore.Filter;
2627
import com.google.firebase.firestore.auth.User;
2728
import com.google.firebase.firestore.core.Bound;
2829
import com.google.firebase.firestore.core.FieldFilter;
29-
import com.google.firebase.firestore.core.Filter;
3030
import com.google.firebase.firestore.core.Target;
3131
import com.google.firebase.firestore.index.DirectionalIndexByteEncoder;
3232
import com.google.firebase.firestore.index.FirestoreIndexValueWriter;
@@ -627,9 +627,10 @@ private List<IndexByteEncoder> expandIndexValues(
627627

628628
private boolean isInFilter(Target target, FieldPath fieldPath) {
629629
for (Filter filter : target.getFilters()) {
630-
if (filter.getField().equals(fieldPath)) {
631-
Filter.Operator operator = ((FieldFilter) filter).getOperator();
632-
return operator.equals(Filter.Operator.IN) || operator.equals(Filter.Operator.NOT_IN);
630+
if ((filter instanceof FieldFilter) && ((FieldFilter) filter).getField().equals(fieldPath)) {
631+
FieldFilter.Operator operator = ((FieldFilter) filter).getOperator();
632+
return operator.equals(FieldFilter.Operator.IN)
633+
|| operator.equals(FieldFilter.Operator.NOT_IN);
633634
}
634635
}
635636
return false;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
import static com.google.firebase.firestore.util.Assert.hardAssert;
1818

1919
import androidx.annotation.Nullable;
20+
import com.google.firebase.firestore.Filter;
2021
import com.google.firebase.firestore.core.FieldFilter;
21-
import com.google.firebase.firestore.core.Filter;
2222
import com.google.firebase.firestore.core.OrderBy;
2323
import com.google.firebase.firestore.core.Target;
2424
import java.util.ArrayList;
@@ -200,8 +200,8 @@ private boolean matchesFilter(@Nullable FieldFilter filter, FieldIndex.Segment s
200200
return false;
201201
}
202202
boolean isArrayOperator =
203-
filter.getOperator().equals(Filter.Operator.ARRAY_CONTAINS)
204-
|| filter.getOperator().equals(Filter.Operator.ARRAY_CONTAINS_ANY);
203+
filter.getOperator().equals(FieldFilter.Operator.ARRAY_CONTAINS)
204+
|| filter.getOperator().equals(FieldFilter.Operator.ARRAY_CONTAINS_ANY);
205205
return segment.getKind().equals(FieldIndex.Segment.Kind.CONTAINS) == isArrayOperator;
206206
}
207207

firebase-firestore/src/main/java/com/google/firebase/firestore/remote/RemoteSerializer.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import androidx.annotation.Nullable;
2121
import androidx.annotation.VisibleForTesting;
2222
import com.google.firebase.Timestamp;
23+
import com.google.firebase.firestore.Filter;
2324
import com.google.firebase.firestore.core.Bound;
2425
import com.google.firebase.firestore.core.FieldFilter;
25-
import com.google.firebase.firestore.core.Filter;
2626
import com.google.firebase.firestore.core.OrderBy;
2727
import com.google.firebase.firestore.core.OrderBy.Direction;
2828
import com.google.firebase.firestore.core.Query;
@@ -686,19 +686,19 @@ private List<Filter> decodeFilters(StructuredQuery.Filter proto) {
686686

687687
@VisibleForTesting
688688
StructuredQuery.Filter encodeUnaryOrFieldFilter(FieldFilter filter) {
689-
if (filter.getOperator() == Filter.Operator.EQUAL
690-
|| filter.getOperator() == Filter.Operator.NOT_EQUAL) {
689+
if (filter.getOperator() == FieldFilter.Operator.EQUAL
690+
|| filter.getOperator() == FieldFilter.Operator.NOT_EQUAL) {
691691
UnaryFilter.Builder unaryProto = UnaryFilter.newBuilder();
692692
unaryProto.setField(encodeFieldPath(filter.getField()));
693693
if (Values.isNanValue(filter.getValue())) {
694694
unaryProto.setOp(
695-
filter.getOperator() == Filter.Operator.EQUAL
695+
filter.getOperator() == FieldFilter.Operator.EQUAL
696696
? UnaryFilter.Operator.IS_NAN
697697
: UnaryFilter.Operator.IS_NOT_NAN);
698698
return StructuredQuery.Filter.newBuilder().setUnaryFilter(unaryProto).build();
699699
} else if (Values.isNullValue(filter.getValue())) {
700700
unaryProto.setOp(
701-
filter.getOperator() == Filter.Operator.EQUAL
701+
filter.getOperator() == FieldFilter.Operator.EQUAL
702702
? UnaryFilter.Operator.IS_NULL
703703
: UnaryFilter.Operator.IS_NOT_NULL);
704704
return StructuredQuery.Filter.newBuilder().setUnaryFilter(unaryProto).build();
@@ -722,13 +722,13 @@ private Filter decodeUnaryFilter(StructuredQuery.UnaryFilter proto) {
722722
FieldPath fieldPath = FieldPath.fromServerFormat(proto.getField().getFieldPath());
723723
switch (proto.getOp()) {
724724
case IS_NAN:
725-
return FieldFilter.create(fieldPath, Filter.Operator.EQUAL, Values.NAN_VALUE);
725+
return FieldFilter.create(fieldPath, FieldFilter.Operator.EQUAL, Values.NAN_VALUE);
726726
case IS_NULL:
727-
return FieldFilter.create(fieldPath, Filter.Operator.EQUAL, Values.NULL_VALUE);
727+
return FieldFilter.create(fieldPath, FieldFilter.Operator.EQUAL, Values.NULL_VALUE);
728728
case IS_NOT_NAN:
729-
return FieldFilter.create(fieldPath, Filter.Operator.NOT_EQUAL, Values.NAN_VALUE);
729+
return FieldFilter.create(fieldPath, FieldFilter.Operator.NOT_EQUAL, Values.NAN_VALUE);
730730
case IS_NOT_NULL:
731-
return FieldFilter.create(fieldPath, Filter.Operator.NOT_EQUAL, Values.NULL_VALUE);
731+
return FieldFilter.create(fieldPath, FieldFilter.Operator.NOT_EQUAL, Values.NULL_VALUE);
732732
default:
733733
throw fail("Unrecognized UnaryFilter.operator %d", proto.getOp());
734734
}

firebase-firestore/src/test/java/com/google/firebase/firestore/core/QueryTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import com.google.firebase.Timestamp;
3232
import com.google.firebase.firestore.Blob;
33+
import com.google.firebase.firestore.Filter;
3334
import com.google.firebase.firestore.GeoPoint;
3435
import com.google.firebase.firestore.model.MutableDocument;
3536
import com.google.firebase.firestore.model.ResourcePath;

firebase-firestore/src/testUtil/java/com/google/firebase/firestore/testutil/TestUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import com.google.firebase.firestore.UserDataWriter;
4242
import com.google.firebase.firestore.core.Bound;
4343
import com.google.firebase.firestore.core.FieldFilter;
44-
import com.google.firebase.firestore.core.Filter.Operator;
44+
import com.google.firebase.firestore.core.FieldFilter.Operator;
4545
import com.google.firebase.firestore.core.OrderBy;
4646
import com.google.firebase.firestore.core.OrderBy.Direction;
4747
import com.google.firebase.firestore.core.Query;

0 commit comments

Comments
 (0)