summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/javascript_execution.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
commit4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch)
tree1682a647d4463397c119183369ae6f750d5fdcff /src/mongo/db/pipeline/javascript_execution.cpp
parentaa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff)
parent8f0827553e09872941945a093b647a4211a9db7f (diff)
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0' with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
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,