summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/javascript_execution.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/javascript_execution.cpp')
-rw-r--r--src/mongo/db/pipeline/javascript_execution.cpp37
1 files changed, 11 insertions, 26 deletions
diff --git a/src/mongo/db/pipeline/javascript_execution.cpp b/src/mongo/db/pipeline/javascript_execution.cpp
index 8b6d3bc6f9b..f9ce429ba76 100644
--- a/src/mongo/db/pipeline/javascript_execution.cpp
+++ b/src/mongo/db/pipeline/javascript_execution.cpp
@@ -47,35 +47,20 @@ JsExecution* JsExecution::get(OperationContext* opCtx,
StringData database,
bool loadStoredProcedures,
boost::optional<int> jsHeapLimitMB) {
- // If a JsExecution object has already been created, return it.
- JsExecution* jsExec = getCached(opCtx, loadStoredProcedures);
- if (jsExec) {
- return jsExec;
- }
-
- // There is no cached JsExecution object, so create and cache one now.
auto& exec = getExec(opCtx);
- exec = std::make_unique<JsExecution>(opCtx, scope, jsHeapLimitMB);
- exec->getScope()->setLocalDB(database);
- if (loadStoredProcedures) {
- exec->getScope()->loadStored(opCtx, true);
- }
- exec->_storedProceduresLoaded = loadStoredProcedures;
-
- return exec.get();
-}
-
-JsExecution* JsExecution::getCached(OperationContext* opCtx, bool loadStoredProcedures) {
- auto& exec = getExec(opCtx);
- if (exec) {
- if (loadStoredProcedures == exec->_storedProceduresLoaded) {
- return exec.get();
+ if (!exec) {
+ exec = std::make_unique<JsExecution>(opCtx, scope, jsHeapLimitMB);
+ exec->getScope()->setLocalDB(database);
+ if (loadStoredProcedures) {
+ exec->getScope()->loadStored(opCtx, true);
}
- tasserted(
- 9136200,
- "A single operation cannot use both JavaScript aggregation expressions and $where.");
+ exec->_storedProceduresLoaded = loadStoredProcedures;
+ } else {
+ uassert(31438,
+ "A single operation cannot use both JavaScript aggregation expressions and $where.",
+ loadStoredProcedures == exec->_storedProceduresLoaded);
}
- return nullptr;
+ return exec.get();
}
Value JsExecution::callFunction(ScriptingFunction func,