diff options
Diffstat (limited to 'src/mongo/db/exec/inclusion_projection_executor_test.cpp')
-rw-r--r-- | src/mongo/db/exec/inclusion_projection_executor_test.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/mongo/db/exec/inclusion_projection_executor_test.cpp b/src/mongo/db/exec/inclusion_projection_executor_test.cpp index efd20cda382..356cced5d60 100644 --- a/src/mongo/db/exec/inclusion_projection_executor_test.cpp +++ b/src/mongo/db/exec/inclusion_projection_executor_test.cpp @@ -1092,6 +1092,62 @@ TEST_F(InclusionProjectionExecutionTestWithFallBackToDefault, ASSERT_DOCUMENT_EQ(expectedProjection, inclusion->serializeTransformation(boost::none)); } +TEST_F(InclusionProjectionExecutionTestWithFallBackToDefault, + ExtractComputedProjectionInProjectShouldNotIncludeId) { + auto inclusion = makeInclusionProjectionWithDefaultPolicies( + BSON("a" << BSON("$sum" << BSON_ARRAY("$myMeta" + << "$_id")))); + + auto r = static_cast<InclusionProjectionExecutor*>(inclusion.get())->getRoot(); + const std::set<StringData> reservedNames{}; + auto [addFields, deleteFlag] = + r->extractComputedProjectionsInProject("myMeta", "meta", reservedNames); + + ASSERT_EQ(addFields.nFields(), 0); + ASSERT_EQ(deleteFlag, false); + + auto expectedProjection = Document(fromjson("{_id: true, a: {$sum: ['$myMeta', '$_id']}}")); + ASSERT_DOCUMENT_EQ(expectedProjection, inclusion->serializeTransformation(boost::none)); +} + +TEST_F(InclusionProjectionExecutionTestWithFallBackToDefault, + ExtractComputedProjectionInProjectShouldNotHideDependentSubFields) { + auto inclusion = makeInclusionProjectionWithDefaultPolicies(BSON("a" + << "$myMeta" + << "b" + << "$a.x")); + + auto r = static_cast<InclusionProjectionExecutor*>(inclusion.get())->getRoot(); + const std::set<StringData> reservedNames{}; + auto [addFields, deleteFlag] = + r->extractComputedProjectionsInProject("myMeta", "meta", reservedNames); + + ASSERT_EQ(addFields.nFields(), 0); + ASSERT_EQ(deleteFlag, false); + + auto expectedProjection = Document(fromjson("{_id: true, a: '$myMeta', b: '$a.x'}")); + ASSERT_DOCUMENT_EQ(expectedProjection, inclusion->serializeTransformation(boost::none)); +} + +TEST_F(InclusionProjectionExecutionTestWithFallBackToDefault, + ExtractComputedProjectionInProjectShouldNotHideDependentSubFieldsWithDottedSibling) { + auto inclusion = makeInclusionProjectionWithDefaultPolicies(BSON("a" + << "$myMeta" + << "c.b" + << "$a.x")); + + auto r = static_cast<InclusionProjectionExecutor*>(inclusion.get())->getRoot(); + const std::set<StringData> reservedNames{}; + auto [addFields, deleteFlag] = + r->extractComputedProjectionsInProject("myMeta", "meta", reservedNames); + + ASSERT_EQ(addFields.nFields(), 0); + ASSERT_EQ(deleteFlag, false); + + auto expectedProjection = Document(fromjson("{_id: true, a: '$myMeta', c: {b: '$a.x'}}")); + ASSERT_DOCUMENT_EQ(expectedProjection, inclusion->serializeTransformation(boost::none)); +} + TEST_F(InclusionProjectionExecutionTestWithFallBackToDefault, ApplyProjectionAfterSplit) { auto inclusion = makeInclusionProjectionWithDefaultPolicies( BSON("a" << true << "computedMeta1" |