diff options
author | Katherine Wu <katherine.wu@mongodb.com> | 2021-02-01 09:59:12 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-01 22:02:40 +0000 |
commit | 120901099ba270b557054bc8ef06ac87418c0834 (patch) | |
tree | fb2474b3c7621cd8b68325f71eac307d0e1b0518 /src/mongo/db/query/sbe_stage_builder_filter.cpp | |
parent | 060d4ef8514110ff4d03867b8f704cf9de307905 (diff) | |
download | mongo-120901099ba270b557054bc8ef06ac87418c0834.tar.gz |
SERVER-39943 Create match expressions for aggregation $gt/$gte/$lt/$lte and add to $expr rewrite
Diffstat (limited to 'src/mongo/db/query/sbe_stage_builder_filter.cpp')
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder_filter.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/mongo/db/query/sbe_stage_builder_filter.cpp b/src/mongo/db/query/sbe_stage_builder_filter.cpp index 5b3e6672a15..b33b48efb6b 100644 --- a/src/mongo/db/query/sbe_stage_builder_filter.cpp +++ b/src/mongo/db/query/sbe_stage_builder_filter.cpp @@ -43,7 +43,7 @@ #include "mongo/db/matcher/expression_array.h" #include "mongo/db/matcher/expression_expr.h" #include "mongo/db/matcher/expression_geo.h" -#include "mongo/db/matcher/expression_internal_expr_eq.h" +#include "mongo/db/matcher/expression_internal_expr_comparison.h" #include "mongo/db/matcher/expression_leaf.h" #include "mongo/db/matcher/expression_text.h" #include "mongo/db/matcher/expression_text_noop.h" @@ -700,6 +700,10 @@ public: } void visit(const InMatchExpression* expr) final {} void visit(const InternalExprEqMatchExpression* expr) final {} + void visit(const InternalExprGTMatchExpression* expr) final {} + void visit(const InternalExprGTEMatchExpression* expr) final {} + void visit(const InternalExprLTMatchExpression* expr) final {} + void visit(const InternalExprLTEMatchExpression* expr) final {} void visit(const InternalSchemaAllElemMatchFromIndexMatchExpression* expr) final { unsupportedExpression(expr); } @@ -1185,13 +1189,24 @@ public: LeafTraversalMode::kArrayAndItsElements); } } - + // The following are no-ops. The internal expr comparison match expression are produced + // internally by rewriting an $expr expression to an AND($expr, $_internalExpr[OP]), which can + // later be eliminated by via a conversion into EXACT index bounds, or remains present. In the + // latter case we can simply ignore it, as the result of AND($expr, $_internalExpr[OP]) is equal + // to just $expr. void visit(const InternalExprEqMatchExpression* expr) final { - // This is a no-op. The $_internalExprEq match expression is produced internally by - // rewriting an $expr expression to an AND($expr, $_internalExprEq), which can later be - // eliminated by via a conversion into EXACT index bounds, or remains present. In the latter - // case we can simply ignore it, as the result of AND($expr, $_internalExprEq) is equal to - // just $expr. + generateAlwaysBoolean(_context, true); + } + void visit(const InternalExprGTMatchExpression* expr) final { + generateAlwaysBoolean(_context, true); + } + void visit(const InternalExprGTEMatchExpression* expr) final { + generateAlwaysBoolean(_context, true); + } + void visit(const InternalExprLTMatchExpression* expr) final { + generateAlwaysBoolean(_context, true); + } + void visit(const InternalExprLTEMatchExpression* expr) final { generateAlwaysBoolean(_context, true); } @@ -1388,6 +1403,10 @@ public: void visit(const GeoNearMatchExpression* expr) final {} void visit(const InMatchExpression* expr) final {} void visit(const InternalExprEqMatchExpression* expr) final {} + void visit(const InternalExprGTMatchExpression* expr) final {} + void visit(const InternalExprGTEMatchExpression* expr) final {} + void visit(const InternalExprLTMatchExpression* expr) final {} + void visit(const InternalExprLTEMatchExpression* expr) final {} void visit(const InternalSchemaAllElemMatchFromIndexMatchExpression* expr) final {} void visit(const InternalSchemaAllowedPropertiesMatchExpression* expr) final {} void visit(const InternalSchemaBinDataEncryptedTypeExpression* expr) final {} |