summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/variables.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/variables.cpp')
-rw-r--r--src/mongo/db/pipeline/variables.cpp32
1 files changed, 10 insertions, 22 deletions
diff --git a/src/mongo/db/pipeline/variables.cpp b/src/mongo/db/pipeline/variables.cpp
index 8a79c23f7ca..c76b12cabef 100644
--- a/src/mongo/db/pipeline/variables.cpp
+++ b/src/mongo/db/pipeline/variables.cpp
@@ -136,7 +136,7 @@ Value Variables::getValue(Id id, const Document& root) const {
return Value();
case Variables::kNowId:
case Variables::kClusterTimeId:
- if (auto it = _runtimeConstants.find(id); it != _runtimeConstants.end()) {
+ if (auto it = _runtimeConstantsMap.find(id); it != _runtimeConstantsMap.end()) {
return it->second;
}
@@ -169,40 +169,28 @@ Document Variables::getDocument(Id id, const Document& root) const {
return Document();
}
-RuntimeConstants Variables::getRuntimeConstants() const {
- RuntimeConstants constants;
-
- if (auto it = _runtimeConstants.find(kNowId); it != _runtimeConstants.end()) {
- constants.setLocalNow(it->second.getDate());
- }
- if (auto it = _runtimeConstants.find(kClusterTimeId); it != _runtimeConstants.end()) {
- constants.setClusterTime(it->second.getTimestamp());
- }
- if (auto it = _runtimeConstants.find(kJsScopeId); it != _runtimeConstants.end()) {
- constants.setJsScope(it->second.getDocument().toBson());
- }
- if (auto it = _runtimeConstants.find(kIsMapReduceId); it != _runtimeConstants.end()) {
- constants.setIsMapReduce(it->second.getBool());
- }
-
- return constants;
+const RuntimeConstants& Variables::getRuntimeConstants() const {
+ invariant(_runtimeConstants);
+ return *_runtimeConstants;
}
void Variables::setRuntimeConstants(const RuntimeConstants& constants) {
- _runtimeConstants[kNowId] = Value(constants.getLocalNow());
+ invariant(!_runtimeConstants);
+ _runtimeConstantsMap[kNowId] = Value(constants.getLocalNow());
// We use a null Timestamp to indicate that the clusterTime is not available; this can happen if
// the logical clock is not running. We do not use boost::optional because this would allow the
// IDL to serialize a RuntimConstants without clusterTime, which should always be an error.
if (!constants.getClusterTime().isNull()) {
- _runtimeConstants[kClusterTimeId] = Value(constants.getClusterTime());
+ _runtimeConstantsMap[kClusterTimeId] = Value(constants.getClusterTime());
}
if (constants.getJsScope()) {
- _runtimeConstants[kJsScopeId] = Value(constants.getJsScope().get());
+ _runtimeConstantsMap[kJsScopeId] = Value(constants.getJsScope().get());
}
if (constants.getIsMapReduce()) {
- _runtimeConstants[kIsMapReduceId] = Value(constants.getIsMapReduce().get());
+ _runtimeConstantsMap[kIsMapReduceId] = Value(constants.getIsMapReduce().get());
}
+ _runtimeConstants = constants;
}
void Variables::setDefaultRuntimeConstants(OperationContext* opCtx) {