diff options
author | Martin Neupauer <martin.neupauer@mongodb.com> | 2022-05-19 17:38:37 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-05-19 18:20:19 +0000 |
commit | faa0a2ecc1630c5b18473f51e9e1a9381c48bf84 (patch) | |
tree | 583cdb3766cb163962c80068edd18e4d8e8c91b3 /src/mongo/db/query | |
parent | b065a3b04ab6c14b7a695f0c3f97eaa81b202a36 (diff) | |
download | mongo-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.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/query/optimizer/syntax/syntax.h | 1 |
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) \ |