summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/sbe_stage_builder_helpers.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/sbe_stage_builder_helpers.h')
-rw-r--r--src/mongo/db/query/sbe_stage_builder_helpers.h83
1 files changed, 8 insertions, 75 deletions
diff --git a/src/mongo/db/query/sbe_stage_builder_helpers.h b/src/mongo/db/query/sbe_stage_builder_helpers.h
index 1958e3988c6..e1be0c29f26 100644
--- a/src/mongo/db/query/sbe_stage_builder_helpers.h
+++ b/src/mongo/db/query/sbe_stage_builder_helpers.h
@@ -34,7 +34,6 @@
#include <string>
#include <utility>
-#include "mongo/db/exec/sbe/abt/abt_lower.h"
#include "mongo/db/exec/sbe/expressions/expression.h"
#include "mongo/db/exec/sbe/match_path.h"
#include "mongo/db/exec/sbe/stages/filter.h"
@@ -339,8 +338,7 @@ std::pair<sbe::value::SlotId, EvalStage> projectEvalExpr(
EvalExpr expr,
EvalStage stage,
PlanNodeId planNodeId,
- sbe::value::SlotIdGenerator* slotIdGenerator,
- optimizer::SlotVarMap& slotVarMap);
+ sbe::value::SlotIdGenerator* slotIdGenerator);
template <bool IsConst, bool IsEof = false>
EvalStage makeFilter(EvalStage stage,
@@ -440,8 +438,7 @@ using BranchFn = std::function<std::pair<sbe::value::SlotId, EvalStage>(
EvalExpr expr,
EvalStage stage,
PlanNodeId planNodeId,
- sbe::value::SlotIdGenerator* slotIdGenerator,
- optimizer::SlotVarMap& slotVarMap)>;
+ sbe::value::SlotIdGenerator* slotIdGenerator)>;
/**
* Creates a chain of EIf expressions that will inspect each arg in order and return the first
@@ -458,8 +455,7 @@ std::unique_ptr<sbe::EExpression> makeIfNullExpr(
EvalExprStagePair generateUnion(std::vector<EvalExprStagePair> branches,
BranchFn branchFn,
PlanNodeId planNodeId,
- sbe::value::SlotIdGenerator* slotIdGenerator,
- optimizer::SlotVarMap& slotVarMap);
+ sbe::value::SlotIdGenerator* slotIdGenerator);
/**
* Creates limit-1/union stage with specified branches. Each branch is passed to 'branchFn' first.
* If 'branchFn' is not set, expression from branch is simply projected to a slot.
@@ -467,8 +463,7 @@ EvalExprStagePair generateUnion(std::vector<EvalExprStagePair> branches,
EvalExprStagePair generateSingleResultUnion(std::vector<EvalExprStagePair> branches,
BranchFn branchFn,
PlanNodeId planNodeId,
- sbe::value::SlotIdGenerator* slotIdGenerator,
- optimizer::SlotVarMap& slotVarMap);
+ sbe::value::SlotIdGenerator* slotIdGenerator);
/** This helper takes an SBE SlotIdGenerator and an SBE Array and returns an output slot and a
* unwind/project/limit/coscan subtree that streams out the elements of the array one at a time via
@@ -590,7 +585,6 @@ public:
* value. Index part of the constructed state is empty.
*/
virtual Expression makeState(Expression expr) const = 0;
- virtual optimizer::ABT makeState(optimizer::ABT expr) const = 0;
/**
* Creates an expression that constructs an initial state from 'expr'. 'expr' must evaluate to a
@@ -604,7 +598,6 @@ public:
* Creates an expression that extracts boolean value from the state evaluated from 'expr'.
*/
virtual Expression getBool(Expression expr) const = 0;
- virtual optimizer::ABT getBool(optimizer::ABT expr) const = 0;
Expression getBool(sbe::value::SlotId slotId) const {
return getBool(sbe::makeE<sbe::EVariable>(slotId));
@@ -634,8 +627,7 @@ public:
* Uses an expression from 'EvalExprStagePair' to construct state. Expresion must evaluate to
* boolean value.
*/
- virtual EvalExprStagePair makePredicateCombinator(EvalExprStagePair pair,
- optimizer::SlotVarMap& varMap) const = 0;
+ virtual EvalExprStagePair makePredicateCombinator(EvalExprStagePair pair) const = 0;
/**
* Creates traverse stage with fold and final expressions tuned to maintain consistent state.
@@ -686,11 +678,6 @@ public:
return sbe::makeE<sbe::EIf>(std::move(expr), makeState(true), makeState(false));
}
- optimizer::ABT makeState(optimizer::ABT expr) const override {
- return optimizer::make<optimizer::If>(
- std::move(expr), optimizer::Constant::int64(0), optimizer::Constant::int64(-1));
- }
-
Expression makeInitialState(Expression expr) const override {
return sbe::makeE<sbe::EIf>(
std::move(expr), makeConstant(ValueType, 1), makeConstant(ValueType, -2));
@@ -701,11 +688,6 @@ public:
sbe::EPrimBinary::greaterEq, std::move(expr), makeConstant(ValueType, 0));
}
- optimizer::ABT getBool(optimizer::ABT expr) const override {
- return optimizer::make<optimizer::BinaryOp>(
- optimizer::Operations::Gte, std::move(expr), optimizer::Constant::int64(0));
- }
-
Expression mergeStates(Expression left,
Expression right,
sbe::value::FrameIdGenerator* frameIdGenerator) const override {
@@ -753,10 +735,9 @@ public:
return {indexSlot, std::move(resultStage)};
}
- EvalExprStagePair makePredicateCombinator(EvalExprStagePair pair,
- optimizer::SlotVarMap& varMap) const override {
+ EvalExprStagePair makePredicateCombinator(EvalExprStagePair pair) const override {
auto [expr, stage] = std::move(pair);
- return {makeState(expr.extractExpr(varMap)), std::move(stage)};
+ return {makeState(expr.extractExpr()), std::move(stage)};
}
EvalStage makeTraverseCombinator(EvalStage outer,
@@ -786,10 +767,6 @@ public:
return expr;
}
- optimizer::ABT makeState(optimizer::ABT expr) const override {
- return expr;
- }
-
Expression makeInitialState(Expression expr) const override {
return expr;
}
@@ -798,10 +775,6 @@ public:
return expr;
}
- optimizer::ABT getBool(optimizer::ABT expr) const override {
- return expr;
- }
-
Expression mergeStates(Expression left,
Expression right,
sbe::value::FrameIdGenerator* frameIdGenerator) const override {
@@ -818,8 +791,7 @@ public:
return {stateSlot, std::move(stage)};
}
- EvalExprStagePair makePredicateCombinator(EvalExprStagePair pair,
- optimizer::SlotVarMap& varMap) const override {
+ EvalExprStagePair makePredicateCombinator(EvalExprStagePair pair) const override {
return pair;
}
@@ -866,7 +838,6 @@ EvalExprStagePair generateShortCircuitingLogicalOp(sbe::EPrimBinary::Op logicOp,
std::vector<EvalExprStagePair> branches,
PlanNodeId planNodeId,
sbe::value::SlotIdGenerator* slotIdGenerator,
- optimizer::SlotVarMap& slotVarMap,
const FilterStateHelper& stateHelper);
/**
@@ -965,9 +936,6 @@ struct StageBuilderState {
// corresponding to field paths to 'generateExpression' to avoid repeated expression generation.
// Key is expected to represent field paths in form CURRENT.<field_name>[.<field_name>]*.
stdx::unordered_map<std::string /*field path*/, EvalExpr> preGeneratedExprs;
-
- // Holds the mapping between the custom ABT variable names and the slot id they are referencing.
- optimizer::SlotVarMap slotVarMap;
};
/**
@@ -1442,7 +1410,6 @@ std::pair<std::unique_ptr<sbe::PlanStage>, sbe::value::SlotVector> projectFields
sbe::value::SlotId resultSlot,
PlanNodeId nodeId,
sbe::value::SlotIdGenerator* slotIdGenerator,
- optimizer::SlotVarMap& slotVarMap,
const PlanStageSlots* slots = nullptr);
template <typename T>
@@ -1514,38 +1481,4 @@ inline std::vector<T> appendVectorUnique(std::vector<T> lhs, std::vector<T> rhs)
}
return lhs;
}
-
-std::unique_ptr<sbe::EExpression> abtToExpr(optimizer::ABT& abt, optimizer::SlotVarMap& slotMap);
-
-template <typename... Args>
-inline auto makeABTFunction(StringData name, Args&&... args) {
- return optimizer::make<optimizer::FunctionCall>(
- name.toString(), optimizer::makeSeq(std::forward<Args>(args)...));
-}
-
-template <typename T>
-inline auto makeABTConstant(sbe::value::TypeTags tag, T value) {
- return optimizer::make<optimizer::Constant>(tag, sbe::value::bitcastFrom<T>(value));
-}
-
-inline auto makeABTConstant(StringData str) {
- auto [tag, value] = sbe::value::makeNewString(str);
- return makeABTConstant(tag, value);
-}
-
-/**
- * Creates a balanced boolean binary expression tree from given collection of leaf expression.
- */
-optimizer::ABT makeBalancedBooleanOpTree(optimizer::Operations logicOp,
- std::vector<optimizer::ABT> leaves);
-
-/**
- * Check if expression returns Nothing and return boolean false if so. Otherwise, return the
- * expression.
- */
-optimizer::ABT makeFillEmptyFalse(optimizer::ABT e);
-
-optimizer::ProjectionName makeVariableName(sbe::value::SlotId slotId);
-optimizer::ProjectionName makeLocalVariableName(sbe::FrameId frameId, sbe::value::SlotId slotId);
-
} // namespace mongo::stage_builder