30
30
import com .google .firebase .firestore .core .Bound ;
31
31
import com .google .firebase .firestore .core .EventManager .ListenOptions ;
32
32
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 ;
35
34
import com .google .firebase .firestore .core .ListenerRegistrationImpl ;
36
35
import com .google .firebase .firestore .core .OrderBy ;
37
36
import com .google .firebase .firestore .core .QueryListener ;
@@ -91,7 +90,7 @@ public FirebaseFirestore getFirestore() {
91
90
*/
92
91
@ NonNull
93
92
public Query whereEqualTo (@ NonNull String field , @ Nullable Object value ) {
94
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . EQUAL , value );
93
+ return where ( Filter . equalTo (field , value ) );
95
94
}
96
95
97
96
/**
@@ -104,7 +103,7 @@ public Query whereEqualTo(@NonNull String field, @Nullable Object value) {
104
103
*/
105
104
@ NonNull
106
105
public Query whereEqualTo (@ NonNull FieldPath fieldPath , @ Nullable Object value ) {
107
- return whereHelper ( fieldPath , Operator . EQUAL , value );
106
+ return where ( Filter . equalTo ( fieldPath , value ) );
108
107
}
109
108
110
109
/**
@@ -120,7 +119,7 @@ public Query whereEqualTo(@NonNull FieldPath fieldPath, @Nullable Object value)
120
119
*/
121
120
@ NonNull
122
121
public Query whereNotEqualTo (@ NonNull String field , @ Nullable Object value ) {
123
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . NOT_EQUAL , value );
122
+ return where ( Filter . notEqualTo (field , value ) );
124
123
}
125
124
126
125
/**
@@ -136,7 +135,7 @@ public Query whereNotEqualTo(@NonNull String field, @Nullable Object value) {
136
135
*/
137
136
@ NonNull
138
137
public Query whereNotEqualTo (@ NonNull FieldPath fieldPath , @ Nullable Object value ) {
139
- return whereHelper ( fieldPath , Operator . NOT_EQUAL , value );
138
+ return where ( Filter . notEqualTo ( fieldPath , value ) );
140
139
}
141
140
142
141
/**
@@ -149,7 +148,7 @@ public Query whereNotEqualTo(@NonNull FieldPath fieldPath, @Nullable Object valu
149
148
*/
150
149
@ NonNull
151
150
public Query whereLessThan (@ NonNull String field , @ NonNull Object value ) {
152
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . LESS_THAN , value );
151
+ return where ( Filter . lessThan (field , value ) );
153
152
}
154
153
155
154
/**
@@ -162,7 +161,7 @@ public Query whereLessThan(@NonNull String field, @NonNull Object value) {
162
161
*/
163
162
@ NonNull
164
163
public Query whereLessThan (@ NonNull FieldPath fieldPath , @ NonNull Object value ) {
165
- return whereHelper ( fieldPath , Operator . LESS_THAN , value );
164
+ return where ( Filter . lessThan ( fieldPath , value ) );
166
165
}
167
166
168
167
/**
@@ -175,7 +174,7 @@ public Query whereLessThan(@NonNull FieldPath fieldPath, @NonNull Object value)
175
174
*/
176
175
@ NonNull
177
176
public Query whereLessThanOrEqualTo (@ NonNull String field , @ NonNull Object value ) {
178
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . LESS_THAN_OR_EQUAL , value );
177
+ return where ( Filter . lessThanOrEqualTo (field , value ) );
179
178
}
180
179
181
180
/**
@@ -188,7 +187,7 @@ public Query whereLessThanOrEqualTo(@NonNull String field, @NonNull Object value
188
187
*/
189
188
@ NonNull
190
189
public Query whereLessThanOrEqualTo (@ NonNull FieldPath fieldPath , @ NonNull Object value ) {
191
- return whereHelper ( fieldPath , Operator . LESS_THAN_OR_EQUAL , value );
190
+ return where ( Filter . lessThanOrEqualTo ( fieldPath , value ) );
192
191
}
193
192
194
193
/**
@@ -201,7 +200,7 @@ public Query whereLessThanOrEqualTo(@NonNull FieldPath fieldPath, @NonNull Objec
201
200
*/
202
201
@ NonNull
203
202
public Query whereGreaterThan (@ NonNull String field , @ NonNull Object value ) {
204
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . GREATER_THAN , value );
203
+ return where ( Filter . greaterThan (field , value ) );
205
204
}
206
205
207
206
/**
@@ -214,7 +213,7 @@ public Query whereGreaterThan(@NonNull String field, @NonNull Object value) {
214
213
*/
215
214
@ NonNull
216
215
public Query whereGreaterThan (@ NonNull FieldPath fieldPath , @ NonNull Object value ) {
217
- return whereHelper ( fieldPath , Operator . GREATER_THAN , value );
216
+ return where ( Filter . greaterThan ( fieldPath , value ) );
218
217
}
219
218
220
219
/**
@@ -227,8 +226,7 @@ public Query whereGreaterThan(@NonNull FieldPath fieldPath, @NonNull Object valu
227
226
*/
228
227
@ NonNull
229
228
public Query whereGreaterThanOrEqualTo (@ NonNull String field , @ NonNull Object value ) {
230
- return whereHelper (
231
- FieldPath .fromDotSeparatedPath (field ), Operator .GREATER_THAN_OR_EQUAL , value );
229
+ return where (Filter .greaterThanOrEqualTo (field , value ));
232
230
}
233
231
234
232
/**
@@ -241,7 +239,7 @@ public Query whereGreaterThanOrEqualTo(@NonNull String field, @NonNull Object va
241
239
*/
242
240
@ NonNull
243
241
public Query whereGreaterThanOrEqualTo (@ NonNull FieldPath fieldPath , @ NonNull Object value ) {
244
- return whereHelper ( fieldPath , Operator . GREATER_THAN_OR_EQUAL , value );
242
+ return where ( Filter . greaterThanOrEqualTo ( fieldPath , value ) );
245
243
}
246
244
247
245
/**
@@ -258,7 +256,7 @@ public Query whereGreaterThanOrEqualTo(@NonNull FieldPath fieldPath, @NonNull Ob
258
256
*/
259
257
@ NonNull
260
258
public Query whereArrayContains (@ NonNull String field , @ NonNull Object value ) {
261
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . ARRAY_CONTAINS , value );
259
+ return where ( Filter . arrayContains (field , value ) );
262
260
}
263
261
264
262
/**
@@ -275,7 +273,7 @@ public Query whereArrayContains(@NonNull String field, @NonNull Object value) {
275
273
*/
276
274
@ NonNull
277
275
public Query whereArrayContains (@ NonNull FieldPath fieldPath , @ NonNull Object value ) {
278
- return whereHelper ( fieldPath , Operator . ARRAY_CONTAINS , value );
276
+ return where ( Filter . arrayContains ( fieldPath , value ) );
279
277
}
280
278
281
279
/**
@@ -293,7 +291,7 @@ public Query whereArrayContains(@NonNull FieldPath fieldPath, @NonNull Object va
293
291
@ NonNull
294
292
public Query whereArrayContainsAny (
295
293
@ NonNull String field , @ NonNull List <? extends Object > values ) {
296
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . ARRAY_CONTAINS_ANY , values );
294
+ return where ( Filter . arrayContainsAny (field , values ) );
297
295
}
298
296
299
297
/**
@@ -311,7 +309,7 @@ public Query whereArrayContainsAny(
311
309
@ NonNull
312
310
public Query whereArrayContainsAny (
313
311
@ NonNull FieldPath fieldPath , @ NonNull List <? extends Object > values ) {
314
- return whereHelper ( fieldPath , Operator . ARRAY_CONTAINS_ANY , values );
312
+ return where ( Filter . arrayContainsAny ( fieldPath , values ) );
315
313
}
316
314
317
315
/**
@@ -327,7 +325,7 @@ public Query whereArrayContainsAny(
327
325
*/
328
326
@ NonNull
329
327
public Query whereIn (@ NonNull String field , @ NonNull List <? extends Object > values ) {
330
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . IN , values );
328
+ return where ( Filter . inArray (field , values ) );
331
329
}
332
330
333
331
/**
@@ -343,7 +341,7 @@ public Query whereIn(@NonNull String field, @NonNull List<? extends Object> valu
343
341
*/
344
342
@ NonNull
345
343
public Query whereIn (@ NonNull FieldPath fieldPath , @ NonNull List <? extends Object > values ) {
346
- return whereHelper ( fieldPath , Operator . IN , values );
344
+ return where ( Filter . inArray ( fieldPath , values ) );
347
345
}
348
346
349
347
/**
@@ -364,7 +362,7 @@ public Query whereIn(@NonNull FieldPath fieldPath, @NonNull List<? extends Objec
364
362
*/
365
363
@ NonNull
366
364
public Query whereNotIn (@ NonNull String field , @ NonNull List <? extends Object > values ) {
367
- return whereHelper ( FieldPath . fromDotSeparatedPath (field ), Operator . NOT_IN , values );
365
+ return where ( Filter . notInArray (field , values ) );
368
366
}
369
367
370
368
/**
@@ -385,19 +383,19 @@ public Query whereNotIn(@NonNull String field, @NonNull List<? extends Object> v
385
383
*/
386
384
@ NonNull
387
385
public Query whereNotIn (@ NonNull FieldPath fieldPath , @ NonNull List <? extends Object > values ) {
388
- return whereHelper ( fieldPath , Operator . NOT_IN , values );
386
+ return where ( Filter . notInArray ( fieldPath , values ) );
389
387
}
390
388
391
389
/**
392
- * Creates and returns a new {@code Query } with the additional filter that documents must contain
393
- * the specified field and the value should satisfy the relation constraint provided .
390
+ * Parses the given value object and creates a new {@code FieldFilter } with the given field,
391
+ * operator, and value. Also performs validation on the filter before retuning it .
394
392
*
395
393
* @param fieldPath The field to compare
396
394
* @param op The operator
397
- * @param value The value for comparison
398
- * @return The created {@code Query }.
395
+ * @param value The value for parsing
396
+ * @return The created {@code FieldFilter }.
399
397
*/
400
- private Query whereHelper (@ NonNull FieldPath fieldPath , Operator op , Object value ) {
398
+ private FieldFilter parseFieldFilter (@ NonNull FieldPath fieldPath , Operator op , Object value ) {
401
399
checkNotNull (fieldPath , "Provided field path must not be null." );
402
400
checkNotNull (op , "Provided op must not be null." );
403
401
Value fieldValue ;
@@ -427,9 +425,16 @@ private Query whereHelper(@NonNull FieldPath fieldPath, Operator op, Object valu
427
425
.getUserDataReader ()
428
426
.parseQueryValue (value , op == Operator .IN || op == Operator .NOT_IN );
429
427
}
430
- Filter filter = FieldFilter .create (fieldPath .getInternalPath (), op , fieldValue );
428
+ FieldFilter filter = FieldFilter .create (fieldPath .getInternalPath (), op , fieldValue );
431
429
validateNewFilter (filter );
432
- return new Query (query .filter (filter ), firestore );
430
+ return filter ;
431
+ }
432
+
433
+ // TODO(orquery): This method will become public API. Change visibility and add documentation.
434
+ private Query where (Filter filter ) {
435
+ return new Query (
436
+ query .filter (parseFieldFilter (filter .getField (), filter .getOperator (), filter .getValue ())),
437
+ firestore );
433
438
}
434
439
435
440
private void validateOrderByField (com .google .firebase .firestore .model .FieldPath field ) {
@@ -548,13 +553,13 @@ private List<Operator> conflictingOps(Operator op) {
548
553
}
549
554
}
550
555
551
- private void validateNewFilter (Filter filter ) {
556
+ private void validateNewFilter (com . google . firebase . firestore . core . Filter filter ) {
552
557
if (filter instanceof FieldFilter ) {
553
558
FieldFilter fieldFilter = (FieldFilter ) filter ;
554
559
Operator filterOp = fieldFilter .getOperator ();
555
560
if (fieldFilter .isInequality ()) {
556
561
com .google .firebase .firestore .model .FieldPath existingInequality = query .inequalityField ();
557
- com .google .firebase .firestore .model .FieldPath newInequality = filter .getField ();
562
+ com .google .firebase .firestore .model .FieldPath newInequality = fieldFilter .getField ();
558
563
559
564
if (existingInequality != null && !existingInequality .equals (newInequality )) {
560
565
throw new IllegalArgumentException (
0 commit comments