summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/variables.cpp
diff options
context:
space:
mode:
authorKatherine Wu <katherine.wu@mongodb.com>2020-05-12 18:15:26 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-05-18 17:58:41 +0000
commit972ce94f18c972b1d648eb89a88f901965fa22dc (patch)
tree0c18f0fc63800305b9a1c636cf62cc7204082eca /src/mongo/db/pipeline/variables.cpp
parente8c93d3278965d731522bf9bf05525267d3e8fb8 (diff)
downloadmongo-972ce94f18c972b1d648eb89a88f901965fa22dc.tar.gz
SERVER-46998 Support 'let' variables used within $merge custom pipeline update
Diffstat (limited to 'src/mongo/db/pipeline/variables.cpp')
-rw-r--r--src/mongo/db/pipeline/variables.cpp14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/mongo/db/pipeline/variables.cpp b/src/mongo/db/pipeline/variables.cpp
index b64ec45db00..4ae50362250 100644
--- a/src/mongo/db/pipeline/variables.cpp
+++ b/src/mongo/db/pipeline/variables.cpp
@@ -142,7 +142,7 @@ void Variables::setValue(Id id, const Value& value, bool isConstant) {
// If a value has already been set for 'id', and that value was marked as constant, then it
// is illegal to modify.
invariant(!hasConstantValue(id));
- _values[id] = {value, isConstant};
+ _letParametersMap[id] = {value, isConstant};
}
void Variables::setValue(Variables::Id id, const Value& value) {
@@ -158,8 +158,8 @@ void Variables::setConstantValue(Variables::Id id, const Value& value) {
Value Variables::getUserDefinedValue(Variables::Id id) const {
invariant(isUserDefinedVariable(id));
- auto it = _values.find(id);
- uassert(40434, str::stream() << "Undefined variable id: " << id, it != _values.end());
+ auto it = _letParametersMap.find(id);
+ uassert(40434, str::stream() << "Undefined variable id: " << id, it != _letParametersMap.end());
return it->second.value;
}
@@ -233,12 +233,6 @@ void Variables::setDefaultRuntimeConstants(OperationContext* opCtx) {
setRuntimeConstants(Variables::generateRuntimeConstants(opCtx));
}
-BSONObj Variables::serializeLetParameters(const VariablesParseState& vps) const {
- auto bob = BSONObjBuilder{};
- for (auto&& [id, value] : _letParametersMap)
- bob << kIdToBuiltinVarName.at(id) << value;
- return bob.appendElements(vps.serialize(*this)).obj();
-}
void Variables::seedVariablesWithLetParameters(ExpressionContext* const expCtx,
const BSONObj letParams) {
for (auto&& elem : letParams) {
@@ -332,7 +326,7 @@ std::set<Variables::Id> VariablesParseState::getDefinedVariableIDs() const {
return ids;
}
-BSONObj VariablesParseState::serialize(const Variables& vars) const {
+BSONObj VariablesParseState::serializeUserVariables(const Variables& vars) const {
auto bob = BSONObjBuilder{};
for (auto&& [var_name, id] : _variables)
if (vars.hasValue(id))