summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Guerra <fabian.guerra@mapbox.com>2018-04-11 10:49:31 -0400
committerFabian Guerra <fabian.guerra@mapbox.com>2018-04-12 10:11:53 -0400
commit36c95fc5bab9bb13f97576335d1a6a34fad1ad54 (patch)
tree942de18519b75fd080d497e7660449db5127a6a8
parentb889e608c569a53f3853055d6c2cbd60b09cada6 (diff)
downloadqtlocation-mapboxgl-36c95fc5bab9bb13f97576335d1a6a34fad1ad54.tar.gz
[ios, macos] Add NSPredicate 'CONTAINS' expression filter support.
-rw-r--r--platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm7
-rw-r--r--platform/darwin/src/NSPredicate+MGLAdditions.mm4
-rw-r--r--platform/darwin/test/MGLPredicateTests.mm12
3 files changed, 20 insertions, 3 deletions
diff --git a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
index d738132e8d..3cc86258bd 100644
--- a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
+++ b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
@@ -333,16 +333,17 @@
options:0];
return @[op, leftHandPredicate.mgl_jsonExpressionObject, rightHandPredicate.mgl_jsonExpressionObject];
}
- case NSInPredicateOperatorType: {
+ case NSInPredicateOperatorType:
op = @"match";
break;
- }
+ case NSContainsPredicateOperatorType:
+ op = @"has";
+ break;
case NSMatchesPredicateOperatorType:
case NSLikePredicateOperatorType:
case NSBeginsWithPredicateOperatorType:
case NSEndsWithPredicateOperatorType:
case NSCustomSelectorPredicateOperatorType:
- case NSContainsPredicateOperatorType:
[NSException raise:NSInvalidArgumentException
format:@"NSPredicateOperatorType:%lu is not supported.", (unsigned long)self.predicateOperatorType];
}
diff --git a/platform/darwin/src/NSPredicate+MGLAdditions.mm b/platform/darwin/src/NSPredicate+MGLAdditions.mm
index aeaf667b45..6ce46629af 100644
--- a/platform/darwin/src/NSPredicate+MGLAdditions.mm
+++ b/platform/darwin/src/NSPredicate+MGLAdditions.mm
@@ -323,6 +323,10 @@ NSArray *MGLSubpredicatesWithJSONObjects(NSArray *objects) {
NSArray *subpredicates = MGLSubexpressionsWithJSONObjects([objects subarrayWithRange:NSMakeRange(1, objects.count - 1)]);
return [NSPredicate predicateWithFormat:@"%@ IN %@" argumentArray:subpredicates];
}
+ if ([op isEqualToString:@"has"]) {
+ NSArray *subpredicates = MGLSubexpressionsWithJSONObjects([objects subarrayWithRange:NSMakeRange(1, objects.count - 1)]);
+ return [NSPredicate predicateWithFormat:@"%@ CONTAINS %@" argumentArray:subpredicates];
+ }
NSAssert(NO, @"Unrecognized expression conditional operator %@.", op);
return nil;
diff --git a/platform/darwin/test/MGLPredicateTests.mm b/platform/darwin/test/MGLPredicateTests.mm
index b80dcb581f..f562415b28 100644
--- a/platform/darwin/test/MGLPredicateTests.mm
+++ b/platform/darwin/test/MGLPredicateTests.mm
@@ -610,6 +610,18 @@ namespace mbgl {
XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected);
XCTAssertEqualObjects([NSPredicate mgl_predicateWithJSONObject:expected], predicate);
}
+ {
+ NSArray *expected = @[@"has", @[@"literal", @[@6, @5, @4, @3]], @[@"get", @"x"]];
+ NSPredicate *predicate = [NSPredicate predicateWithFormat:@"{ 6, 5, 4, 3} CONTAINS x"];
+ XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected);
+ XCTAssertEqualObjects([NSPredicate mgl_predicateWithJSONObject:expected], predicate);
+ }
+ {
+ NSArray *expected = @[@"has", @[@"literal", @[@6, @5, @4, @3]], @[@"id"]];
+ NSPredicate *predicate = [NSPredicate predicateWithFormat:@"{ 6, 5, 4, 3} CONTAINS $mgl_featureIdentifier"];
+ XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected);
+ XCTAssertEqualObjects([NSPredicate mgl_predicateWithJSONObject:expected], predicate);
+ }
}
@end