diff options
author | Jesse Bounds <jesse@rebounds.net> | 2016-09-21 09:12:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-21 09:12:59 -0700 |
commit | 1165a408fbee37a0892b07b5c35e1a36d7aa0063 (patch) | |
tree | 5ee4aa50d79ba712cf744af44255cb3490c92513 /platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm | |
parent | 6fe621bbef43e6b73a53ca25a9df3d349cd84929 (diff) | |
download | qtlocation-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.mm | 54 |
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]; } |