summaryrefslogtreecommitdiff
path: root/src/mongo/db/query
diff options
context:
space:
mode:
authorMartin Neupauer <martin.neupauer@mongodb.com>2022-05-19 17:38:37 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-05-19 18:20:19 +0000
commitfaa0a2ecc1630c5b18473f51e9e1a9381c48bf84 (patch)
tree583cdb3766cb163962c80068edd18e4d8e8c91b3 /src/mongo/db/query
parentb065a3b04ab6c14b7a695f0c3f97eaa81b202a36 (diff)
downloadmongo-faa0a2ecc1630c5b18473f51e9e1a9381c48bf84.tar.gz
SERVER-66575 Add support for a left outer join to SBE NLJ
Diffstat (limited to 'src/mongo/db/query')
-rw-r--r--src/mongo/db/query/optimizer/rewrites/path_lower.cpp6
-rw-r--r--src/mongo/db/query/optimizer/syntax/syntax.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/src/mongo/db/query/optimizer/rewrites/path_lower.cpp b/src/mongo/db/query/optimizer/rewrites/path_lower.cpp
index fe149a0a608..6bc3391c727 100644
--- a/src/mongo/db/query/optimizer/rewrites/path_lower.cpp
+++ b/src/mongo/db/query/optimizer/rewrites/path_lower.cpp
@@ -262,6 +262,12 @@ void EvalFilterLowering::transport(ABT& n, const PathCompare& cmp, ABT& c) {
n = make<LambdaAbstraction>(
name,
make<BinaryOp>(cmp.op(), make<Variable>(name), std::exchange(c, make<Blackhole>())));
+ } else if (cmp.op() == Operations::EqMember) {
+ n = make<LambdaAbstraction>(
+ name,
+ make<If>(make<FunctionCall>("isArray", makeSeq(c)),
+ make<FunctionCall>("isMember", makeSeq(make<Variable>(name), c)),
+ make<BinaryOp>(Operations::Eq, make<Variable>(name), c)));
} else {
n = make<LambdaAbstraction>(
name,
diff --git a/src/mongo/db/query/optimizer/syntax/syntax.h b/src/mongo/db/query/optimizer/syntax/syntax.h
index 8efea2659d6..7c46df654d8 100644
--- a/src/mongo/db/query/optimizer/syntax/syntax.h
+++ b/src/mongo/db/query/optimizer/syntax/syntax.h
@@ -138,6 +138,7 @@ inline bool operator!=(const ABT& left, const ABT& right) {
#define PATHSYNTAX_OPNAMES(F) \
/* comparison operations */ \
F(Eq) \
+ F(EqMember) \
F(Neq) \
F(Gt) \
F(Gte) \