summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_match.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_match.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_match.cpp62
1 files changed, 32 insertions, 30 deletions
diff --git a/src/mongo/db/pipeline/document_source_match.cpp b/src/mongo/db/pipeline/document_source_match.cpp
index 8cef470c453..e34d9f2d1a5 100644
--- a/src/mongo/db/pipeline/document_source_match.cpp
+++ b/src/mongo/db/pipeline/document_source_match.cpp
@@ -34,6 +34,7 @@
#include "mongo/db/matcher/expression_algo.h"
#include "mongo/db/matcher/expression_array.h"
#include "mongo/db/matcher/expression_leaf.h"
+#include "mongo/db/matcher/expression_parser.h"
#include "mongo/db/matcher/extensions_callback_noop.h"
#include "mongo/db/pipeline/document.h"
#include "mongo/db/pipeline/expression.h"
@@ -196,30 +197,31 @@ Document redactSafePortionDollarOps(BSONObj expr) {
continue;
}
- switch (BSONObj::MatchType(field.getGtLtOp(BSONObj::Equality))) {
+ switch (*MatchExpressionParser::parsePathAcceptingKeyword(field,
+ PathAcceptingKeyword::EQUALITY)) {
// These are always ok
- case BSONObj::opTYPE:
- case BSONObj::opREGEX:
- case BSONObj::opOPTIONS:
- case BSONObj::opMOD:
- case BSONObj::opBITS_ALL_SET:
- case BSONObj::opBITS_ALL_CLEAR:
- case BSONObj::opBITS_ANY_SET:
- case BSONObj::opBITS_ANY_CLEAR:
+ case PathAcceptingKeyword::TYPE:
+ case PathAcceptingKeyword::REGEX:
+ case PathAcceptingKeyword::OPTIONS:
+ case PathAcceptingKeyword::MOD:
+ case PathAcceptingKeyword::BITS_ALL_SET:
+ case PathAcceptingKeyword::BITS_ALL_CLEAR:
+ case PathAcceptingKeyword::BITS_ANY_SET:
+ case PathAcceptingKeyword::BITS_ANY_CLEAR:
output[field.fieldNameStringData()] = Value(field);
break;
// These are ok if the type of the rhs is allowed in comparisons
- case BSONObj::LTE:
- case BSONObj::GTE:
- case BSONObj::LT:
- case BSONObj::GT:
+ case PathAcceptingKeyword::LESS_THAN_OR_EQUAL:
+ case PathAcceptingKeyword::GREATER_THAN_OR_EQUAL:
+ case PathAcceptingKeyword::LESS_THAN:
+ case PathAcceptingKeyword::GREATER_THAN:
if (isTypeRedactSafeInComparison(field.type()))
output[field.fieldNameStringData()] = Value(field);
break;
// $in must be all-or-nothing (like $or). Can't include subset of elements.
- case BSONObj::opIN: {
+ case PathAcceptingKeyword::IN_EXPR: {
bool allOk = true;
BSONForEach(elem, field.Obj()) {
if (!isTypeRedactSafeInComparison(elem.type())) {
@@ -234,7 +236,7 @@ Document redactSafePortionDollarOps(BSONObj expr) {
break;
}
- case BSONObj::opALL: {
+ case PathAcceptingKeyword::ALL: {
// $all can include subset of elements (like $and).
vector<Value> matches;
BSONForEach(elem, field.Obj()) {
@@ -249,7 +251,7 @@ Document redactSafePortionDollarOps(BSONObj expr) {
break;
}
- case BSONObj::opELEM_MATCH: {
+ case PathAcceptingKeyword::ELEM_MATCH: {
BSONObj subIn = field.Obj();
Document subOut;
if (subIn.firstElementFieldName()[0] == '$') {
@@ -265,20 +267,20 @@ Document redactSafePortionDollarOps(BSONObj expr) {
}
// These are never allowed
- case BSONObj::Equality: // This actually means unknown
- case BSONObj::opNEAR:
- case BSONObj::NE:
- case BSONObj::opSIZE:
- case BSONObj::NIN:
- case BSONObj::opEXISTS:
- case BSONObj::opWITHIN:
- case BSONObj::opGEO_INTERSECTS:
- case BSONObj::opINTERNAL_SCHEMA_MIN_ITEMS:
- case BSONObj::opINTERNAL_SCHEMA_MAX_ITEMS:
- case BSONObj::opINTERNAL_SCHEMA_UNIQUE_ITEMS:
- case BSONObj::opINTERNAL_SCHEMA_OBJECT_MATCH:
- case BSONObj::opINTERNAL_SCHEMA_MIN_LENGTH:
- case BSONObj::opINTERNAL_SCHEMA_MAX_LENGTH:
+ case PathAcceptingKeyword::EQUALITY: // This actually means unknown
+ case PathAcceptingKeyword::GEO_NEAR:
+ case PathAcceptingKeyword::NOT_EQUAL:
+ case PathAcceptingKeyword::SIZE:
+ case PathAcceptingKeyword::NOT_IN:
+ case PathAcceptingKeyword::EXISTS:
+ case PathAcceptingKeyword::WITHIN:
+ case PathAcceptingKeyword::GEO_INTERSECTS:
+ case PathAcceptingKeyword::INTERNAL_SCHEMA_MIN_ITEMS:
+ case PathAcceptingKeyword::INTERNAL_SCHEMA_MAX_ITEMS:
+ case PathAcceptingKeyword::INTERNAL_SCHEMA_UNIQUE_ITEMS:
+ case PathAcceptingKeyword::INTERNAL_SCHEMA_OBJECT_MATCH:
+ case PathAcceptingKeyword::INTERNAL_SCHEMA_MIN_LENGTH:
+ case PathAcceptingKeyword::INTERNAL_SCHEMA_MAX_LENGTH:
continue;
}
}