summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/expression.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/expression.h')
-rw-r--r--src/mongo/db/pipeline/expression.h445
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;