summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/canonical_query_encoder.cpp
diff options
context:
space:
mode:
authorAlexander Ignatyev <alexander.ignatyev@mongodb.com>2022-04-26 18:01:18 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-04-26 19:47:33 +0000
commit9ca1d39e1ad5317bf3e8dcbef937f165f991d74c (patch)
treea794ee1bea2a3dde24b3e1001dd5932f49dec560 /src/mongo/db/query/canonical_query_encoder.cpp
parent220004ef366d4ac10fc05a9c4a09224008889198 (diff)
downloadmongo-9ca1d39e1ad5317bf3e8dcbef937f165f991d74c.tar.gz
SERVER-65793 Do not parameterize queries with TEXT match expression node
Diffstat (limited to 'src/mongo/db/query/canonical_query_encoder.cpp')
-rw-r--r--src/mongo/db/query/canonical_query_encoder.cpp52
1 files changed, 40 insertions, 12 deletions
diff --git a/src/mongo/db/query/canonical_query_encoder.cpp b/src/mongo/db/query/canonical_query_encoder.cpp
index ee6efa914b1..c03d5ee2e88 100644
--- a/src/mongo/db/query/canonical_query_encoder.cpp
+++ b/src/mongo/db/query/canonical_query_encoder.cpp
@@ -724,21 +724,39 @@ public:
void visit(const ModMatchExpression* expr) final {
auto divisorParam = expr->getDivisorInputParamId();
auto remainderParam = expr->getRemainderInputParamId();
- tassert(6512901, "$mod expression should have divisor param", divisorParam);
- tassert(6512902, "$mod expression should have remainder param", remainderParam);
+ if (divisorParam) {
+ tassert(6512902,
+ "$mod expression should have divisor and remainder params",
+ remainderParam);
- encodeParamMarker(*divisorParam);
- encodeParamMarker(*remainderParam);
+ encodeParamMarker(*divisorParam);
+ encodeParamMarker(*remainderParam);
+ } else {
+ tassert(6579300,
+ "If divisor param is not set in $mod expression reminder param must be unset "
+ "as well",
+ !remainderParam);
+ encodeFull(expr);
+ }
}
void visit(const RegexMatchExpression* expr) final {
auto sourceRegexParam = expr->getSourceRegexInputParamId();
auto compiledRegexParam = expr->getCompiledRegexInputParamId();
- tassert(6512903, "regex expression should have source param", sourceRegexParam);
- tassert(6512904, "regex expression should have compiled param", compiledRegexParam);
+ if (sourceRegexParam) {
+ tassert(6512904,
+ "regex expression should have source and compiled params",
+ compiledRegexParam);
- encodeParamMarker(*sourceRegexParam);
- encodeParamMarker(*compiledRegexParam);
+ encodeParamMarker(*sourceRegexParam);
+ encodeParamMarker(*compiledRegexParam);
+ } else {
+ tassert(6579301,
+ "If source param is not set in $regex expression compiled param must be unset "
+ "as well",
+ !compiledRegexParam);
+ encodeFull(expr);
+ }
}
void visit(const SizeMatchExpression* expr) final {
@@ -898,11 +916,21 @@ private:
void encodeBitTestExpression(const BitTestMatchExpression* expr) {
auto bitPositionsParam = expr->getBitPositionsParamId();
auto bitMaskParam = expr->getBitMaskParamId();
- tassert(6512905, "bit-test expression should have bit positions param", bitPositionsParam);
- tassert(6512906, "$mod expression should have bitmask param", bitMaskParam);
+ if (bitPositionsParam) {
+
+ tassert(6512906,
+ "bit-test expression should have bit positions and bitmask params",
+ bitMaskParam);
- encodeParamMarker(*bitPositionsParam);
- encodeParamMarker(*bitMaskParam);
+ encodeParamMarker(*bitPositionsParam);
+ encodeParamMarker(*bitMaskParam);
+ } else {
+ tassert(6579302,
+ "If positions param is not set in a bit-test expression bitmask param must be "
+ "unset as well",
+ !bitMaskParam);
+ encodeFull(expr);
+ }
}
/**