diff options
Diffstat (limited to 'src/mongo/db/views/resolved_view.cpp')
-rw-r--r-- | src/mongo/db/views/resolved_view.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mongo/db/views/resolved_view.cpp b/src/mongo/db/views/resolved_view.cpp index 77577aba02d..4c864be4696 100644 --- a/src/mongo/db/views/resolved_view.cpp +++ b/src/mongo/db/views/resolved_view.cpp @@ -91,11 +91,22 @@ ResolvedView ResolvedView::fromBSON(const BSONObj& commandResponseObj) { mixedSchema = boost::optional<bool>(mixedSchemaElem.boolean()); } + boost::optional<bool> usesExtendedRange = boost::none; + if (auto usesExtendedRangeElem = viewDef[kTimeseriesUsesExtendedRange]) { + uassert(6646910, + str::stream() << "view definition must have " << kTimeseriesUsesExtendedRange + << " of type bool or no such field", + usesExtendedRangeElem.type() == BSONType::Bool); + + usesExtendedRange = boost::optional<bool>(usesExtendedRangeElem.boolean()); + } + return {NamespaceString(viewDef["ns"].valueStringData()), std::move(pipeline), std::move(collationSpec), std::move(timeseriesOptions), - std::move(mixedSchema)}; + std::move(mixedSchema), + std::move(usesExtendedRange)}; } void ResolvedView::serialize(BSONObjBuilder* builder) const { @@ -109,6 +120,10 @@ void ResolvedView::serialize(BSONObjBuilder* builder) const { // Only serialize if it doesn't contain mixed data. if ((_timeseriesMayContainMixedData && !(*_timeseriesMayContainMixedData))) subObj.append(kTimeseriesMayContainMixedData, *_timeseriesMayContainMixedData); + + if ((_timeseriesUsesExtendedRange && (*_timeseriesUsesExtendedRange))) + subObj.append(kTimeseriesUsesExtendedRange, *_timeseriesUsesExtendedRange); + if (!_defaultCollation.isEmpty()) { subObj.append("collation", _defaultCollation); } @@ -151,6 +166,7 @@ AggregateCommandRequest ResolvedView::asExpandedViewAggregation( builder.append(elem); } } + resolvedPipeline[1] = BSON(DocumentSourceInternalConvertBucketIndexStats::kStageName << builder.obj()); } else if (resolvedPipeline.size() >= 1 && @@ -164,6 +180,10 @@ AggregateCommandRequest ResolvedView::asExpandedViewAggregation( } builder.append(DocumentSourceInternalUnpackBucket::kAssumeNoMixedSchemaData, ((_timeseriesMayContainMixedData && !(*_timeseriesMayContainMixedData)))); + + builder.append(DocumentSourceInternalUnpackBucket::kUsesExtendedRange, + ((_timeseriesUsesExtendedRange && *_timeseriesUsesExtendedRange))); + resolvedPipeline[0] = BSON(DocumentSourceInternalUnpackBucket::kStageNameInternal << builder.obj()); } @@ -190,6 +210,9 @@ AggregateCommandRequest ResolvedView::asExpandedViewAggregation( } } expandedRequest.setHint(rewritten); + + // JLR Possibly need to handle inappropriately forcing clustered here. Will likely be + // handled by removing the _id predicate, however. } else { expandedRequest.setHint(request.getHint()); } |