summaryrefslogtreecommitdiff
path: root/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
diff options
context:
space:
mode:
authorJesse Bounds <jesse@rebounds.net>2016-09-21 09:12:59 -0700
committerGitHub <noreply@github.com>2016-09-21 09:12:59 -0700
commit1165a408fbee37a0892b07b5c35e1a36d7aa0063 (patch)
tree5ee4aa50d79ba712cf744af44255cb3490c92513 /platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
parent6fe621bbef43e6b73a53ca25a9df3d349cd84929 (diff)
downloadqtlocation-mapboxgl-1165a408fbee37a0892b07b5c35e1a36d7aa0063.tar.gz
[ios, macos] Add more predicate operator to mbgl filter translations
Adds several new translations to prevent data loss.
Diffstat (limited to 'platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm')
-rw-r--r--platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm54
1 files changed, 44 insertions, 10 deletions
diff --git a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
index ced6a1ac47..19c264aa40 100644
--- a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
+++ b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
@@ -9,16 +9,34 @@
{
switch (self.predicateOperatorType) {
case NSEqualToPredicateOperatorType: {
- auto filter = mbgl::style::EqualsFilter();
- filter.key = self.leftExpression.keyPath.UTF8String;
- filter.value = self.rightExpression.mgl_filterValue;
- return filter;
+ if (self.rightExpression.constantValue)
+ {
+ auto filter = mbgl::style::EqualsFilter();
+ filter.key = self.leftExpression.keyPath.UTF8String;
+ filter.value = self.rightExpression.mgl_filterValue;
+ return filter;
+ }
+ else
+ {
+ auto filter = mbgl::style::NotHasFilter();
+ filter.key = self.leftExpression.keyPath.UTF8String;
+ return filter;
+ }
}
case NSNotEqualToPredicateOperatorType: {
- auto filter = mbgl::style::NotEqualsFilter();
- filter.key = self.leftExpression.keyPath.UTF8String;
- filter.value = self.rightExpression.mgl_filterValue;
- return filter;
+ if (self.rightExpression.constantValue)
+ {
+ auto filter = mbgl::style::NotEqualsFilter();
+ filter.key = self.leftExpression.keyPath.UTF8String;
+ filter.value = self.rightExpression.mgl_filterValue;
+ return filter;
+ }
+ else
+ {
+ auto filter = mbgl::style::HasFilter();
+ filter.key = self.leftExpression.keyPath.UTF8String;
+ return filter;
+ }
}
case NSGreaterThanPredicateOperatorType: {
auto filter = mbgl::style::GreaterThanFilter();
@@ -50,13 +68,29 @@
filter.values = self.rightExpression.mgl_filterValues;
return filter;
}
+ case NSContainsPredicateOperatorType: {
+ auto filter = mbgl::style::InFilter();
+ filter.key = [self.rightExpression.constantValue UTF8String];
+ filter.values = self.leftExpression.mgl_filterValues;
+ return filter;
+ }
+ case NSBetweenPredicateOperatorType: {
+ auto filter = mbgl::style::AllFilter();
+ auto gteFilter = mbgl::style::GreaterThanEqualsFilter();
+ gteFilter.key = self.leftExpression.keyPath.UTF8String;
+ gteFilter.value = self.rightExpression.mgl_filterValues[0];
+ filter.filters.push_back(gteFilter);
+ auto lteFilter = mbgl::style::LessThanEqualsFilter();
+ lteFilter.key = self.leftExpression.keyPath.UTF8String;
+ lteFilter.value = self.rightExpression.mgl_filterValues[1];
+ filter.filters.push_back(lteFilter);
+ return filter;
+ }
case NSMatchesPredicateOperatorType:
case NSLikePredicateOperatorType:
case NSBeginsWithPredicateOperatorType:
case NSEndsWithPredicateOperatorType:
case NSCustomSelectorPredicateOperatorType:
- case NSContainsPredicateOperatorType:
- case NSBetweenPredicateOperatorType:
[NSException raise:@"Unsupported operator type"
format:@"NSPredicateOperatorType:%lu is not supported.", (unsigned long)self.predicateOperatorType];
}