summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/inclusion_projection_executor_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/inclusion_projection_executor_test.cpp')
-rw-r--r--src/mongo/db/exec/inclusion_projection_executor_test.cpp56
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"