Skip to content

Commit cf682c6

Browse files
authored
Complete migration to C++ Filters in FSTQuery (#3349)
* Use C++ Filters in FSTQuery without changing interface * Remove FSTQuery initWithPath * sync_project.rb generated changes * Implement Filter equality * Consistently use testutil:: helpers unqualified * Use C++ Filters in FSTQuery
1 parent b673b2a commit cf682c6

File tree

20 files changed

+335
-626
lines changed

20 files changed

+335
-626
lines changed

Firestore/Example/Tests/Core/FSTQueryTests.mm

Lines changed: 62 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,18 @@
3333

3434
namespace testutil = firebase::firestore::testutil;
3535
namespace util = firebase::firestore::util;
36+
using firebase::firestore::core::Query;
3637
using firebase::firestore::model::DatabaseId;
3738
using firebase::firestore::model::DocumentComparator;
3839
using firebase::firestore::model::DocumentState;
3940
using firebase::firestore::model::FieldPath;
4041
using firebase::firestore::model::ResourcePath;
4142
using firebase::firestore::util::ComparisonResult;
4243

44+
using testutil::Array;
45+
using testutil::Field;
46+
using testutil::Filter;
47+
using testutil::Map;
4348
using testutil::Value;
4449

4550
NS_ASSUME_NONNULL_BEGIN
@@ -52,7 +57,7 @@ - (FSTQuery *)queryByAddingSortBy:(const absl::string_view)key ascending:(BOOL)a
5257
@implementation FSTQuery (Tests)
5358

5459
- (FSTQuery *)queryByAddingSortBy:(const absl::string_view)key ascending:(BOOL)ascending {
55-
return [self queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field(key)
60+
return [self queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field(key)
5661
ascending:ascending]];
5762
}
5863

@@ -77,9 +82,8 @@ - (void)testConstructor {
7782

7883
- (void)testOrderBy {
7984
FSTQuery *query = FSTTestQuery("rooms/Firestore/messages");
80-
query =
81-
[query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("length")
82-
ascending:NO]];
85+
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("length")
86+
ascending:NO]];
8387

8488
XCTAssertEqual(query.sortOrders.count, 2);
8589
XCTAssertEqual(query.sortOrders[0].field.CanonicalString(), "length");
@@ -130,17 +134,15 @@ - (void)testEmptyFieldsAreAllowedForQueries {
130134
FSTTestDoc("rooms/eros/messages/1", 0, @{@"text" : @"msg1"}, DocumentState::kSynced);
131135
FSTDocument *doc2 = FSTTestDoc("rooms/eros/messages/2", 0, @{}, DocumentState::kSynced);
132136

133-
FSTQuery *query = [FSTTestQuery("rooms/eros/messages")
134-
queryByAddingFilter:FSTTestFilter("text", @"==", @"msg1")];
137+
FSTQuery *query =
138+
[FSTTestQuery("rooms/eros/messages") queryByAddingFilter:Filter("text", "==", "msg1")];
135139
XCTAssertTrue([query matchesDocument:doc1]);
136140
XCTAssertFalse([query matchesDocument:doc2]);
137141
}
138142

