diff options
Diffstat (limited to 'src/mongo/db/pipeline/document_source_bucket.cpp')
| -rw-r--r-- | src/mongo/db/pipeline/document_source_bucket.cpp | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/mongo/db/pipeline/document_source_bucket.cpp b/src/mongo/db/pipeline/document_source_bucket.cpp index acf56f771b9..4de8daee491 100644 --- a/src/mongo/db/pipeline/document_source_bucket.cpp +++ b/src/mongo/db/pipeline/document_source_bucket.cpp @@ -71,12 +71,6 @@ list<intrusive_ptr<DocumentSource>> DocumentSourceBucket::createFromBson( BSONElement groupByField; Value defaultValue; - // Validating the input boundaries and default value requires a correct collation. We may not - // have this at parse time if we are not parsing for the purpose of executing the queries (see - // SERVER-87166), so we should skip the validation for that case. - const bool shouldValidateInputRanges = - pExpCtx->mongoProcessInterface->isExpectedToExecuteQueries(); - bool outputFieldSpecified = false; for (auto&& argument : bucketObj) { const auto argName = argument.fieldNameStringData(); @@ -84,10 +78,10 @@ list<intrusive_ptr<DocumentSource>> DocumentSourceBucket::createFromBson( groupByField = argument; const bool groupByIsExpressionInObject = groupByField.type() == BSONType::Object && - groupByField.embeddedObject().firstElementFieldNameStringData().startsWith("$"); + groupByField.embeddedObject().firstElementFieldName()[0] == '$'; - const bool groupByIsPrefixedPath = groupByField.type() == BSONType::String && - groupByField.valueStringData().startsWith("$"); + const bool groupByIsPrefixedPath = + groupByField.type() == BSONType::String && groupByField.valueStringData()[0] == '$'; uassert(40202, str::stream() << "The $bucket 'groupBy' field must be defined as a $-prefixed " "path or an expression, but found: " @@ -135,8 +129,7 @@ list<intrusive_ptr<DocumentSource>> DocumentSourceBucket::createFromBson( << "The 'boundaries' option to $bucket must be sorted, but elements " << i - 1 << " and " << i << " are not in ascending order (" << lower.toString() << " is not less than " << upper.toString() << ").", - !shouldValidateInputRanges || - pExpCtx->getValueComparator().evaluate(lower < upper)); + pExpCtx->getValueComparator().evaluate(lower < upper)); } } else if ("default" == argName) { // If there is a default, make sure that it parses to a constant expression then add @@ -173,9 +166,8 @@ list<intrusive_ptr<DocumentSource>> DocumentSourceBucket::createFromBson( Value lowerValue = boundaryValues.front(); Value upperValue = boundaryValues.back(); - if (shouldValidateInputRanges && - canonicalizeBSONType(defaultValue.getType()) == - canonicalizeBSONType(lowerValue.getType())) { + if (canonicalizeBSONType(defaultValue.getType()) == + canonicalizeBSONType(lowerValue.getType())) { // If the default has the same canonical type as the bucket's boundaries, then make sure the // default is less than the lowest boundary or greater than or equal to the highest // boundary. |
