summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/query/sbe_stage_builder_filter.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/mongo/db/query/sbe_stage_builder_filter.cpp b/src/mongo/db/query/sbe_stage_builder_filter.cpp
index 5fa173871af..ec303984939 100644
--- a/src/mongo/db/query/sbe_stage_builder_filter.cpp
+++ b/src/mongo/db/query/sbe_stage_builder_filter.cpp
@@ -554,9 +554,7 @@ public:
unsupportedExpression(expr);
}
void visit(const EqualityMatchExpression* expr) final {}
- void visit(const ExistsMatchExpression* expr) final {
- unsupportedExpression(expr);
- }
+ void visit(const ExistsMatchExpression* expr) final {}
void visit(const ExprMatchExpression* expr) final {
unsupportedExpression(expr);
}
@@ -706,7 +704,14 @@ public:
generateTraverseForComparisonPredicate(_context, expr, sbe::EPrimBinary::eq);
}
- void visit(const ExistsMatchExpression* expr) final {}
+ void visit(const ExistsMatchExpression* expr) final {
+ auto makeEExprFn = [](sbe::value::SlotId inputSlot) {
+ return sbe::makeE<sbe::EFunction>("exists",
+ sbe::makeEs(sbe::makeE<sbe::EVariable>(inputSlot)));
+ };
+ generateTraverse(_context, expr, std::move(makeEExprFn));
+ }
+
void visit(const ExprMatchExpression* expr) final {}
void visit(const GTEMatchExpression* expr) final {