diff options
author | Benety Goh <benety@mongodb.com> | 2014-02-07 12:09:54 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2014-02-11 16:11:19 -0500 |
commit | 3623d555f54d7fe168029085142f6d6dee03c96e (patch) | |
tree | d61be4f63512a3ff10b4fae95c76d4c045b7af08 /src/mongo/db/query/parsed_projection_test.cpp | |
parent | cc950771c0b7975be18b373f3e4fd009bccc606f (diff) | |
download | mongo-3623d555f54d7fe168029085142f6d6dee03c96e.tar.gz |
SERVER-12641 support projections on DBRef fields
Diffstat (limited to 'src/mongo/db/query/parsed_projection_test.cpp')
-rw-r--r-- | src/mongo/db/query/parsed_projection_test.cpp | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/mongo/db/query/parsed_projection_test.cpp b/src/mongo/db/query/parsed_projection_test.cpp index debfc387155..065aa24b97f 100644 --- a/src/mongo/db/query/parsed_projection_test.cpp +++ b/src/mongo/db/query/parsed_projection_test.cpp @@ -45,19 +45,26 @@ namespace { // creation function // - ParsedProjection* createParsedProjection(const char* queryStr, const char* projStr) { - BSONObj query = fromjson(queryStr); - BSONObj projObj = fromjson(projStr); + ParsedProjection* createParsedProjection(const BSONObj& query, const BSONObj& projObj) { StatusWithMatchExpression swme = MatchExpressionParser::parse(query); ASSERT(swme.isOK()); MatchExpression* queryMatchExpr = swme.getValue(); ParsedProjection* out = NULL; Status status = ParsedProjection::make(projObj, queryMatchExpr, &out); - ASSERT(status.isOK()); + if (!status.isOK()) { + FAIL(mongoutils::str::stream() << "failed to parse projection " << projObj + << " (query: " << query << "): " << status.toString()); + } ASSERT(out); return out; } + ParsedProjection* createParsedProjection(const char* queryStr, const char* projStr) { + BSONObj query = fromjson(queryStr); + BSONObj projObj = fromjson(projStr); + return createParsedProjection(query, projObj); + } + // // Failure to create a parsed projection is expected // @@ -175,4 +182,25 @@ namespace { ASSERT(!status.isOK()); } + // + // DBRef projections + // + + TEST(ParsedProjectionTest, DBRefProjections) { + // non-dotted + createParsedProjection(BSONObj(), BSON( "$ref" << 1)); + createParsedProjection(BSONObj(), BSON( "$id" << 1)); + createParsedProjection(BSONObj(), BSON( "$ref" << 1)); + // dotted before + createParsedProjection("{}", "{'a.$ref': 1}"); + createParsedProjection("{}", "{'a.$id': 1}"); + createParsedProjection("{}", "{'a.$db': 1}"); + // dotted after + createParsedProjection("{}", "{'$id.a': 1}"); + // position operator on $id + // $ref and $db hold the collection and database names respectively, + // so these fields cannot be arrays. + createParsedProjection("{'a.$id': {$elemMatch: {x: 1}}}", "{'a.$id.$': 1}"); + + } } // unnamed namespace |