summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/parsed_projection_test.cpp
diff options
context:
space:
mode:
authorYunhe (John) Wang <yunhe.wang@mongodb.com>2015-09-24 15:27:24 -0400
committerYunhe (John) Wang <yunhe.wang@mongodb.com>2015-10-12 13:50:30 -0400
commit28a2d6fa3f7fb6659f578d69e6d772ae9be8c25e (patch)
tree8e5fd9aff1cf072d171f634fd819fdc5a69b09f9 /src/mongo/db/query/parsed_projection_test.cpp
parent2039dd73fba411967b2b1ead07f3ab2e542e65a1 (diff)
downloadmongo-28a2d6fa3f7fb6659f578d69e6d772ae9be8c25e.tar.gz
SERVER-20117 Allow queries with meta sortkey to be covered in mongos
Diffstat (limited to 'src/mongo/db/query/parsed_projection_test.cpp')
-rw-r--r--src/mongo/db/query/parsed_projection_test.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/mongo/db/query/parsed_projection_test.cpp b/src/mongo/db/query/parsed_projection_test.cpp
index f850221b5fe..f235f32a15e 100644
--- a/src/mongo/db/query/parsed_projection_test.cpp
+++ b/src/mongo/db/query/parsed_projection_test.cpp
@@ -215,6 +215,62 @@ TEST(ParsedProjectionTest, SortKeyMetaProjection) {
ASSERT_FALSE(parsedProjection->wantIndexKey());
}
+TEST(ParsedProjectionTest, SortKeyMetaProjectionCovered) {
+ auto parsedProjection = createParsedProjection("{}", "{a: 1, foo: {$meta: 'sortKey'}, _id: 0}");
+
+ ASSERT_EQ(parsedProjection->getProjObj(), fromjson("{a: 1, foo: {$meta: 'sortKey'}, _id: 0}"));
+ ASSERT_TRUE(parsedProjection->wantSortKey());
+
+ ASSERT_FALSE(parsedProjection->requiresDocument());
+ ASSERT_FALSE(parsedProjection->requiresMatchDetails());
+ ASSERT_FALSE(parsedProjection->wantGeoNearDistance());
+ ASSERT_FALSE(parsedProjection->wantGeoNearPoint());
+ ASSERT_FALSE(parsedProjection->wantIndexKey());
+}
+
+TEST(ParsedProjectionTest, SortKeyMetaAndSlice) {
+ auto parsedProjection =
+ createParsedProjection("{}", "{a: 1, foo: {$meta: 'sortKey'}, _id: 0, b: {$slice: 1}}");
+
+ ASSERT_EQ(parsedProjection->getProjObj(),
+ fromjson("{a: 1, foo: {$meta: 'sortKey'}, _id: 0, b: {$slice: 1}}"));
+ ASSERT_TRUE(parsedProjection->wantSortKey());
+ ASSERT_TRUE(parsedProjection->requiresDocument());
+
+ ASSERT_FALSE(parsedProjection->requiresMatchDetails());
+ ASSERT_FALSE(parsedProjection->wantGeoNearDistance());
+ ASSERT_FALSE(parsedProjection->wantGeoNearPoint());
+ ASSERT_FALSE(parsedProjection->wantIndexKey());
+}
+
+TEST(ParsedProjectionTest, SortKeyMetaAndElemMatch) {
+ auto parsedProjection = createParsedProjection(
+ "{}", "{a: 1, foo: {$meta: 'sortKey'}, _id: 0, b: {$elemMatch: {a: 1}}}");
+
+ ASSERT_EQ(parsedProjection->getProjObj(),
+ fromjson("{a: 1, foo: {$meta: 'sortKey'}, _id: 0, b: {$elemMatch: {a: 1}}}"));
+ ASSERT_TRUE(parsedProjection->wantSortKey());
+ ASSERT_TRUE(parsedProjection->requiresDocument());
+
+ ASSERT_FALSE(parsedProjection->requiresMatchDetails());
+ ASSERT_FALSE(parsedProjection->wantGeoNearDistance());
+ ASSERT_FALSE(parsedProjection->wantGeoNearPoint());
+ ASSERT_FALSE(parsedProjection->wantIndexKey());
+}
+
+TEST(ParsedProjectionTest, SortKeyMetaAndExclusion) {
+ auto parsedProjection = createParsedProjection("{}", "{a: 0, foo: {$meta: 'sortKey'}, _id: 0}");
+
+ ASSERT_EQ(parsedProjection->getProjObj(), fromjson("{a: 0, foo: {$meta: 'sortKey'}, _id: 0}"));
+ ASSERT_TRUE(parsedProjection->wantSortKey());
+ ASSERT_TRUE(parsedProjection->requiresDocument());
+
+ ASSERT_FALSE(parsedProjection->requiresMatchDetails());
+ ASSERT_FALSE(parsedProjection->wantGeoNearDistance());
+ ASSERT_FALSE(parsedProjection->wantGeoNearPoint());
+ ASSERT_FALSE(parsedProjection->wantIndexKey());
+}
+
//
// DBRef projections
//