From 4c4ce2bb432dacd0e771a9eae1572c86e7e0519b Mon Sep 17 00:00:00 2001 From: Ted Tuckman Date: Fri, 24 Jul 2020 08:13:44 -0400 Subject: SERVER-48861 Add arithmetic expressions to grammar --- src/mongo/db/pipeline/expression.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/mongo/db/pipeline/expression.h') diff --git a/src/mongo/db/pipeline/expression.h b/src/mongo/db/pipeline/expression.h index 32b47f4562a..4d34994f6b5 100644 --- a/src/mongo/db/pipeline/expression.h +++ b/src/mongo/db/pipeline/expression.h @@ -370,6 +370,8 @@ class ExpressionRangedArity : public ExpressionNaryBase { public: explicit ExpressionRangedArity(ExpressionContext* const expCtx) : ExpressionNaryBase(expCtx) {} + ExpressionRangedArity(ExpressionContext* const expCtx, Expression::ExpressionVector&& children) + : ExpressionNaryBase(expCtx, std::move(children)) {} void validateArguments(const Expression::ExpressionVector& args) const override { uassert(28667, @@ -461,6 +463,9 @@ class ExpressionSingleNumericArg : public ExpressionFixedArity { public: explicit ExpressionSingleNumericArg(ExpressionContext* const expCtx) : ExpressionFixedArity(expCtx) {} + explicit ExpressionSingleNumericArg(ExpressionContext* const expCtx, + Expression::ExpressionVector&& children) + : ExpressionFixedArity(expCtx, std::move(children)) {} virtual ~ExpressionSingleNumericArg() = default; @@ -743,6 +748,8 @@ class ExpressionAbs final : public ExpressionSingleNumericArg { public: explicit ExpressionAbs(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionAbs(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -943,6 +950,8 @@ class ExpressionCeil final : public ExpressionSingleNumericArg { public: explicit ExpressionCeil(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionCeil(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -1314,6 +1323,8 @@ class ExpressionDivide final : public ExpressionFixedArity public: explicit ExpressionDivide(ExpressionContext* const expCtx) : ExpressionFixedArity(expCtx) {} + explicit ExpressionDivide(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionFixedArity(expCtx, std::move(children)) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -1328,6 +1339,8 @@ class ExpressionExp final : public ExpressionSingleNumericArg { public: explicit ExpressionExp(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionExp(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -1464,6 +1477,8 @@ class ExpressionFloor final : public ExpressionSingleNumericArg public: explicit ExpressionFloor(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionFloor(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -1643,6 +1658,8 @@ class ExpressionLn final : public ExpressionSingleNumericArg { public: explicit ExpressionLn(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionLn(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -1656,6 +1673,8 @@ class ExpressionLog final : public ExpressionFixedArity { public: explicit ExpressionLog(ExpressionContext* const expCtx) : ExpressionFixedArity(expCtx) {} + explicit ExpressionLog(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionFixedArity(expCtx, std::move(children)) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -1669,6 +1688,8 @@ class ExpressionLog10 final : public ExpressionSingleNumericArg public: explicit ExpressionLog10(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionLog10(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -1778,6 +1799,8 @@ class ExpressionMod final : public ExpressionFixedArity { public: explicit ExpressionMod(ExpressionContext* const expCtx) : ExpressionFixedArity(expCtx) {} + explicit ExpressionMod(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionFixedArity(expCtx, std::move(children)) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -1792,6 +1815,8 @@ class ExpressionMultiply final : public ExpressionVariadic { public: explicit ExpressionMultiply(ExpressionContext* const expCtx) : ExpressionVariadic(expCtx) {} + explicit ExpressionMultiply(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionVariadic(expCtx, std::move(children)) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -1929,6 +1954,8 @@ class ExpressionPow final : public ExpressionFixedArity { public: explicit ExpressionPow(ExpressionContext* const expCtx) : ExpressionFixedArity(expCtx) {} + explicit ExpressionPow(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionFixedArity(expCtx, std::move(children)) {} static boost::intrusive_ptr create(ExpressionContext* const expCtx, Value base, @@ -2237,6 +2264,8 @@ class ExpressionRound final : public ExpressionRangedArity(expCtx) {} + explicit ExpressionRound(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionRangedArity(expCtx, std::move(children)) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -2264,6 +2293,8 @@ class ExpressionSqrt final : public ExpressionSingleNumericArg { public: explicit ExpressionSqrt(ExpressionContext* const expCtx) : ExpressionSingleNumericArg(expCtx) {} + explicit ExpressionSqrt(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionSingleNumericArg(expCtx, std::move(children)) {} Value evaluateNumericArg(const Value& numericArg) const final; const char* getOpName() const final; @@ -2362,6 +2393,8 @@ class ExpressionSubtract final : public ExpressionFixedArity(expCtx) {} + explicit ExpressionSubtract(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionFixedArity(expCtx, std::move(children)) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -2507,6 +2540,8 @@ class ExpressionTrunc final : public ExpressionRangedArity(expCtx) {} + explicit ExpressionTrunc(ExpressionContext* const expCtx, ExpressionVector&& children) + : ExpressionRangedArity(expCtx, std::move(children)) {} static boost::intrusive_ptr parse(ExpressionContext* const expCtx, BSONElement elem, -- cgit v1.2.1