summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/schema
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/matcher/schema')
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_all_elem_match_from_index.cpp16
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_allowed_properties.cpp24
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_eq.cpp21
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_fmod.cpp14
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_match_array_index.cpp27
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_num_array_items.cpp8
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_num_properties.cpp6
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_object_match.cpp6
-rw-r--r--src/mongo/db/matcher/schema/expression_internal_schema_str_length.cpp8
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 {