summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/matcher/expression.cpp')
-rw-r--r--src/mongo/db/matcher/expression.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mongo/db/matcher/expression.cpp b/src/mongo/db/matcher/expression.cpp
index bb13e28a9e0..a228fd86916 100644
--- a/src/mongo/db/matcher/expression.cpp
+++ b/src/mongo/db/matcher/expression.cpp
@@ -175,6 +175,74 @@ void MatchExpression::addDependencies(DepsTracker* deps) const {
_doAddDependencies(deps);
}
+bool MatchExpression::isInternalNodeWithPath(MatchType m) {
+ switch (m) {
+ case ELEM_MATCH_OBJECT:
+ case ELEM_MATCH_VALUE:
+ case INTERNAL_SCHEMA_OBJECT_MATCH:
+ case INTERNAL_SCHEMA_MATCH_ARRAY_INDEX:
+ // This node generates a child expression with a field that isn't prefixed by the path
+ // of the node.
+ case INTERNAL_SCHEMA_ALL_ELEM_MATCH_FROM_INDEX:
+ // This node generates a child expression with a field that isn't prefixed by the path
+ // of the node.
+ return true;
+
+ case AND:
+ case OR:
+ case SIZE:
+ case EQ:
+ case LTE:
+ case LT:
+ case GT:
+ case GTE:
+ case REGEX:
+ case MOD:
+ case EXISTS:
+ case MATCH_IN:
+ case BITS_ALL_SET:
+ case BITS_ALL_CLEAR:
+ case BITS_ANY_SET:
+ case BITS_ANY_CLEAR:
+ case NOT:
+ case NOR:
+ case TYPE_OPERATOR:
+ case GEO:
+ case WHERE:
+ case EXPRESSION:
+ case ALWAYS_FALSE:
+ case ALWAYS_TRUE:
+ case GEO_NEAR:
+ case TEXT:
+ case INTERNAL_2D_POINT_IN_ANNULUS:
+ case INTERNAL_BUCKET_GEO_WITHIN:
+ case INTERNAL_EXPR_EQ:
+ case INTERNAL_EXPR_GT:
+ case INTERNAL_EXPR_GTE:
+ case INTERNAL_EXPR_LT:
+ case INTERNAL_EXPR_LTE:
+ case INTERNAL_SCHEMA_ALLOWED_PROPERTIES:
+ case INTERNAL_SCHEMA_BIN_DATA_ENCRYPTED_TYPE:
+ case INTERNAL_SCHEMA_BIN_DATA_FLE2_ENCRYPTED_TYPE:
+ case INTERNAL_SCHEMA_BIN_DATA_SUBTYPE:
+ case INTERNAL_SCHEMA_COND:
+ case INTERNAL_SCHEMA_EQ:
+ case INTERNAL_SCHEMA_FMOD:
+ case INTERNAL_SCHEMA_MAX_ITEMS:
+ case INTERNAL_SCHEMA_MAX_LENGTH:
+ case INTERNAL_SCHEMA_MAX_PROPERTIES:
+ case INTERNAL_SCHEMA_MIN_ITEMS:
+ case INTERNAL_SCHEMA_MIN_LENGTH:
+ case INTERNAL_SCHEMA_MIN_PROPERTIES:
+ case INTERNAL_SCHEMA_ROOT_DOC_EQ:
+ case INTERNAL_SCHEMA_TYPE:
+ case INTERNAL_SCHEMA_UNIQUE_ITEMS:
+ case INTERNAL_SCHEMA_XOR:
+ return false;
+ }
+ MONGO_UNREACHABLE;
+}
+
MatchExpression::ErrorAnnotation::SchemaAnnotations::SchemaAnnotations(
const BSONObj& jsonSchemaElement) {
auto title = jsonSchemaElement[JSONSchemaParser::kSchemaTitleKeyword];