SERVER-114631 Remove isParsingPipeline in expCtx (#45032)

GitOrigin-RevId: c12a19e4bad2c2d3583389dc3828848392356884
This commit is contained in:
Finley Lau 2025-12-11 10:00:48 -06:00 committed by MongoDB Bot
parent e52b386d44
commit 366a3c17eb
6 changed files with 24 additions and 25 deletions

View File

@ -60,12 +60,34 @@ assert.commandFailedWithCode(
40602, 40602,
); );
// $search is not allowed in an update pipeline. Error code matters on version. // $search is not allowed in an update pipeline.
assert.commandFailedWithCode(testDB.runCommand({"findandmodify": collName, "update": [{"$search": {}}]}), [ assert.commandFailedWithCode(testDB.runCommand({"findandmodify": collName, "update": [{"$search": {}}]}), [
6600901,
ErrorCodes.InvalidOptions, ErrorCodes.InvalidOptions,
]); ]);
// $search is not allowed in an update command pipeline.
assert.commandFailedWithCode(
testDB.runCommand({
update: collName,
updates: [{q: {_id: 0}, u: [{$search: {}}]}],
}),
ErrorCodes.InvalidOptions,
);
// $searchMeta is not allowed in an update pipeline.
assert.commandFailedWithCode(testDB.runCommand({"findandmodify": collName, "update": [{"$searchMeta": {}}]}), [
ErrorCodes.InvalidOptions,
]);
// $searchMeta is not allowed in an update command pipeline.
assert.commandFailedWithCode(
testDB.runCommand({
update: collName,
updates: [{q: {_id: 0}, u: [{$searchMeta: {}}]}],
}),
ErrorCodes.InvalidOptions,
);
// Make sure the server is still up. // Make sure the server is still up.
assert.commandWorked(testDB.runCommand("ping")); assert.commandWorked(testDB.runCommand("ping"));

View File

@ -709,14 +709,6 @@ public:
_params.isParsingViewDefinition = isParsingViewDefinition; _params.isParsingViewDefinition = isParsingViewDefinition;
} }
bool getIsParsingPipelineUpdate() const {
return _params.isParsingPipelineUpdate;
}
void setIsParsingPipelineUpdate(bool isParsingPipelineUpdate) {
_params.isParsingPipelineUpdate = isParsingPipelineUpdate;
}
bool getIsParsingCollectionValidator() const { bool getIsParsingCollectionValidator() const {
return _params.isParsingCollectionValidator; return _params.isParsingCollectionValidator;
} }
@ -1132,8 +1124,6 @@ protected:
bool inUnionWith = false; bool inUnionWith = false;
// True if this ExpressionContext is used to parse a view definition pipeline. // True if this ExpressionContext is used to parse a view definition pipeline.
bool isParsingViewDefinition = false; bool isParsingViewDefinition = false;
// True if this ExpressionContext is being used to parse an update pipeline.
bool isParsingPipelineUpdate = false;
// True if this ExpressionContext is used to parse a collection validator expression. // True if this ExpressionContext is used to parse a collection validator expression.
bool isParsingCollectionValidator = false; bool isParsingCollectionValidator = false;
// These fields can be used in a context when API version validations were not enforced // These fields can be used in a context when API version validations were not enforced

View File

@ -174,12 +174,6 @@ ExpressionContextBuilder& ExpressionContextBuilder::isParsingViewDefinition(
return *this; return *this;
} }
ExpressionContextBuilder& ExpressionContextBuilder::isParsingPipelineUpdate(
bool isParsingPipelineUpdate) {
params.isParsingPipelineUpdate = isParsingPipelineUpdate;
return *this;
}
ExpressionContextBuilder& ExpressionContextBuilder::isParsingCollectionValidator( ExpressionContextBuilder& ExpressionContextBuilder::isParsingCollectionValidator(
bool isParsingCollectionValidator) { bool isParsingCollectionValidator) {
params.isParsingCollectionValidator = isParsingCollectionValidator; params.isParsingCollectionValidator = isParsingCollectionValidator;

View File

@ -77,7 +77,6 @@ public:
ExpressionContextBuilder& inLookup(bool); ExpressionContextBuilder& inLookup(bool);
ExpressionContextBuilder& inUnionWith(bool); ExpressionContextBuilder& inUnionWith(bool);
ExpressionContextBuilder& isParsingViewDefinition(bool); ExpressionContextBuilder& isParsingViewDefinition(bool);
ExpressionContextBuilder& isParsingPipelineUpdate(bool);
ExpressionContextBuilder& isParsingCollectionValidator(bool); ExpressionContextBuilder& isParsingCollectionValidator(bool);
ExpressionContextBuilder& isIdHackQuery(bool); ExpressionContextBuilder& isIdHackQuery(bool);
ExpressionContextBuilder& isFleQuery(bool); ExpressionContextBuilder& isFleQuery(bool);

View File

@ -124,10 +124,6 @@ InternalSearchMongotRemoteSpec prepareInternalSearchMetaMongotSpec(
return internalSpec; return internalSpec;
} }
uassert(6600901,
"Running $searchMeta command in non-allowed context (update pipeline)",
!expCtx->getIsParsingPipelineUpdate());
// If 'searchReturnEofImmediately' is set, we return this stage as is because we don't expect to // If 'searchReturnEofImmediately' is set, we return this stage as is because we don't expect to
// return any results. More precisely, we wish to avoid calling 'planShardedSearch' when no // return any results. More precisely, we wish to avoid calling 'planShardedSearch' when no
// mongot is set up. // mongot is set up.

View File

@ -139,12 +139,10 @@ void parseUpdate(boost::intrusive_ptr<ExpressionContext> expCtx, ParsedUpdate& p
parsedUpdate.driver->setSkipDotsDollarsCheck(true); parsedUpdate.driver->setSkipDotsDollarsCheck(true);
} }
expCtx->setIsParsingPipelineUpdate(true);
parsedUpdate.driver->parse(*parsedUpdate.modification, parsedUpdate.driver->parse(*parsedUpdate.modification,
*parsedUpdate.arrayFilters, *parsedUpdate.arrayFilters,
parsedUpdate.request->getUpdateConstants(), parsedUpdate.request->getUpdateConstants(),
parsedUpdate.request->isMulti()); parsedUpdate.request->isMulti());
expCtx->setIsParsingPipelineUpdate(false);
} }
/** /**