summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_facet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_facet.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_facet.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/mongo/db/pipeline/document_source_facet.cpp b/src/mongo/db/pipeline/document_source_facet.cpp
index ed438ecf15e..88f926b9b41 100644
--- a/src/mongo/db/pipeline/document_source_facet.cpp
+++ b/src/mongo/db/pipeline/document_source_facet.cpp
@@ -117,6 +117,18 @@ StageConstraints::LookupRequirement computeLookupRequirement(
return StageConstraints::LookupRequirement::kAllowed;
}
+StageConstraints::UnionRequirement computeUnionRequirement(
+ const std::vector<DocumentSourceFacet::FacetPipeline>& facets) {
+ for (auto&& facet : facets) {
+ for (auto&& src : facet.pipeline->getSources()) {
+ if (!src->constraints().isAllowedInUnionPipeline()) {
+ return StageConstraints::UnionRequirement::kNotAllowed;
+ }
+ }
+ }
+ return StageConstraints::UnionRequirement::kAllowed;
+}
+
} // namespace
std::unique_ptr<DocumentSourceFacet::LiteParsed> DocumentSourceFacet::LiteParsed::parse(
@@ -253,7 +265,8 @@ StageConstraints DocumentSourceFacet::constraints(Pipeline::SplitState) const {
std::get<StageConstraints::DiskUseRequirement>(diskAndTxnReq),
FacetRequirement::kNotAllowed,
std::get<StageConstraints::TransactionRequirement>(diskAndTxnReq),
- computeLookupRequirement(_facets)};
+ computeLookupRequirement(_facets),
+ computeUnionRequirement(_facets)};
}
bool DocumentSourceFacet::usedDisk() {