summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/sbe/expressions
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/sbe/expressions')
-rw-r--r--src/mongo/db/exec/sbe/expressions/expression.cpp14
-rw-r--r--src/mongo/db/exec/sbe/expressions/expression.h46
-rw-r--r--src/mongo/db/exec/sbe/expressions/sbe_set_expressions_test.cpp30
3 files changed, 13 insertions, 77 deletions
diff --git a/src/mongo/db/exec/sbe/expressions/expression.cpp b/src/mongo/db/exec/sbe/expressions/expression.cpp
index 65421e8b373..3a2b20a4657 100644
--- a/src/mongo/db/exec/sbe/expressions/expression.cpp
+++ b/src/mongo/db/exec/sbe/expressions/expression.cpp
@@ -429,8 +429,6 @@ static stdx::unordered_map<std::string, BuiltinFn> kBuiltinFunctions = {
BuiltinFn{[](size_t n) { return n > 0; }, vm::Builtin::doubleDoubleSum, false}},
{"aggDoubleDoubleSum",
BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::aggDoubleDoubleSum, true}},
- {"aggMergeDoubleDoubleSums",
- BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::aggMergeDoubleDoubleSums, true}},
{"doubleDoubleSumFinalize",
BuiltinFn{[](size_t n) { return n > 0; }, vm::Builtin::doubleDoubleSumFinalize, false}},
{"doubleDoubleMergeSumFinalize",
@@ -438,8 +436,6 @@ static stdx::unordered_map<std::string, BuiltinFn> kBuiltinFunctions = {
{"doubleDoublePartialSumFinalize",
BuiltinFn{[](size_t n) { return n > 0; }, vm::Builtin::doubleDoublePartialSumFinalize, false}},
{"aggStdDev", BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::aggStdDev, true}},
- {"aggMergeStdDevs",
- BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::aggMergeStdDevs, true}},
{"stdDevPopFinalize",
BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::stdDevPopFinalize, false}},
{"stdDevSampFinalize",
@@ -471,10 +467,7 @@ static stdx::unordered_map<std::string, BuiltinFn> kBuiltinFunctions = {
{"tan", BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::tan, false}},
{"tanh", BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::tanh, false}},
{"round", BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::round, false}},
- {"concat", BuiltinFn{kAnyNumberOfArgs, vm::Builtin::concat, false}},
- {"concatArrays", BuiltinFn{kAnyNumberOfArgs, vm::Builtin::concatArrays, false}},
- {"aggConcatArraysCapped",
- BuiltinFn{[](size_t n) { return n == 2; }, vm::Builtin::aggConcatArraysCapped, true}},
+ {"concat", BuiltinFn{[](size_t n) { return n > 0; }, vm::Builtin::concat, false}},
{"isMember", BuiltinFn{[](size_t n) { return n == 2; }, vm::Builtin::isMember, false}},
{"collIsMember", BuiltinFn{[](size_t n) { return n == 3; }, vm::Builtin::collIsMember, false}},
{"indexOfBytes",
@@ -493,11 +486,6 @@ static stdx::unordered_map<std::string, BuiltinFn> kBuiltinFunctions = {
BuiltinFn{[](size_t n) { return n >= 1; }, vm::Builtin::collSetIntersection, false}},
{"collSetDifference",
BuiltinFn{[](size_t n) { return n == 3; }, vm::Builtin::collSetDifference, false}},
- {"aggSetUnion", BuiltinFn{[](size_t n) { return n == 1; }, vm::Builtin::aggSetUnion, true}},
- {"aggSetUnionCapped",
- BuiltinFn{[](size_t n) { return n == 2; }, vm::Builtin::aggSetUnionCapped, true}},
- {"aggCollSetUnionCapped",
- BuiltinFn{[](size_t n) { return n == 3; }, vm::Builtin::aggCollSetUnionCapped, true}},
{"runJsPredicate",
BuiltinFn{[](size_t n) { return n == 2; }, vm::Builtin::runJsPredicate, false}},
{"regexCompile", BuiltinFn{[](size_t n) { return n == 2; }, vm::Builtin::regexCompile, false}},
diff --git a/src/mongo/db/exec/sbe/expressions/expression.h b/src/mongo/db/exec/sbe/expressions/expression.h
index d5a2c0fdf0e..2b9032f257b 100644
--- a/src/mongo/db/exec/sbe/expressions/expression.h
+++ b/src/mongo/db/exec/sbe/expressions/expression.h
@@ -348,8 +348,6 @@ private:
std::string toString() const;
};
-using SlotExprPairVector = std::vector<std::pair<value::SlotId, std::unique_ptr<EExpression>>>;
-
template <typename T, typename... Args>
inline std::unique_ptr<EExpression> makeE(Args&&... args) {
return std::make_unique<T>(std::forward<Args>(args)...);
@@ -366,30 +364,20 @@ inline auto makeEs(Ts&&... pack) {
namespace detail {
// base case
-template <typename R>
-inline void makeSlotExprPairHelper(R& result,
- value::SlotId slot,
- std::unique_ptr<EExpression> expr) {
- if constexpr (std::is_same_v<R, value::SlotMap<std::unique_ptr<EExpression>>>) {
- result.emplace(slot, std::move(expr));
- } else {
- result.push_back({slot, std::move(expr)});
- }
+inline void makeEM_unwind(value::SlotMap<std::unique_ptr<EExpression>>& result,
+ value::SlotId slot,
+ std::unique_ptr<EExpression> expr) {
+ result.emplace(slot, std::move(expr));
}
// recursive case
-template <typename R, typename... Ts>
-inline void makeSlotExprPairHelper(R& result,
- value::SlotId slot,
- std::unique_ptr<EExpression> expr,
- Ts&&... rest) {
- if constexpr (std::is_same_v<R, value::SlotMap<std::unique_ptr<EExpression>>>) {
- result.emplace(slot, std::move(expr));
- } else {
- static_assert(std::is_same_v<R, SlotExprPairVector>);
- result.push_back({slot, std::move(expr)});
- }
- makeSlotExprPairHelper(result, std::forward<Ts>(rest)...);
+template <typename... Ts>
+inline void makeEM_unwind(value::SlotMap<std::unique_ptr<EExpression>>& result,
+ value::SlotId slot,
+ std::unique_ptr<EExpression> expr,
+ Ts&&... rest) {
+ result.emplace(slot, std::move(expr));
+ makeEM_unwind(result, std::forward<Ts>(rest)...);
}
} // namespace detail
@@ -398,7 +386,7 @@ auto makeEM(Ts&&... pack) {
value::SlotMap<std::unique_ptr<EExpression>> result;
if constexpr (sizeof...(pack) > 0) {
result.reserve(sizeof...(Ts) / 2);
- detail::makeSlotExprPairHelper(result, std::forward<Ts>(pack)...);
+ detail::makeEM_unwind(result, std::forward<Ts>(pack)...);
}
return result;
}
@@ -411,16 +399,6 @@ auto makeSV(Args&&... args) {
return v;
}
-template <typename... Ts>
-auto makeSlotExprPairVec(Ts&&... pack) {
- SlotExprPairVector v;
- if constexpr (sizeof...(pack) > 0) {
- v.reserve(sizeof...(Ts) / 2);
- detail::makeSlotExprPairHelper(v, std::forward<Ts>(pack)...);
- }
- return v;
-}
-
/**
* This is a constant expression. It assumes the ownership of the input constant.
*/
diff --git a/src/mongo/db/exec/sbe/expressions/sbe_set_expressions_test.cpp b/src/mongo/db/exec/sbe/expressions/sbe_set_expressions_test.cpp
index 279f7a287b4..30eb61a7b2d 100644
--- a/src/mongo/db/exec/sbe/expressions/sbe_set_expressions_test.cpp
+++ b/src/mongo/db/exec/sbe/expressions/sbe_set_expressions_test.cpp
@@ -28,7 +28,6 @@
*/
#include "mongo/db/exec/sbe/expression_test_base.h"
-#include "mongo/db/query/sbe_stage_builder_helpers.h"
namespace mongo::sbe {
@@ -94,35 +93,6 @@ TEST_F(SBEBuiltinSetOpTest, ReturnsNothingSetUnion) {
runAndAssertNothing(compiledExpr.get());
}
-TEST_F(SBEBuiltinSetOpTest, AggSetUnion) {
- value::OwnedValueAccessor aggAccessor, inputAccessor;
- auto inputSlot = bindAccessor(&inputAccessor);
- auto setUnionExpr =
- stage_builder::makeFunction("aggSetUnion", stage_builder::makeVariable(inputSlot));
- auto compiledExpr = compileAggExpression(*setUnionExpr, &aggAccessor);
-
- auto [arrTag1, arrVal1] = makeArray(BSON_ARRAY(1 << 2));
- inputAccessor.reset(arrTag1, arrVal1);
- auto [resTag1, resVal1] = makeArraySet(BSON_ARRAY(1 << 2));
- runAndAssertExpression(compiledExpr.get(), {resTag1, resVal1});
- aggAccessor.reset(resTag1, resVal1);
-
- auto [arrTag2, arrVal2] = makeArraySet(BSON_ARRAY(1 << 3 << 2 << 6));
- inputAccessor.reset(arrTag2, arrVal2);
- auto [resTag2, resVal2] = makeArraySet(BSON_ARRAY(1 << 2 << 3 << 6));
- runAndAssertExpression(compiledExpr.get(), {resTag2, resVal2});
- aggAccessor.reset(resTag2, resVal2);
-
- auto [arrTag3, arrVal3] = makeArray(BSONArray{});
- inputAccessor.reset(arrTag3, arrVal3);
- auto [resTag3, resVal3] = makeArraySet(BSON_ARRAY(1 << 2 << 3 << 6));
- runAndAssertExpression(compiledExpr.get(), {resTag3, resVal3});
- aggAccessor.reset(resTag3, resVal3);
-
- inputAccessor.reset(value::TypeTags::Nothing, 0);
- runAndAssertNothing(compiledExpr.get());
-}
-
TEST_F(SBEBuiltinSetOpTest, ComputesSetIntersection) {
value::OwnedValueAccessor slotAccessor1, slotAccessor2;
auto arrSlot1 = bindAccessor(&slotAccessor1);