diff options
author | Yunhe (John) Wang <yunhe.wang@mongodb.com> | 2015-09-24 15:27:24 -0400 |
---|---|---|
committer | Yunhe (John) Wang <yunhe.wang@mongodb.com> | 2015-10-12 13:50:30 -0400 |
commit | 28a2d6fa3f7fb6659f578d69e6d772ae9be8c25e (patch) | |
tree | 8e5fd9aff1cf072d171f634fd819fdc5a69b09f9 /src/mongo/db/query/parsed_projection_test.cpp | |
parent | 2039dd73fba411967b2b1ead07f3ab2e542e65a1 (diff) | |
download | mongo-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.cpp | 56 |
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 // |