diff options
author | Drew Paroski <drew.paroski@mongodb.com> | 2021-09-21 22:23:22 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-09-21 22:57:28 +0000 |
commit | 34bb8ccdba458e000b7b0ce7b6c0c157619fcdd6 (patch) | |
tree | 7b1f99c1089eacc34068ff21578c4c55ef1c91da /src | |
parent | 6f7a69e8d5aef3d924a639c4f8625bc259334ffb (diff) | |
download | mongo-34bb8ccdba458e000b7b0ce7b6c0c157619fcdd6.tar.gz |
Revert "SERVER-51592 Added support for anyElementTrue in SBE"
This reverts commit 130476fc56a711b489525112c855766bd2a1bb23.
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/pipeline/expression.h | 8 | ||||
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder_expression.cpp | 35 | ||||
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder_helpers.h | 4 |
3 files changed, 7 insertions, 40 deletions
diff --git a/src/mongo/db/pipeline/expression.h b/src/mongo/db/pipeline/expression.h index 40bc488771d..f696152ec59 100644 --- a/src/mongo/db/pipeline/expression.h +++ b/src/mongo/db/pipeline/expression.h @@ -1001,9 +1001,13 @@ public: class ExpressionAnyElementTrue final : public ExpressionFixedArity<ExpressionAnyElementTrue, 1> { public: explicit ExpressionAnyElementTrue(ExpressionContext* const expCtx) - : ExpressionFixedArity<ExpressionAnyElementTrue, 1>(expCtx) {} + : ExpressionFixedArity<ExpressionAnyElementTrue, 1>(expCtx) { + expCtx->sbeCompatible = false; + } ExpressionAnyElementTrue(ExpressionContext* const expCtx, ExpressionVector&& children) - : ExpressionFixedArity<ExpressionAnyElementTrue, 1>(expCtx, std::move(children)) {} + : ExpressionFixedArity<ExpressionAnyElementTrue, 1>(expCtx, std::move(children)) { + expCtx->sbeCompatible = false; + } Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; diff --git a/src/mongo/db/query/sbe_stage_builder_expression.cpp b/src/mongo/db/query/sbe_stage_builder_expression.cpp index 90dee12759a..4e25a8e18a9 100644 --- a/src/mongo/db/query/sbe_stage_builder_expression.cpp +++ b/src/mongo/db/query/sbe_stage_builder_expression.cpp @@ -849,40 +849,7 @@ public: visitMultiBranchLogicExpression(expr, sbe::EPrimBinary::logicAnd); } void visit(const ExpressionAnyElementTrue* expr) final { - auto [inputSlot, stage] = projectEvalExpr(_context->popEvalExpr(), - _context->extractCurrentEvalStage(), - _context->planNodeId, - _context->state.slotIdGenerator); - - auto fromBranch = makeFilter<false>( - std::move(stage), - makeBinaryOp(sbe::EPrimBinary::logicOr, - makeFillEmptyFalse(makeFunction("isArray", makeVariable(inputSlot))), - makeFail(5159200, "$anyElementTrue's argument must be an array")), - _context->planNodeId); - - auto innerOutputSlot = _context->state.slotId(); - auto innerBranch = makeProject(makeLimitCoScanStage(_context->planNodeId), - _context->planNodeId, - innerOutputSlot, - generateCoerceToBoolExpression(inputSlot)); - - auto traverseSlot = _context->state.slotId(); - auto traverseStage = makeTraverse(std::move(fromBranch), - std::move(innerBranch), - inputSlot, - traverseSlot, - innerOutputSlot, - makeBinaryOp(sbe::EPrimBinary::logicOr, - makeVariable(traverseSlot), - makeVariable(innerOutputSlot)), - makeVariable(traverseSlot), - _context->planNodeId, - 1, - _context->getLexicalEnvironment()); - - _context->pushExpr(makeFillEmptyFalse(makeVariable(traverseSlot)), - std::move(traverseStage)); + unsupportedExpression(expr->getOpName()); } void visit(const ExpressionArray* expr) final { unsupportedExpression(expr->getOpName()); diff --git a/src/mongo/db/query/sbe_stage_builder_helpers.h b/src/mongo/db/query/sbe_stage_builder_helpers.h index 46f41471ac0..c5a63a3b002 100644 --- a/src/mongo/db/query/sbe_stage_builder_helpers.h +++ b/src/mongo/db/query/sbe_stage_builder_helpers.h @@ -216,10 +216,6 @@ std::unique_ptr<sbe::EExpression> makeVariable(sbe::value::SlotId slotId); std::unique_ptr<sbe::EExpression> makeVariable(sbe::FrameId frameId, sbe::value::SlotId slotId); -inline auto makeFail(int code, StringData errorMessage) { - return sbe::makeE<sbe::EFail>(ErrorCodes::Error{code}, errorMessage); -} - /** * Check if expression returns Nothing and return null if so. Otherwise, return the expression. */ |