summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/parsed_projection_test.cpp
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2014-02-07 12:09:54 -0500
committerBenety Goh <benety@mongodb.com>2014-02-11 16:11:19 -0500
commit3623d555f54d7fe168029085142f6d6dee03c96e (patch)
treed61be4f63512a3ff10b4fae95c76d4c045b7af08 /src/mongo/db/query/parsed_projection_test.cpp
parentcc950771c0b7975be18b373f3e4fd009bccc606f (diff)
downloadmongo-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.cpp36
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