139143
- (void)testMatchesPrimitiveValuesForFilters {
140-
FSTQuery *query1 =
141-
[FSTTestQuery("collection") queryByAddingFilter:FSTTestFilter("sort", @">=", @(2))];
142-
FSTQuery *query2 =
143-
[FSTTestQuery("collection") queryByAddingFilter:FSTTestFilter("sort", @"<=", @(2))];
144+
FSTQuery *query1 = [FSTTestQuery("collection") queryByAddingFilter:Filter("sort", ">=", 2)];
145+
FSTQuery *query2 = [FSTTestQuery("collection") queryByAddingFilter:Filter("sort", "<=", 2)];
144146

145147
FSTDocument *doc1 = FSTTestDoc("collection/1", 0, @{@"sort" : @1}, DocumentState::kSynced);
146148
FSTDocument *doc2 = FSTTestDoc("collection/2", 0, @{@"sort" : @2}, DocumentState::kSynced);
@@ -165,8 +167,8 @@ - (void)testMatchesPrimitiveValuesForFilters {
165167
}
166168

167169
- (void)testArrayContainsFilter {
168-
FSTQuery *query = [FSTTestQuery("collection")
169-
queryByAddingFilter:FSTTestFilter("array", @"array_contains", @42)];
170+
FSTQuery *query =
171+
[FSTTestQuery("collection") queryByAddingFilter:Filter("array", "array_contains", 42)];
170172

171173
// not an array.
172174
FSTDocument *doc = FSTTestDoc("collection/1", 0, @{@"array" : @1}, DocumentState::kSynced);
@@ -192,7 +194,7 @@ - (void)testArrayContainsFilter {
192194
- (void)testArrayContainsFilterWithObjectValue {
193195
// Search for arrays containing the object { a: [42] }
194196
FSTQuery *query = [FSTTestQuery("collection")
195-
queryByAddingFilter:FSTTestFilter("array", @"array_contains", @{@"a" : @[ @42 ]})];
197+
queryByAddingFilter:Filter("array", "array_contains", Map("a", Array(42)))];
196198

197199
// array without element.
198200
FSTDocument *doc = FSTTestDoc("collection/1", 0, @{
@@ -210,8 +212,7 @@ - (void)testArrayContainsFilterWithObjectValue {
210212
}
211213

212214
- (void)testNullFilter {
213-
FSTQuery *query =
214-
[FSTTestQuery("collection") queryByAddingFilter:FSTTestFilter("sort", @"==", [NSNull null])];
215+
FSTQuery *query = [FSTTestQuery("collection") queryByAddingFilter:Filter("sort", "==", nullptr)];
215216
FSTDocument *doc1 =
216217
FSTTestDoc("collection/1", 0, @{@"sort" : [NSNull null]}, DocumentState::kSynced);
217218
FSTDocument *doc2 = FSTTestDoc("collection/2", 0, @{@"sort" : @2}, DocumentState::kSynced);
@@ -227,8 +228,7 @@ - (void)testNullFilter {
227228
}
228229

229230
- (void)testNanFilter {
230-
FSTQuery *query =
231-
[FSTTestQuery("collection") queryByAddingFilter:FSTTestFilter("sort", @"==", @(NAN))];
231+
FSTQuery *query = [FSTTestQuery("collection") queryByAddingFilter:Filter("sort", "==", NAN)];
232232
FSTDocument *doc1 = FSTTestDoc("collection/1", 0, @{@"sort" : @(NAN)}, DocumentState::kSynced);
233233
FSTDocument *doc2 = FSTTestDoc("collection/2", 0, @{@"sort" : @2}, DocumentState::kSynced);
234234
FSTDocument *doc3 = FSTTestDoc("collection/2", 0, @{@"sort" : @3.1}, DocumentState::kSynced);
@@ -243,10 +243,8 @@ - (void)testNanFilter {
243243
}
244244

245245
- (void)testDoesNotMatchComplexObjectsForFilters {
246-
FSTQuery *query1 =
247-
[FSTTestQuery("collection") queryByAddingFilter:FSTTestFilter("sort", @"<=", @(2))];
248-
FSTQuery *query2 =
249-
[FSTTestQuery("collection") queryByAddingFilter:FSTTestFilter("sort", @">=", @(2))];
246+
FSTQuery *query1 = [FSTTestQuery("collection") queryByAddingFilter:Filter("sort", "<=", 2)];
247+
FSTQuery *query2 = [FSTTestQuery("collection") queryByAddingFilter:Filter("sort", ">=", 2)];
250248

251249
FSTDocument *doc1 = FSTTestDoc("collection/1", 0, @{@"sort" : @2}, DocumentState::kSynced);
252250
FSTDocument *doc2 = FSTTestDoc("collection/2", 0, @{@"sort" : @[]}, DocumentState::kSynced);
@@ -279,8 +277,7 @@ - (void)testDoesNotMatchComplexObjectsForFilters {
279277

280278
- (void)testDoesntRemoveComplexObjectsWithOrderBy {
281279
FSTQuery *query1 = [FSTTestQuery("collection")
282-
queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("sort")
283-
ascending:YES]];
280+
queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("sort") ascending:YES]];
284281

285282
FSTDocument *doc1 = FSTTestDoc("collection/1", 0, @{@"sort" : @2}, DocumentState::kSynced);
286283
FSTDocument *doc2 = FSTTestDoc("collection/2", 0, @{@"sort" : @[]}, DocumentState::kSynced);
@@ -304,19 +301,19 @@ - (void)testFiltersBasedOnArrayValue {
304301
FSTDocument *doc1 =
305302
FSTTestDoc("collection/doc", 0, @{@"tags" : @[ @"foo", @1, @YES ]}, DocumentState::kSynced);
306303

307-
NSArray<FSTFilter *> *matchingFilters = @[ FSTTestFilter("tags", @"==", @[ @"foo", @1, @YES ]) ];
304+
Query::FilterList matchingFilters = {Filter("tags", "==", Array("foo", 1, true))};
308305

309-
NSArray<FSTFilter *> *nonMatchingFilters = @[
310-
FSTTestFilter("tags", @"==", @"foo"),
311-
FSTTestFilter("tags", @"==", @[ @"foo", @1 ]),
312-
FSTTestFilter("tags", @"==", @[ @"foo", @YES, @1 ]),
313-
];
306+
Query::FilterList nonMatchingFilters = {
307+
Filter("tags", "==", "foo"),
308+
Filter("tags", "==", Array("foo", 1)),
309+
Filter("tags", "==", Array("foo", true, 1)),
310+
};
314311

315-
for (FSTFilter *filter in matchingFilters) {
312+
for (const auto &filter : matchingFilters) {
316313
XCTAssertTrue([[baseQuery queryByAddingFilter:filter] matchesDocument:doc1]);
317314
}
318315

319-
for (FSTFilter *filter in nonMatchingFilters) {
316+
for (const auto &filter : nonMatchingFilters) {
320317
XCTAssertFalse([[baseQuery queryByAddingFilter:filter] matchesDocument:doc1]);
321318
}
322319
}
@@ -327,25 +324,19 @@ - (void)testFiltersBasedOnObjectValue {
327324
"collection/doc", 0, @{@"tags" : @{@"foo" : @"foo", @"a" : @0, @"b" : @YES, @"c" : @(NAN)}},
328325
DocumentState::kSynced);
329326

330-
NSArray<FSTFilter *> *matchingFilters = @[
331-
FSTTestFilter("tags", @"==", @{@"foo" : @"foo", @"a" : @0, @"b" : @YES, @"c" : @(NAN)}),
332-
FSTTestFilter("tags", @"==", @{@"b" : @YES, @"a" : @0, @"foo" : @"foo", @"c" : @(NAN)}),
333-
FSTTestFilter("tags.foo", @"==", @"foo")
334-
];
327+
Query::FilterList matchingFilters = {
328+
Filter("tags", "==", Map("foo", "foo", "a", 0, "b", true, "c", NAN)),
329+
Filter("tags", "==", Map("b", true, "a", 0, "foo", "foo", "c", NAN)),
330+
Filter("tags.foo", "==", "foo")};
335331

336-
NSArray<FSTFilter *> *nonMatchingFilters = @[
337-
FSTTestFilter("tags", @"==", @"foo"), FSTTestFilter("tags", @"==", @{
338-
@"foo" : @"foo",
339-
@"a" : @0,
340-
@"b" : @YES,
341-
})
342-
];
332+
Query::FilterList nonMatchingFilters = {
333+
Filter("tags", "==", "foo"), Filter("tags", "==", Map("foo", "foo", "a", 0, "b", true))};
343334

344-
for (FSTFilter *filter in matchingFilters) {
335+
for (const auto &filter : matchingFilters) {
345336
XCTAssertTrue([[baseQuery queryByAddingFilter:filter] matchesDocument:doc1]);
346337
}
347338

348-
for (FSTFilter *filter in nonMatchingFilters) {
339+
for (const auto &filter : nonMatchingFilters) {
349340
XCTAssertFalse([[baseQuery queryByAddingFilter:filter] matchesDocument:doc1]);
350341
}
351342
}
@@ -368,7 +359,7 @@ - (void)assertCorrectComparisonsWithArray:(NSArray *)array
368359

369360
- (void)testSortsDocumentsInTheCorrectOrder {
370361
FSTQuery *query = FSTTestQuery("collection");
371-
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("sort")
362+
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("sort")
372363
ascending:YES]];
373364

374365
// clang-format off
@@ -396,12 +387,10 @@ - (void)testSortsDocumentsInTheCorrectOrder {
396387

397388
- (void)testSortsDocumentsUsingMultipleFields {
398389
FSTQuery *query = FSTTestQuery("collection");
399-
query =
400-
[query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("sort1")
401-
ascending:YES]];
402-
query =
403-
[query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("sort2")
404-
ascending:YES]];
390+
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("sort1")
391+
ascending:YES]];
392+
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("sort2")
393+
ascending:YES]];
405394

406395
// clang-format off
407396
NSArray<FSTDocument *> *docs =
@@ -423,12 +412,10 @@ - (void)testSortsDocumentsUsingMultipleFields {
423412

424413
- (void)testSortsDocumentsWithDescendingToo {
425414
FSTQuery *query = FSTTestQuery("collection");
426-
query =
427-
[query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("sort1")
428-
ascending:NO]];
429-
query =
430-
[query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:testutil::Field("sort2")
431-
ascending:NO]];
415+
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("sort1")
416+
ascending:NO]];
417+
query = [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:Field("sort2")
418+
ascending:NO]];
432419

433420
// clang-format off
434421
NSArray<FSTDocument *> *docs =
@@ -450,11 +437,11 @@ - (void)testSortsDocumentsWithDescendingToo {
450437

451438
- (void)testEquality {
452439
FSTQuery *q11 = FSTTestQuery("foo");
453-
q11 = [q11 queryByAddingFilter:FSTTestFilter("i1", @"<", @(2))];
454-
q11 = [q11 queryByAddingFilter:FSTTestFilter("i2", @"==", @(3))];
440+
q11 = [q11 queryByAddingFilter:Filter("i1", "<", 2)];
441+
q11 = [q11 queryByAddingFilter:Filter("i2", "==", 3)];
455442
FSTQuery *q12 = FSTTestQuery("foo");
456-
q12 = [q12 queryByAddingFilter:FSTTestFilter("i2", @"==", @(3))];
457-
q12 = [q12 queryByAddingFilter:FSTTestFilter("i1", @"<", @(2))];
443+
q12 = [q12 queryByAddingFilter:Filter("i2", "==", 3)];
444+
q12 = [q12 queryByAddingFilter:Filter("i1", "<", 2)];
458445

459446
FSTQuery *q21 = FSTTestQuery("foo");
460447
FSTQuery *q22 = FSTTestQuery("foo");
@@ -474,12 +461,12 @@ - (void)testEquality {
474461

475462
FSTQuery *q51 = FSTTestQuery("foo");
476463
q51 = [q51 queryByAddingSortBy:"foo" ascending:YES];
477-
q51 = [q51 queryByAddingFilter:FSTTestFilter("foo", @">", @(2))];
464+
q51 = [q51 queryByAddingFilter:Filter("foo", ">", 2)];
478465
FSTQuery *q52 = FSTTestQuery("foo");
479-
q52 = [q52 queryByAddingFilter:FSTTestFilter("foo", @">", @(2))];
466+
q52 = [q52 queryByAddingFilter:Filter("foo", ">", 2)];
480467
q52 = [q52 queryByAddingSortBy:"foo" ascending:YES];
481468
FSTQuery *q53Diff = FSTTestQuery("foo");
482-
q53Diff = [q53Diff queryByAddingFilter:FSTTestFilter("bar", @">", @(2))];
469+
q53Diff = [q53Diff queryByAddingFilter:Filter("bar", ">", 2)];
483470
q53Diff = [q53Diff queryByAddingSortBy:"bar" ascending:YES];
484471

485472
FSTQuery *q61 = FSTTestQuery("foo");
@@ -515,11 +502,11 @@ - (void)testEquality {
515502

516503
- (void)testUniqueIds {
517504
FSTQuery *q11 = FSTTestQuery("foo");
518-
q11 = [q11 queryByAddingFilter:FSTTestFilter("i1", @"<", @(2))];
519-
q11 = [q11 queryByAddingFilter:FSTTestFilter("i2", @"==", @(3))];
505+
q11 = [q11 queryByAddingFilter:Filter("i1", "<", 2)];
506+
q11 = [q11 queryByAddingFilter:Filter("i2", "==", 3)];
520507
FSTQuery *q12 = FSTTestQuery("foo");
521-
q12 = [q12 queryByAddingFilter:FSTTestFilter("i2", @"==", @(3))];
522-
q12 = [q12 queryByAddingFilter:FSTTestFilter("i1", @"<", @(2))];
508+
q12 = [q12 queryByAddingFilter:Filter("i2", "==", 3)];
509+
q12 = [q12 queryByAddingFilter:Filter("i1", "<", 2)];
523510

524511
FSTQuery *q21 = FSTTestQuery("foo");
525512
FSTQuery *q22 = FSTTestQuery("foo");
@@ -539,12 +526,12 @@ - (void)testUniqueIds {
539526

540527
FSTQuery *q51 = FSTTestQuery("foo");
541528
q51 = [q51 queryByAddingSortBy:"foo" ascending:YES];
542-
q51 = [q51 queryByAddingFilter:FSTTestFilter("foo", @">", @(2))];
529+
q51 = [q51 queryByAddingFilter:Filter("foo", ">", 2)];
543530
FSTQuery *q52 = FSTTestQuery("foo");
544-
q52 = [q52 queryByAddingFilter:FSTTestFilter("foo", @">", @(2))];
531+
q52 = [q52 queryByAddingFilter:Filter("foo", ">", 2)];
545532
q52 = [q52 queryByAddingSortBy:"foo" ascending:YES];
546533
FSTQuery *q53Diff = FSTTestQuery("foo");
547-
q53Diff = [q53Diff queryByAddingFilter:FSTTestFilter("bar", @">", @(2))];
534+
q53Diff = [q53Diff queryByAddingFilter:Filter("bar", ">", 2)];
548535
q53Diff = [q53Diff queryByAddingSortBy:"bar" ascending:YES];
549536

550537
FSTQuery *q61 = FSTTestQuery("foo");
@@ -608,7 +595,7 @@ - (void)testImplicitOrderBy {
608595

609596
// Inequality filters add order bys
610597
XCTAssertEqualObjects(
611-
[baseQuery queryByAddingFilter:FSTTestFilter("foo", @"<", @5)].sortOrders,
598+
[baseQuery queryByAddingFilter:Filter("foo", "<", 5)].sortOrders,
612599
(@[ FSTTestOrderBy("foo", @"asc"), FSTTestOrderBy(FieldPath::kDocumentKeyPath, @"asc") ]));
613600

614601
// Descending order by applies to implicit key ordering
@@ -649,11 +636,11 @@ - (void)testCanonicalIDs {
649636
XC_ASSERT_THAT(subcoll, HasCanonicalId("foo/bar/baz|f:|ob:__name__asc"));
650637

651638
FSTQuery *filters = FSTTestQuery("coll");
652-
filters = [filters queryByAddingFilter:FSTTestFilter("str", @"==", @"foo")];
639+
filters = [filters queryByAddingFilter:Filter("str", "==", "foo")];
653640
XC_ASSERT_THAT(filters, HasCanonicalId("coll|f:str==foo|ob:__name__asc"));
654641

655642
// Inequality filters end up in the order by too
656-
filters = [filters queryByAddingFilter:FSTTestFilter("int", @"<", @42)];
643+
filters = [filters queryByAddingFilter:Filter("int", "<", 42)];
657644
XC_ASSERT_THAT(filters, HasCanonicalId("coll|f:str==fooint<42|ob:intasc__name__asc"));
658645

659646
FSTQuery *orderBys = FSTTestQuery("coll");

0 commit comments

Comments
 (0)