diff options
author | Arun Banala <arun.banala@mongodb.com> | 2019-05-29 11:36:58 +0100 |
---|---|---|
committer | Arun Banala <arun.banala@mongodb.com> | 2019-06-11 17:31:47 +0100 |
commit | 17cdb38b6db716dc47485a60ddff3c543e713e3d (patch) | |
tree | 71e9397c86220a4084da28d195563af3b3831507 /src/mongo/db/pipeline/document_source_group.cpp | |
parent | 38d00f12ec33b6c646ed50cac7b129d2a1566321 (diff) | |
download | mongo-17cdb38b6db716dc47485a60ddff3c543e713e3d.tar.gz |
SERVER-41065 Make evaluate() thread safe by passing 'Variables' as a parameter
Diffstat (limited to 'src/mongo/db/pipeline/document_source_group.cpp')
-rw-r--r-- | src/mongo/db/pipeline/document_source_group.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/mongo/db/pipeline/document_source_group.cpp b/src/mongo/db/pipeline/document_source_group.cpp index dd14584ecc9..ff46f44aba4 100644 --- a/src/mongo/db/pipeline/document_source_group.cpp +++ b/src/mongo/db/pipeline/document_source_group.cpp @@ -73,7 +73,7 @@ Document GroupFromFirstDocumentTransformation::applyTransformation(const Documen MutableDocument output(_accumulatorExprs.size()); for (auto&& expr : _accumulatorExprs) { - auto value = expr.second->evaluate(input); + auto value = expr.second->evaluate(input, &expr.second->getExpressionContext()->variables); output.addField(expr.first, value.missing() ? Value(BSONNULL) : value); } @@ -495,8 +495,9 @@ DocumentSource::GetNextResult DocumentSourceGroup::initialize() { dassert(numAccumulators == group.size()); for (size_t i = 0; i < numAccumulators; i++) { - group[i]->process(_accumulatedFields[i].expression->evaluate(rootDocument), - _doingMerge); + group[i]->process( + _accumulatedFields[i].expression->evaluate(rootDocument, &pExpCtx->variables), + _doingMerge); _memoryUsageBytes += group[i]->memUsageForSorter(); } @@ -611,7 +612,7 @@ shared_ptr<Sorter<Value, Value>::Iterator> DocumentSourceGroup::spill() { Value DocumentSourceGroup::computeId(const Document& root) { // If only one expression, return result directly if (_idExpressions.size() == 1) { - Value retValue = _idExpressions[0]->evaluate(root); + Value retValue = _idExpressions[0]->evaluate(root, &pExpCtx->variables); return retValue.missing() ? Value(BSONNULL) : std::move(retValue); } @@ -619,7 +620,7 @@ Value DocumentSourceGroup::computeId(const Document& root) { vector<Value> vals; vals.reserve(_idExpressions.size()); for (size_t i = 0; i < _idExpressions.size(); i++) { - vals.push_back(_idExpressions[i]->evaluate(root)); + vals.push_back(_idExpressions[i]->evaluate(root, &pExpCtx->variables)); } return Value(std::move(vals)); } |