diff options
Diffstat (limited to 'src/mongo/db/pipeline/expression.h')
-rw-r--r-- | src/mongo/db/pipeline/expression.h | 445 |
1 files changed, 206 insertions, 239 deletions
diff --git a/src/mongo/db/pipeline/expression.h b/src/mongo/db/pipeline/expression.h index 4f772ca2363..b68ac1ab9fa 100644 --- a/src/mongo/db/pipeline/expression.h +++ b/src/mongo/db/pipeline/expression.h @@ -92,7 +92,7 @@ class DocumentSource; class Expression : public RefCountable { public: using Parser = std::function<boost::intrusive_ptr<Expression>( - const boost::intrusive_ptr<ExpressionContext>&, BSONElement, const VariablesParseState&)>; + ExpressionContext* const, BSONElement, const VariablesParseState&)>; /** * Represents new paths computed by an expression. Computed paths are partitioned into renames @@ -195,10 +195,9 @@ public: * Calls parseExpression() on any sub-document (including possibly the entire document) which * consists of a single field name starting with a '$'. */ - static boost::intrusive_ptr<Expression> parseObject( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONObj obj, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parseObject(ExpressionContext* const expCtx, + BSONObj obj, + const VariablesParseState& vps); /** * Parses a BSONObj which has already been determined to be a functional expression. @@ -206,10 +205,9 @@ public: * Throws an error if 'obj' does not contain exactly one field, or if that field's name does not * match a registered expression name. */ - static boost::intrusive_ptr<Expression> parseExpression( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONObj obj, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parseExpression(ExpressionContext* const expCtx, + BSONObj obj, + const VariablesParseState& vps); /** * Parses a BSONElement which is an argument to an Expression. @@ -218,10 +216,9 @@ public: * parseObject(), ExpressionFieldPath::parse(), ExpressionArray::parse(), or * ExpressionConstant::parse() as necessary. */ - static boost::intrusive_ptr<Expression> parseOperand( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement exprElement, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parseOperand(ExpressionContext* const expCtx, + BSONElement exprElement, + const VariablesParseState& vps); /** * Return whether 'name' refers to an expression in the language. @@ -256,16 +253,16 @@ public: return _children; } - const boost::intrusive_ptr<ExpressionContext>& getExpressionContext() const { + auto getExpressionContext() const { return _expCtx; } protected: using ExpressionVector = std::vector<boost::intrusive_ptr<Expression>>; - Expression(const boost::intrusive_ptr<ExpressionContext>& expCtx) : Expression(expCtx, {}) {} + Expression(ExpressionContext* const expCtx) : Expression(expCtx, {}) {} - Expression(const boost::intrusive_ptr<ExpressionContext>& expCtx, ExpressionVector&& children) + Expression(ExpressionContext* const expCtx, ExpressionVector&& children) : _children(std::move(children)), _expCtx(expCtx) { auto varIds = _expCtx->variablesParseState.getDefinedVariableIDs(); if (!varIds.empty()) { @@ -288,7 +285,7 @@ protected: private: boost::optional<Variables::Id> _boundaryVariableId; - boost::intrusive_ptr<ExpressionContext> _expCtx; + ExpressionContext* const _expCtx; }; /** @@ -318,7 +315,7 @@ public: virtual void validateArguments(const ExpressionVector& args) const {} - static ExpressionVector parseArguments(const boost::intrusive_ptr<ExpressionContext>& expCtx, + static ExpressionVector parseArguments(ExpressionContext* const expCtx, BSONElement bsonExpr, const VariablesParseState& vps); @@ -327,8 +324,7 @@ public: } protected: - explicit ExpressionNary(const boost::intrusive_ptr<ExpressionContext>& expCtx) - : Expression(expCtx) {} + explicit ExpressionNary(ExpressionContext* const expCtx) : Expression(expCtx) {} void _doAddDependencies(DepsTracker* deps) const override; }; @@ -337,10 +333,9 @@ protected: template <typename SubClass> class ExpressionNaryBase : public ExpressionNary { public: - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement bsonExpr, - const VariablesParseState& vps) { + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement bsonExpr, + const VariablesParseState& vps) { auto expr = make_intrusive<SubClass>(expCtx); ExpressionVector args = parseArguments(expCtx, bsonExpr, vps); expr->validateArguments(args); @@ -349,15 +344,14 @@ public: } protected: - explicit ExpressionNaryBase(const boost::intrusive_ptr<ExpressionContext>& expCtx) - : ExpressionNary(expCtx) {} + explicit ExpressionNaryBase(ExpressionContext* const expCtx) : ExpressionNary(expCtx) {} }; /// Inherit from this class if your expression takes a variable number of arguments. template <typename SubClass> class ExpressionVariadic : public ExpressionNaryBase<SubClass> { public: - explicit ExpressionVariadic(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionVariadic(ExpressionContext* const expCtx) : ExpressionNaryBase<SubClass>(expCtx) {} }; @@ -368,7 +362,7 @@ public: template <typename SubClass, int MinArgs, int MaxArgs> class ExpressionRangedArity : public ExpressionNaryBase<SubClass> { public: - explicit ExpressionRangedArity(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionRangedArity(ExpressionContext* const expCtx) : ExpressionNaryBase<SubClass>(expCtx) {} void validateArguments(const Expression::ExpressionVector& args) const override { @@ -384,7 +378,7 @@ public: template <typename SubClass, int NArgs> class ExpressionFixedArity : public ExpressionNaryBase<SubClass> { public: - explicit ExpressionFixedArity(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionFixedArity(ExpressionContext* const expCtx) : ExpressionNaryBase<SubClass>(expCtx) {} void validateArguments(const Expression::ExpressionVector& args) const override { @@ -403,7 +397,7 @@ template <typename AccumulatorState> class ExpressionFromAccumulator : public ExpressionVariadic<ExpressionFromAccumulator<AccumulatorState>> { public: - explicit ExpressionFromAccumulator(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionFromAccumulator(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionFromAccumulator<AccumulatorState>>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final { @@ -457,7 +451,7 @@ public: template <typename SubClass> class ExpressionSingleNumericArg : public ExpressionFixedArity<SubClass, 1> { public: - explicit ExpressionSingleNumericArg(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSingleNumericArg(ExpressionContext* const expCtx) : ExpressionFixedArity<SubClass, 1>(expCtx) {} virtual ~ExpressionSingleNumericArg() = default; @@ -484,7 +478,7 @@ public: template <typename SubClass> class ExpressionTwoNumericArgs : public ExpressionFixedArity<SubClass, 2> { public: - explicit ExpressionTwoNumericArgs(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionTwoNumericArgs(ExpressionContext* const expCtx) : ExpressionFixedArity<SubClass, 2>(expCtx) {} virtual ~ExpressionTwoNumericArgs() = default; @@ -535,13 +529,12 @@ public: /** * Creates a new ExpressionConstant with value 'value'. */ - static boost::intrusive_ptr<ExpressionConstant> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, const Value& value); + static boost::intrusive_ptr<ExpressionConstant> create(ExpressionContext* const expCtx, + const Value& value); - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement bsonExpr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement bsonExpr, + const VariablesParseState& vps); /** * Returns true if 'expression' is nullptr or if 'expression' is an instance of an @@ -581,7 +574,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const override; private: - ExpressionConstant(const boost::intrusive_ptr<ExpressionContext>& expCtx, const Value& value); + ExpressionConstant(ExpressionContext* const expCtx, const Value& value); Value _value; }; @@ -647,10 +640,9 @@ public: return this; } - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement operatorElem, - const VariablesParseState& variablesParseState) { + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement operatorElem, + const VariablesParseState& variablesParseState) { if (operatorElem.type() == BSONType::Object) { if (operatorElem.embeddedObject().firstElementFieldName()[0] == '$') { // Assume this is an expression specification representing the date argument @@ -703,7 +695,7 @@ public: } protected: - explicit DateExpressionAcceptingTimeZone(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit DateExpressionAcceptingTimeZone(ExpressionContext* const expCtx, const StringData opName, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone) @@ -738,7 +730,7 @@ private: class ExpressionAbs final : public ExpressionSingleNumericArg<ExpressionAbs> { public: - explicit ExpressionAbs(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionAbs(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionAbs>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -751,7 +743,7 @@ public: class ExpressionAdd final : public ExpressionVariadic<ExpressionAdd> { public: - explicit ExpressionAdd(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionAdd(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionAdd>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -773,7 +765,7 @@ public: class ExpressionAllElementsTrue final : public ExpressionFixedArity<ExpressionAllElementsTrue, 1> { public: - explicit ExpressionAllElementsTrue(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionAllElementsTrue(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionAllElementsTrue, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -787,7 +779,7 @@ public: class ExpressionAnd final : public ExpressionVariadic<ExpressionAnd> { public: - explicit ExpressionAnd(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionAnd(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionAnd>(expCtx) {} boost::intrusive_ptr<Expression> optimize() final; @@ -810,7 +802,7 @@ public: class ExpressionAnyElementTrue final : public ExpressionFixedArity<ExpressionAnyElementTrue, 1> { public: - explicit ExpressionAnyElementTrue(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionAnyElementTrue(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionAnyElementTrue, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -824,10 +816,10 @@ public: class ExpressionArray final : public ExpressionVariadic<ExpressionArray> { public: - explicit ExpressionArray(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionArray(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionArray>(expCtx) {} - ExpressionArray(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionArray(ExpressionContext* const expCtx, std::vector<boost::intrusive_ptr<Expression>>&& children) : ExpressionVariadic<ExpressionArray>(expCtx) { _children = std::move(children); @@ -837,8 +829,7 @@ public: Value serialize(bool explain) const final; static boost::intrusive_ptr<ExpressionArray> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - std::vector<boost::intrusive_ptr<Expression>>&& children) { + ExpressionContext* const expCtx, std::vector<boost::intrusive_ptr<Expression>>&& children) { return make_intrusive<ExpressionArray>(expCtx, std::move(children)); } @@ -853,7 +844,7 @@ public: class ExpressionArrayElemAt final : public ExpressionFixedArity<ExpressionArrayElemAt, 2> { public: - explicit ExpressionArrayElemAt(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionArrayElemAt(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionArrayElemAt, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -866,7 +857,7 @@ public: class ExpressionFirst final : public ExpressionFixedArity<ExpressionFirst, 1> { public: - explicit ExpressionFirst(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionFirst(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionFirst, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -879,7 +870,7 @@ public: class ExpressionLast final : public ExpressionFixedArity<ExpressionLast, 1> { public: - explicit ExpressionLast(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionLast(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionLast, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -892,7 +883,7 @@ public: class ExpressionObjectToArray final : public ExpressionFixedArity<ExpressionObjectToArray, 1> { public: - explicit ExpressionObjectToArray(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionObjectToArray(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionObjectToArray, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -905,7 +896,7 @@ public: class ExpressionArrayToObject final : public ExpressionFixedArity<ExpressionArrayToObject, 1> { public: - explicit ExpressionArrayToObject(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionArrayToObject(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionArrayToObject, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -918,7 +909,7 @@ public: class ExpressionBsonSize final : public ExpressionFixedArity<ExpressionBsonSize, 1> { public: - explicit ExpressionBsonSize(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionBsonSize(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionBsonSize, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -933,7 +924,7 @@ public: class ExpressionCeil final : public ExpressionSingleNumericArg<ExpressionCeil> { public: - explicit ExpressionCeil(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionCeil(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionCeil>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -952,8 +943,7 @@ public: Value serialize(bool explain) const final; static boost::intrusive_ptr<ExpressionCoerceToBool> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - boost::intrusive_ptr<Expression> pExpression); + ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> pExpression); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -963,7 +953,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionCoerceToBool(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionCoerceToBool(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> pExpression); boost::intrusive_ptr<Expression>& pExpression; @@ -986,7 +976,7 @@ public: CMP = 6, // return -1, 0, 1 for a < b, a == b, a > b }; - ExpressionCompare(const boost::intrusive_ptr<ExpressionContext>& expCtx, CmpOp cmpOp) + ExpressionCompare(ExpressionContext* const expCtx, CmpOp cmpOp) : ExpressionFixedArity<ExpressionCompare, 2>(expCtx), cmpOp(cmpOp) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -996,14 +986,13 @@ public: return cmpOp; } - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement bsonExpr, - const VariablesParseState& vps, - CmpOp cmpOp); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement bsonExpr, + const VariablesParseState& vps, + CmpOp cmpOp); static boost::intrusive_ptr<ExpressionCompare> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionContext* const expCtx, CmpOp cmpOp, const boost::intrusive_ptr<Expression>& exprLeft, const boost::intrusive_ptr<Expression>& exprRight); @@ -1019,7 +1008,7 @@ private: class ExpressionConcat final : public ExpressionVariadic<ExpressionConcat> { public: - explicit ExpressionConcat(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionConcat(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionConcat>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1037,7 +1026,7 @@ public: class ExpressionConcatArrays final : public ExpressionVariadic<ExpressionConcatArrays> { public: - explicit ExpressionConcatArrays(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionConcatArrays(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionConcatArrays>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1055,15 +1044,14 @@ public: class ExpressionCond final : public ExpressionFixedArity<ExpressionCond, 3> { public: - explicit ExpressionCond(const boost::intrusive_ptr<ExpressionContext>& expCtx) : Base(expCtx) {} + explicit ExpressionCond(ExpressionContext* const expCtx) : Base(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1079,10 +1067,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1092,7 +1079,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionDateFromString(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionDateFromString(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> dateString, boost::intrusive_ptr<Expression> timeZone, boost::intrusive_ptr<Expression> format, @@ -1112,10 +1099,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1125,7 +1111,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionDateFromParts(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionDateFromParts(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> year, boost::intrusive_ptr<Expression> month, boost::intrusive_ptr<Expression> day, @@ -1194,10 +1180,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1210,7 +1195,7 @@ private: /** * The iso8601 argument controls whether to output ISO8601 elements or natural calendar. */ - ExpressionDateToParts(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionDateToParts(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone, boost::intrusive_ptr<Expression> iso8601); @@ -1228,10 +1213,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1241,7 +1225,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionDateToString(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionDateToString(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> format, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone, @@ -1255,7 +1239,7 @@ private: class ExpressionDayOfMonth final : public DateExpressionAcceptingTimeZone<ExpressionDayOfMonth> { public: - explicit ExpressionDayOfMonth(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionDayOfMonth(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionDayOfMonth>( @@ -1273,7 +1257,7 @@ public: class ExpressionDayOfWeek final : public DateExpressionAcceptingTimeZone<ExpressionDayOfWeek> { public: - explicit ExpressionDayOfWeek(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionDayOfWeek(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionDayOfWeek>( @@ -1291,7 +1275,7 @@ public: class ExpressionDayOfYear final : public DateExpressionAcceptingTimeZone<ExpressionDayOfYear> { public: - explicit ExpressionDayOfYear(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionDayOfYear(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionDayOfYear>( @@ -1309,7 +1293,7 @@ public: class ExpressionDivide final : public ExpressionFixedArity<ExpressionDivide, 2> { public: - explicit ExpressionDivide(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionDivide(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionDivide, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1323,7 +1307,7 @@ public: class ExpressionExp final : public ExpressionSingleNumericArg<ExpressionExp> { public: - explicit ExpressionExp(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionExp(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionExp>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -1358,14 +1342,13 @@ public: indicator @returns the newly created field path expression */ - static boost::intrusive_ptr<ExpressionFieldPath> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, const std::string& fieldPath); + static boost::intrusive_ptr<ExpressionFieldPath> create(ExpressionContext* const expCtx, + const std::string& fieldPath); /// Like create(), but works with the raw std::string from the user with the "$" prefixes. - static boost::intrusive_ptr<ExpressionFieldPath> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - const std::string& raw, - const VariablesParseState& vps); + static boost::intrusive_ptr<ExpressionFieldPath> parse(ExpressionContext* const expCtx, + const std::string& raw, + const VariablesParseState& vps); /** * Returns true if this expression logically represents the path 'dottedPath'. For example, if @@ -1392,7 +1375,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionFieldPath(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionFieldPath(ExpressionContext* const expCtx, const std::string& fieldPath, Variables::Id variable); @@ -1425,10 +1408,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1438,7 +1420,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionFilter(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionFilter(ExpressionContext* const expCtx, std::string varName, Variables::Id varId, boost::intrusive_ptr<Expression> input, @@ -1457,7 +1439,7 @@ private: class ExpressionFloor final : public ExpressionSingleNumericArg<ExpressionFloor> { public: - explicit ExpressionFloor(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionFloor(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionFloor>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -1471,7 +1453,7 @@ public: class ExpressionHour final : public DateExpressionAcceptingTimeZone<ExpressionHour> { public: - explicit ExpressionHour(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionHour(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionHour>( @@ -1489,7 +1471,7 @@ public: class ExpressionIfNull final : public ExpressionFixedArity<ExpressionIfNull, 2> { public: - explicit ExpressionIfNull(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIfNull(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionIfNull, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1503,7 +1485,7 @@ public: class ExpressionIn final : public ExpressionFixedArity<ExpressionIn, 2> { public: - explicit ExpressionIn(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIn(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionIn, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1517,7 +1499,7 @@ public: class ExpressionIndexOfArray : public ExpressionRangedArity<ExpressionIndexOfArray, 2, 4> { public: - explicit ExpressionIndexOfArray(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIndexOfArray(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionIndexOfArray, 2, 4>(expCtx) {} @@ -1558,7 +1540,7 @@ private: class ExpressionIndexOfBytes final : public ExpressionRangedArity<ExpressionIndexOfBytes, 2, 4> { public: - explicit ExpressionIndexOfBytes(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIndexOfBytes(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionIndexOfBytes, 2, 4>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1575,7 +1557,7 @@ public: */ class ExpressionIndexOfCP final : public ExpressionRangedArity<ExpressionIndexOfCP, 2, 4> { public: - explicit ExpressionIndexOfCP(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIndexOfCP(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionIndexOfCP, 2, 4>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1593,10 +1575,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); struct NameAndExpression { std::string name; @@ -1617,7 +1598,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionLet(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionLet(ExpressionContext* const expCtx, VariableMap&& vars, std::vector<boost::intrusive_ptr<Expression>> children); @@ -1627,7 +1608,7 @@ private: class ExpressionLn final : public ExpressionSingleNumericArg<ExpressionLn> { public: - explicit ExpressionLn(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionLn(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionLn>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -1640,7 +1621,7 @@ public: class ExpressionLog final : public ExpressionFixedArity<ExpressionLog, 2> { public: - explicit ExpressionLog(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionLog(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionLog, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1653,7 +1634,7 @@ public: class ExpressionLog10 final : public ExpressionSingleNumericArg<ExpressionLog10> { public: - explicit ExpressionLog10(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionLog10(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionLog10>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -1670,10 +1651,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); ComputedPaths getComputedPaths(const std::string& exprFieldPath, Variables::Id renamingVar) const final; @@ -1687,7 +1667,7 @@ protected: private: ExpressionMap( - const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionContext* const expCtx, const std::string& varName, // name of variable to set Variables::Id varId, // id of variable to set boost::intrusive_ptr<Expression> input, // yields array to iterate @@ -1704,10 +1684,9 @@ public: Value serialize(bool explain) const final; Value evaluate(const Document& root, Variables* variables) const final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1721,15 +1700,14 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionMeta(const boost::intrusive_ptr<ExpressionContext>& expCtx, - DocumentMetadataFields::MetaType metaType); + ExpressionMeta(ExpressionContext* const expCtx, DocumentMetadataFields::MetaType metaType); DocumentMetadataFields::MetaType _metaType; }; class ExpressionMillisecond final : public DateExpressionAcceptingTimeZone<ExpressionMillisecond> { public: - explicit ExpressionMillisecond(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionMillisecond(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionMillisecond>( @@ -1747,7 +1725,7 @@ public: class ExpressionMinute final : public DateExpressionAcceptingTimeZone<ExpressionMinute> { public: - explicit ExpressionMinute(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionMinute(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionMinute>( @@ -1765,7 +1743,7 @@ public: class ExpressionMod final : public ExpressionFixedArity<ExpressionMod, 2> { public: - explicit ExpressionMod(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionMod(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionMod, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1779,7 +1757,7 @@ public: class ExpressionMultiply final : public ExpressionVariadic<ExpressionMultiply> { public: - explicit ExpressionMultiply(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionMultiply(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionMultiply>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1801,7 +1779,7 @@ public: class ExpressionMonth final : public DateExpressionAcceptingTimeZone<ExpressionMonth> { public: - explicit ExpressionMonth(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionMonth(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionMonth>( @@ -1819,7 +1797,7 @@ public: class ExpressionNot final : public ExpressionFixedArity<ExpressionNot, 1> { public: - explicit ExpressionNot(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionNot(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionNot, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1846,17 +1824,16 @@ public: Value serialize(bool explain) const final; static boost::intrusive_ptr<ExpressionObject> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionContext* const expCtx, std::vector<std::pair<std::string, boost::intrusive_ptr<Expression>>>&& expressionsWithChildrenInPlace); /** * Parses and constructs an ExpressionObject from 'obj'. */ - static boost::intrusive_ptr<ExpressionObject> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONObj obj, - const VariablesParseState& vps); + static boost::intrusive_ptr<ExpressionObject> parse(ExpressionContext* const expCtx, + BSONObj obj, + const VariablesParseState& vps); /** * This ExpressionObject must outlive the returned vector. @@ -1877,7 +1854,7 @@ protected: private: ExpressionObject( - const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionContext* const expCtx, std::vector<boost::intrusive_ptr<Expression>> children, std::vector<std::pair<std::string, boost::intrusive_ptr<Expression>&>>&& expressions); @@ -1889,7 +1866,7 @@ private: class ExpressionOr final : public ExpressionVariadic<ExpressionOr> { public: - explicit ExpressionOr(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionOr(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionOr>(expCtx) {} boost::intrusive_ptr<Expression> optimize() final; @@ -1911,11 +1888,12 @@ public: class ExpressionPow final : public ExpressionFixedArity<ExpressionPow, 2> { public: - explicit ExpressionPow(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionPow(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionPow, 2>(expCtx) {} - static boost::intrusive_ptr<Expression> create( - const boost::intrusive_ptr<ExpressionContext>& expCtx, Value base, Value exp); + static boost::intrusive_ptr<Expression> create(ExpressionContext* const expCtx, + Value base, + Value exp); void acceptVisitor(ExpressionVisitor* visitor) final { return visitor->visit(this); @@ -1929,7 +1907,7 @@ private: class ExpressionRange final : public ExpressionRangedArity<ExpressionRange, 2, 3> { public: - explicit ExpressionRange(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionRange(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionRange, 2, 3>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -1943,7 +1921,7 @@ public: class ExpressionReduce final : public Expression { public: - ExpressionReduce(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionReduce(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> input, boost::intrusive_ptr<Expression> initial, boost::intrusive_ptr<Expression> in, @@ -1958,10 +1936,9 @@ public: Value evaluate(const Document& root, Variables* variables) const final; boost::intrusive_ptr<Expression> optimize() final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); Value serialize(bool explain) const final; void acceptVisitor(ExpressionVisitor* visitor) final { @@ -1983,7 +1960,7 @@ private: class ExpressionReplaceBase : public Expression { public: - ExpressionReplaceBase(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionReplaceBase(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> input, boost::intrusive_ptr<Expression> find, boost::intrusive_ptr<Expression> replacement) @@ -2014,10 +1991,9 @@ class ExpressionReplaceOne final : public ExpressionReplaceBase { public: using ExpressionReplaceBase::ExpressionReplaceBase; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); static constexpr const char* const opName = "$replaceOne"; const char* getOpName() const final { @@ -2036,10 +2012,9 @@ class ExpressionReplaceAll final : public ExpressionReplaceBase { public: using ExpressionReplaceBase::ExpressionReplaceBase; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vps); static constexpr const char* const opName = "$replaceAll"; const char* getOpName() const final { @@ -2056,7 +2031,7 @@ protected: class ExpressionSecond final : public DateExpressionAcceptingTimeZone<ExpressionSecond> { public: - ExpressionSecond(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionSecond(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionSecond>( @@ -2074,7 +2049,7 @@ public: class ExpressionSetDifference final : public ExpressionFixedArity<ExpressionSetDifference, 2> { public: - explicit ExpressionSetDifference(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSetDifference(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSetDifference, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2088,7 +2063,7 @@ public: class ExpressionSetEquals final : public ExpressionVariadic<ExpressionSetEquals> { public: - explicit ExpressionSetEquals(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSetEquals(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionSetEquals>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2103,7 +2078,7 @@ public: class ExpressionSetIntersection final : public ExpressionVariadic<ExpressionSetIntersection> { public: - explicit ExpressionSetIntersection(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSetIntersection(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionSetIntersection>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2126,7 +2101,7 @@ public: // Not final, inherited from for optimizations. class ExpressionSetIsSubset : public ExpressionFixedArity<ExpressionSetIsSubset, 2> { public: - explicit ExpressionSetIsSubset(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSetIsSubset(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSetIsSubset, 2>(expCtx) {} boost::intrusive_ptr<Expression> optimize() override; @@ -2144,7 +2119,7 @@ private: class ExpressionSetUnion final : public ExpressionVariadic<ExpressionSetUnion> { public: - explicit ExpressionSetUnion(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSetUnion(ExpressionContext* const expCtx) : ExpressionVariadic<ExpressionSetUnion>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2166,7 +2141,7 @@ public: class ExpressionSize final : public ExpressionFixedArity<ExpressionSize, 1> { public: - explicit ExpressionSize(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSize(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSize, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2180,7 +2155,7 @@ public: class ExpressionReverseArray final : public ExpressionFixedArity<ExpressionReverseArray, 1> { public: - explicit ExpressionReverseArray(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionReverseArray(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionReverseArray, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2194,7 +2169,7 @@ public: class ExpressionSlice final : public ExpressionRangedArity<ExpressionSlice, 2, 3> { public: - explicit ExpressionSlice(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSlice(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionSlice, 2, 3>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2208,7 +2183,7 @@ public: class ExpressionIsArray final : public ExpressionFixedArity<ExpressionIsArray, 1> { public: - explicit ExpressionIsArray(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIsArray(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionIsArray, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2221,7 +2196,7 @@ public: class ExpressionRound final : public ExpressionRangedArity<ExpressionRound, 1, 2> { public: - explicit ExpressionRound(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionRound(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionRound, 1, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2234,7 +2209,7 @@ public: class ExpressionSplit final : public ExpressionFixedArity<ExpressionSplit, 2> { public: - explicit ExpressionSplit(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSplit(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSplit, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2248,7 +2223,7 @@ public: class ExpressionSqrt final : public ExpressionSingleNumericArg<ExpressionSqrt> { public: - explicit ExpressionSqrt(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSqrt(ExpressionContext* const expCtx) : ExpressionSingleNumericArg<ExpressionSqrt>(expCtx) {} Value evaluateNumericArg(const Value& numericArg) const final; @@ -2262,7 +2237,7 @@ public: class ExpressionStrcasecmp final : public ExpressionFixedArity<ExpressionStrcasecmp, 2> { public: - explicit ExpressionStrcasecmp(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionStrcasecmp(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionStrcasecmp, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2276,7 +2251,7 @@ public: class ExpressionSubstrBytes final : public ExpressionFixedArity<ExpressionSubstrBytes, 3> { public: - explicit ExpressionSubstrBytes(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSubstrBytes(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSubstrBytes, 3>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2290,7 +2265,7 @@ public: class ExpressionSubstrCP final : public ExpressionFixedArity<ExpressionSubstrCP, 3> { public: - explicit ExpressionSubstrCP(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSubstrCP(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSubstrCP, 3>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2304,7 +2279,7 @@ public: class ExpressionStrLenBytes final : public ExpressionFixedArity<ExpressionStrLenBytes, 1> { public: - explicit ExpressionStrLenBytes(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionStrLenBytes(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionStrLenBytes, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2318,7 +2293,7 @@ public: class ExpressionBinarySize final : public ExpressionFixedArity<ExpressionBinarySize, 1> { public: - ExpressionBinarySize(const boost::intrusive_ptr<ExpressionContext>& expCtx) + ExpressionBinarySize(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionBinarySize, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2332,7 +2307,7 @@ public: class ExpressionStrLenCP final : public ExpressionFixedArity<ExpressionStrLenCP, 1> { public: - explicit ExpressionStrLenCP(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionStrLenCP(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionStrLenCP, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2346,7 +2321,7 @@ public: class ExpressionSubtract final : public ExpressionFixedArity<ExpressionSubtract, 2> { public: - explicit ExpressionSubtract(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionSubtract(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionSubtract, 2>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2363,7 +2338,7 @@ public: using ExpressionPair = std::pair<boost::intrusive_ptr<Expression>&, boost::intrusive_ptr<Expression>&>; - ExpressionSwitch(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionSwitch(ExpressionContext* const expCtx, std::vector<boost::intrusive_ptr<Expression>> children, std::vector<ExpressionPair> branches) : Expression(expCtx, std::move(children)), @@ -2372,10 +2347,9 @@ public: Value evaluate(const Document& root, Variables* variables) const final; boost::intrusive_ptr<Expression> optimize() final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value serialize(bool explain) const final; void acceptVisitor(ExpressionVisitor* visitor) final { @@ -2393,7 +2367,7 @@ private: class ExpressionToLower final : public ExpressionFixedArity<ExpressionToLower, 1> { public: - explicit ExpressionToLower(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionToLower(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionToLower, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2407,7 +2381,7 @@ public: class ExpressionToUpper final : public ExpressionFixedArity<ExpressionToUpper, 1> { public: - explicit ExpressionToUpper(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionToUpper(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionToUpper, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2431,7 +2405,7 @@ private: }; public: - ExpressionTrim(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionTrim(ExpressionContext* const expCtx, TrimType trimType, StringData name, boost::intrusive_ptr<Expression> input, @@ -2444,10 +2418,9 @@ public: Value evaluate(const Document& root, Variables* variables) const final; boost::intrusive_ptr<Expression> optimize() final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value serialize(bool explain) const final; void acceptVisitor(ExpressionVisitor* visitor) final { @@ -2493,13 +2466,12 @@ private: class ExpressionTrunc final : public ExpressionRangedArity<ExpressionTrunc, 1, 2> { public: - explicit ExpressionTrunc(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionTrunc(ExpressionContext* const expCtx) : ExpressionRangedArity<ExpressionTrunc, 1, 2>(expCtx) {} - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement elem, - const VariablesParseState& vps); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement elem, + const VariablesParseState& vps); Value evaluate(const Document& root, Variables* variables) const final; const char* getOpName() const final; @@ -2511,7 +2483,7 @@ public: class ExpressionType final : public ExpressionFixedArity<ExpressionType, 1> { public: - explicit ExpressionType(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionType(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionType, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2524,7 +2496,7 @@ public: class ExpressionIsNumber final : public ExpressionFixedArity<ExpressionIsNumber, 1> { public: - explicit ExpressionIsNumber(const boost::intrusive_ptr<ExpressionContext>& expCtx) + explicit ExpressionIsNumber(ExpressionContext* const expCtx) : ExpressionFixedArity<ExpressionIsNumber, 1>(expCtx) {} Value evaluate(const Document& root, Variables* variables) const final; @@ -2537,7 +2509,7 @@ public: class ExpressionWeek final : public DateExpressionAcceptingTimeZone<ExpressionWeek> { public: - ExpressionWeek(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionWeek(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionWeek>( @@ -2555,7 +2527,7 @@ public: class ExpressionIsoWeekYear final : public DateExpressionAcceptingTimeZone<ExpressionIsoWeekYear> { public: - explicit ExpressionIsoWeekYear(const boost::intrusive_ptr<ExpressionContext>& expCtx, + explicit ExpressionIsoWeekYear(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionIsoWeekYear>( @@ -2574,7 +2546,7 @@ public: class ExpressionIsoDayOfWeek final : public DateExpressionAcceptingTimeZone<ExpressionIsoDayOfWeek> { public: - ExpressionIsoDayOfWeek(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionIsoDayOfWeek(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionIsoDayOfWeek>( @@ -2592,7 +2564,7 @@ public: class ExpressionIsoWeek final : public DateExpressionAcceptingTimeZone<ExpressionIsoWeek> { public: - ExpressionIsoWeek(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionIsoWeek(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionIsoWeek>( @@ -2610,7 +2582,7 @@ public: class ExpressionYear final : public DateExpressionAcceptingTimeZone<ExpressionYear> { public: - ExpressionYear(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionYear(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> date, boost::intrusive_ptr<Expression> timeZone = nullptr) : DateExpressionAcceptingTimeZone<ExpressionYear>( @@ -2628,7 +2600,7 @@ public: class ExpressionZip final : public Expression { public: - ExpressionZip(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionZip(ExpressionContext* const expCtx, bool useLongestLength, std::vector<boost::intrusive_ptr<Expression>> children, std::vector<std::reference_wrapper<boost::intrusive_ptr<Expression>>> inputs, @@ -2640,10 +2612,9 @@ public: Value evaluate(const Document& root, Variables* variables) const final; boost::intrusive_ptr<Expression> optimize() final; - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value serialize(bool explain) const final; void acceptVisitor(ExpressionVisitor* visitor) final { @@ -2665,14 +2636,13 @@ public: * Creates a $convert expression converting from 'input' to the type given by 'toType'. Leaves * 'onNull' and 'onError' unspecified. */ - static boost::intrusive_ptr<Expression> create(const boost::intrusive_ptr<ExpressionContext>&, + static boost::intrusive_ptr<Expression> create(ExpressionContext* const, boost::intrusive_ptr<Expression> input, BSONType toType); - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value evaluate(const Document& root, Variables* variables) const final; boost::intrusive_ptr<Expression> optimize() final; @@ -2686,7 +2656,7 @@ protected: void _doAddDependencies(DepsTracker* deps) const final; private: - ExpressionConvert(const boost::intrusive_ptr<ExpressionContext>&, + ExpressionConvert(ExpressionContext* const, boost::intrusive_ptr<Expression> input, boost::intrusive_ptr<Expression> to, boost::intrusive_ptr<Expression> onError, @@ -2778,7 +2748,7 @@ public: return _opName; } - ExpressionRegex(const boost::intrusive_ptr<ExpressionContext>& expCtx, + ExpressionRegex(ExpressionContext* const expCtx, boost::intrusive_ptr<Expression> input, boost::intrusive_ptr<Expression> regex, boost::intrusive_ptr<Expression> options, @@ -2822,10 +2792,9 @@ private: class ExpressionRegexFind final : public ExpressionRegex { public: - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value evaluate(const Document& root, Variables* variables) const final; @@ -2838,10 +2807,9 @@ public: class ExpressionRegexFindAll final : public ExpressionRegex { public: - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value evaluate(const Document& root, Variables* variables) const final; void acceptVisitor(ExpressionVisitor* visitor) final { @@ -2853,10 +2821,9 @@ public: class ExpressionRegexMatch final : public ExpressionRegex { public: - static boost::intrusive_ptr<Expression> parse( - const boost::intrusive_ptr<ExpressionContext>& expCtx, - BSONElement expr, - const VariablesParseState& vpsIn); + static boost::intrusive_ptr<Expression> parse(ExpressionContext* const expCtx, + BSONElement expr, + const VariablesParseState& vpsIn); Value evaluate(const Document& root, Variables* variables) const final; |