DATAMONGO-1244 - Improved handling of expression parameters in StringBasedMongoQuery.
Replaced regex based parsing of dynamic expression based parameters with custom parsing to make sure we also support complex nested expression objects.
Previously we only supported simple named or positional expressions. Since MongoDBs JSON based query language uses deeply nested objects to express queries, we needed to improve the handling here.
Manual parsing is tedious and more verbose than regex based parsing but it gives us more control over the whole parsing process.
We also dynamically adjust the quoting so that we only output quoted parameters if necessary.
This enables to express complex filtering queries the use Spring Security constructors like:
```
@Query("{id: ?#{ hasRole('ROLE_ADMIN') ? {$exists:true} : principal.id}}")
List<User> findAllForCurrentUserById();
```
Original pull request: #306.
pull/309/head
Thomas Darimont11 years agocommitted byOliver Gierke
@ -161,13 +161,14 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@@ -161,13 +161,14 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@ -176,7 +177,30 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@@ -176,7 +177,30 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@ -211,8 +235,8 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@@ -211,8 +235,8 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@ -226,11 +250,16 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@@ -226,11 +250,16 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@ -261,28 +290,54 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {
@@ -261,28 +290,54 @@ public class StringBasedMongoQuery extends AbstractMongoQuery {