diff options
Diffstat (limited to 'src/mongo/db/pipeline/javascript_execution.cpp')
| -rw-r--r-- | src/mongo/db/pipeline/javascript_execution.cpp | 37 |
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, |
