diff options
Diffstat (limited to 'src/mongo/db/pipeline/document_source_facet.cpp')
-rw-r--r-- | src/mongo/db/pipeline/document_source_facet.cpp | 15 |
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() { |