summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSophia Tan <sophia_tll@hotmail.com>2022-08-01 18:12:58 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-08-01 19:22:20 +0000
commitafbfb806fc9b7ff3a9d10a895ee33e6ee7f85529 (patch)
tree4d324d0a36e0411a0c73f786cb8e7de7d84d95a7
parent6140491d37be5547bfe28d4de5505acc763006b2 (diff)
downloadmongo-afbfb806fc9b7ff3a9d10a895ee33e6ee7f85529.tar.gz
SERVER-68422 Add a new API CommandHelpers::parseNsFromCommand(const DatabaseName& dbName, const BSONObj& cmdObj)
-rw-r--r--src/mongo/db/commands.cpp9
-rw-r--r--src/mongo/db/commands.h9
2 files changed, 16 insertions, 2 deletions
diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp
index 1dd98be1b33..c84ff1f729f 100644
--- a/src/mongo/db/commands.cpp
+++ b/src/mongo/db/commands.cpp
@@ -319,10 +319,15 @@ NamespaceStringOrUUID CommandHelpers::parseNsOrUUID(StringData dbname, const BSO
}
std::string CommandHelpers::parseNsFromCommand(StringData dbname, const BSONObj& cmdObj) {
+ return parseNsFromCommand({boost::none, dbname}, cmdObj).ns();
+}
+
+NamespaceString CommandHelpers::parseNsFromCommand(const DatabaseName& dbName,
+ const BSONObj& cmdObj) {
BSONElement first = cmdObj.firstElement();
if (first.type() != mongo::String)
- return dbname.toString();
- return str::stream() << dbname << '.' << cmdObj.firstElement().valueStringData();
+ return NamespaceString(dbName);
+ return NamespaceString(dbName, cmdObj.firstElement().valueStringData());
}
ResourcePattern CommandHelpers::resourcePatternForNamespace(const std::string& ns) {
diff --git a/src/mongo/db/commands.h b/src/mongo/db/commands.h
index b08163fb248..83c44496d3c 100644
--- a/src/mongo/db/commands.h
+++ b/src/mongo/db/commands.h
@@ -147,9 +147,18 @@ struct CommandHelpers {
* appended to 'dbname' after a '.' character. If the first field is not of type
* mongo::String, then 'dbname' is returned unmodified.
*/
+ // TODO SERVER-68423: Remove this method once all call sites have been updated to pass
+ // DatabaseName.
static std::string parseNsFromCommand(StringData dbname, const BSONObj& cmdObj);
/**
+ * Return the namespace for the command. If the first field in 'cmdObj' is of type
+ * mongo::String, then that field is interpreted as the collection name.
+ * If the first field is not of type mongo::String, then the namespace only has database name.
+ */
+ static NamespaceString parseNsFromCommand(const DatabaseName& dbName, const BSONObj& cmdObj);
+
+ /**
* Utility that returns a ResourcePattern for the namespace returned from
* BasicCommand::parseNs(dbname, cmdObj). This will be either an exact namespace resource
* pattern or a database resource pattern, depending on whether parseNs returns a fully qualifed