diff options
Diffstat (limited to 'src/mongo/db/matcher/schema')
9 files changed, 27 insertions, 103 deletions
diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_all_elem_match_from_index.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_all_elem_match_from_index.cpp index 97ceacf1e01..b78faffbae9 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_all_elem_match_from_index.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_all_elem_match_from_index.cpp @@ -78,20 +78,8 @@ void InternalSchemaAllElemMatchFromIndexMatchExpression::debugString(StringBuild BSONObj InternalSchemaAllElemMatchFromIndexMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder allElemMatchBob; - BSONArrayBuilder subArray(allElemMatchBob.subarrayStart(kName)); - if (opts.replacementForLiteralArgs) { - subArray.append(opts.replacementForLiteralArgs.get()); - } else { - subArray.append(_index); - } - { - BSONObjBuilder eBuilder(subArray.subobjStart()); - _expression->getFilter()->serialize(&eBuilder, opts); - eBuilder.doneFast(); - } - subArray.doneFast(); - return allElemMatchBob.obj(); + return BSON(kName << BSON_ARRAY(opts.serializeLiteral(_index) + << _expression->getFilter()->serialize(opts))); } MatchExpression::ExpressionOptimizerFunc diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_allowed_properties.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_allowed_properties.cpp index c9a76a5d61f..1e2db96da10 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_allowed_properties.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_allowed_properties.cpp @@ -128,26 +128,14 @@ void InternalSchemaAllowedPropertiesMatchExpression::serialize(BSONObjBuilder* b std::vector<StringData> sortedProperties(_properties.begin(), _properties.end()); std::sort(sortedProperties.begin(), sortedProperties.end()); - if (opts.replacementForLiteralArgs) { - expressionBuilder.append("properties", opts.replacementForLiteralArgs.get()); - expressionBuilder.append("namePlaceholder", opts.replacementForLiteralArgs.get()); - } else { - expressionBuilder.append("properties", sortedProperties); - expressionBuilder.append("namePlaceholder", _namePlaceholder); - } + opts.appendLiteral(&expressionBuilder, "properties", sortedProperties); + opts.appendLiteral(&expressionBuilder, "namePlaceholder", _namePlaceholder); BSONArrayBuilder patternPropertiesBuilder(expressionBuilder.subarrayStart("patternProperties")); - for (auto&& item : _patternProperties) { - BSONObjBuilder itemBuilder(patternPropertiesBuilder.subobjStart()); - if (opts.replacementForLiteralArgs) { - itemBuilder.appendRegex("regex", opts.replacementForLiteralArgs.get()); - } else { - itemBuilder.appendRegex("regex", item.first.rawRegex); - } - - BSONObjBuilder subexpressionBuilder(itemBuilder.subobjStart("expression")); - item.second->getFilter()->serialize(&subexpressionBuilder, opts); - subexpressionBuilder.doneFast(); + for (auto&& [pattern, expression] : _patternProperties) { + patternPropertiesBuilder << BSON( + "regex" << opts.serializeLiteral(BSONRegEx(pattern.rawRegex)) << "expression" + << expression->getFilter()->serialize(opts)); } patternPropertiesBuilder.doneFast(); diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_eq.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_eq.cpp index 43c0777f587..c41a1e51c4d 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_eq.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_eq.cpp @@ -64,20 +64,15 @@ void InternalSchemaEqMatchExpression::debugString(StringBuilder& debug, BSONObj InternalSchemaEqMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder eqObj; - if (opts.redactIdentifiers || opts.replacementForLiteralArgs) { - if (_rhsElem.isABSONObj()) { - BSONObjBuilder exprSpec(eqObj.subobjStart(kName)); - opts.redactObjToBuilder(&exprSpec, _rhsElem.Obj()); - exprSpec.done(); - return eqObj.obj(); - } else if (opts.replacementForLiteralArgs) { - // If the element is not an object it must be a literal. - return BSON(kName << opts.replacementForLiteralArgs.get()); - } + if (opts.literalPolicy != LiteralSerializationPolicy::kUnchanged && _rhsElem.isABSONObj()) { + BSONObjBuilder eqObj; + BSONObjBuilder exprSpec(eqObj.subobjStart(kName)); + opts.redactObjToBuilder(&exprSpec, _rhsElem.Obj()); + exprSpec.done(); + return eqObj.obj(); } - eqObj.appendAs(_rhsElem, kName); - return eqObj.obj(); + // If the element is not an object it must be a literal. + return BSON(kName << opts.serializeLiteral(_rhsElem)); } bool InternalSchemaEqMatchExpression::equivalent(const MatchExpression* other) const { diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_fmod.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_fmod.cpp index 93280d7cb5a..cafbd4784a8 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_fmod.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_fmod.cpp @@ -73,18 +73,8 @@ void InternalSchemaFmodMatchExpression::debugString(StringBuilder& debug, BSONObj InternalSchemaFmodMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder objMatchBob; - BSONArrayBuilder arrBuilder(objMatchBob.subarrayStart("$_internalSchemaFmod")); - // Divisor and Remainder are always literals. - if (opts.replacementForLiteralArgs) { - arrBuilder.append(opts.replacementForLiteralArgs.get()); - arrBuilder.append(opts.replacementForLiteralArgs.get()); - } else { - arrBuilder.append(_divisor); - arrBuilder.append(_remainder); - } - arrBuilder.doneFast(); - return objMatchBob.obj(); + return BSON("$_internalSchemaFmod"_sd << BSON_ARRAY(opts.serializeLiteral(_divisor) + << opts.serializeLiteral(_remainder))); } bool InternalSchemaFmodMatchExpression::equivalent(const MatchExpression* other) const { diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_match_array_index.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_match_array_index.cpp index fd1ce5f670e..e280ebc54a9 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_match_array_index.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_match_array_index.cpp @@ -68,28 +68,11 @@ bool InternalSchemaMatchArrayIndexMatchExpression::equivalent(const MatchExpress BSONObj InternalSchemaMatchArrayIndexMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder objBuilder; - { - BSONObjBuilder matchArrayElemSubobj(objBuilder.subobjStart(kName)); - if (opts.replacementForLiteralArgs) { - matchArrayElemSubobj.append("index", opts.replacementForLiteralArgs.get()); - } else { - matchArrayElemSubobj.append("index", _index); - } - if (auto placeHolder = _expression->getPlaceholder()) { - matchArrayElemSubobj.append("namePlaceholder", - opts.serializeFieldPathFromString(placeHolder.get())); - } else { - matchArrayElemSubobj.append("namePlaceholder", ""); - } - { - BSONObjBuilder subexprSubObj(matchArrayElemSubobj.subobjStart("expression")); - _expression->getFilter()->serialize(&subexprSubObj, opts); - subexprSubObj.doneFast(); - } - matchArrayElemSubobj.doneFast(); - } - return objBuilder.obj(); + return BSON( + kName << BSON( + "index" << opts.serializeLiteral(_index) << "namePlaceholder" + << opts.serializeFieldPathFromString(_expression->getPlaceholder().value_or("")) + << "expression" << _expression->getFilter()->serialize(opts))); } std::unique_ptr<MatchExpression> InternalSchemaMatchArrayIndexMatchExpression::clone() const { diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_num_array_items.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_num_array_items.cpp index 3ef7921faf3..c552364b923 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_num_array_items.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_num_array_items.cpp @@ -52,13 +52,7 @@ void InternalSchemaNumArrayItemsMatchExpression::debugString(StringBuilder& debu BSONObj InternalSchemaNumArrayItemsMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder objBuilder; - if (opts.replacementForLiteralArgs) { - objBuilder.append(_name, opts.replacementForLiteralArgs.get()); - } else { - objBuilder.append(_name, _numItems); - } - return objBuilder.obj(); + return BSON(_name << opts.serializeLiteral(_numItems)); } bool InternalSchemaNumArrayItemsMatchExpression::equivalent(const MatchExpression* other) const { diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_num_properties.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_num_properties.cpp index 94fa8206616..8a74f69325a 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_num_properties.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_num_properties.cpp @@ -44,11 +44,7 @@ void InternalSchemaNumPropertiesMatchExpression::debugString(StringBuilder& debu void InternalSchemaNumPropertiesMatchExpression::serialize(BSONObjBuilder* out, SerializationOptions opts) const { - if (opts.replacementForLiteralArgs) { - out->append(_name, opts.replacementForLiteralArgs.get()); - } else { - out->append(_name, _numProperties); - } + opts.appendLiteral(out, _name, _numProperties); } bool InternalSchemaNumPropertiesMatchExpression::equivalent(const MatchExpression* other) const { diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_object_match.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_object_match.cpp index 8e8bf6c6f7a..760a57b1102 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_object_match.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_object_match.cpp @@ -64,11 +64,7 @@ void InternalSchemaObjectMatchExpression::debugString(StringBuilder& debug, BSONObj InternalSchemaObjectMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder objMatchBob; - BSONObjBuilder subBob(objMatchBob.subobjStart(kName)); - _sub->serialize(&subBob, opts); - subBob.doneFast(); - return objMatchBob.obj(); + return BSON(kName << _sub->serialize(opts)); } bool InternalSchemaObjectMatchExpression::equivalent(const MatchExpression* other) const { diff --git a/src/mongo/db/matcher/schema/expression_internal_schema_str_length.cpp b/src/mongo/db/matcher/schema/expression_internal_schema_str_length.cpp index 114e24e3ca9..54cc8718d97 100644 --- a/src/mongo/db/matcher/schema/expression_internal_schema_str_length.cpp +++ b/src/mongo/db/matcher/schema/expression_internal_schema_str_length.cpp @@ -52,13 +52,7 @@ void InternalSchemaStrLengthMatchExpression::debugString(StringBuilder& debug, BSONObj InternalSchemaStrLengthMatchExpression::getSerializedRightHandSide( SerializationOptions opts) const { - BSONObjBuilder objBuilder; - if (opts.replacementForLiteralArgs) { - objBuilder.append(_name, opts.replacementForLiteralArgs.get()); - } else { - objBuilder.append(_name, _strLen); - } - return objBuilder.obj(); + return BSON(_name << opts.serializeLiteral(_strLen)); } bool InternalSchemaStrLengthMatchExpression::equivalent(const MatchExpression* other) const { |