diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder_filter.cpp | 13 |
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 { |