diff options
-rw-r--r-- | src/mongo/db/database_name.h | 74 | ||||
-rw-r--r-- | src/mongo/db/namespace_string.cpp | 16 | ||||
-rw-r--r-- | src/mongo/db/namespace_string.h | 49 |
3 files changed, 67 insertions, 72 deletions
diff --git a/src/mongo/db/database_name.h b/src/mongo/db/database_name.h index 39d16b5238c..bc1457f192e 100644 --- a/src/mongo/db/database_name.h +++ b/src/mongo/db/database_name.h @@ -157,6 +157,38 @@ public: return (_tenantId == other._tenantId) && boost::iequals(toString(), other.toString()); } + friend std::ostream& operator<<(std::ostream& stream, const DatabaseName& tdb) { + return stream << tdb.toString(); + } + + friend StringBuilder& operator<<(StringBuilder& builder, const DatabaseName& tdb) { + return builder << tdb.toString(); + } + + friend bool operator==(const DatabaseName& a, const DatabaseName& b) { + return a._lens() == b._lens(); + } + + friend bool operator!=(const DatabaseName& a, const DatabaseName& b) { + return a._lens() != b._lens(); + } + + friend bool operator<(const DatabaseName& a, const DatabaseName& b) { + return a._lens() < b._lens(); + } + + friend bool operator>(const DatabaseName& a, const DatabaseName& b) { + return a._lens() > b._lens(); + } + + friend bool operator<=(const DatabaseName& a, const DatabaseName& b) { + return a._lens() <= b._lens(); + } + + friend bool operator>=(const DatabaseName& a, const DatabaseName& b) { + return a._lens() >= b._lens(); + } + template <typename H> friend H AbslHashValue(H h, const DatabaseName& obj) { if (obj._tenantId) { @@ -170,48 +202,14 @@ public: } private: + std::tuple<const boost::optional<TenantId>&, const std::string&> _lens() const { + return std::tie(_tenantId, _dbString); + } + boost::optional<TenantId> _tenantId = boost::none; std::string _dbString; }; -inline std::ostream& operator<<(std::ostream& stream, const DatabaseName& tdb) { - return stream << tdb.toString(); -} - -inline StringBuilder& operator<<(StringBuilder& builder, const DatabaseName& tdb) { - return builder << tdb.toString(); -} - -inline bool operator==(const DatabaseName& lhs, const DatabaseName& rhs) { - return (lhs.tenantId() == rhs.tenantId()) && (lhs.db() == rhs.db()); -} - -inline bool operator!=(const DatabaseName& lhs, const DatabaseName& rhs) { - return !(lhs == rhs); -} - -inline bool operator<(const DatabaseName& lhs, const DatabaseName& rhs) { - if (lhs.tenantId() != rhs.tenantId()) { - return lhs.tenantId() < rhs.tenantId(); - } - return lhs.db() < rhs.db(); -} - -inline bool operator>(const DatabaseName& lhs, const DatabaseName& rhs) { - if (lhs.tenantId() != rhs.tenantId()) { - return lhs.tenantId() > rhs.tenantId(); - } - return lhs.db() > rhs.db(); -} - -inline bool operator<=(const DatabaseName& lhs, const DatabaseName& rhs) { - return !(lhs > rhs); -} - -inline bool operator>=(const DatabaseName& lhs, const DatabaseName& rhs) { - return !(lhs < rhs); -} - // The `constexpr` definitions for `DatabaseName::ConstantProxy` static data members are below. See // `constexpr` definitions for the `NamespaceString::ConstantProxy` static data members of NSS in // namespace_string.h for more details. diff --git a/src/mongo/db/namespace_string.cpp b/src/mongo/db/namespace_string.cpp index 5eda39b5ec8..f249b9b239f 100644 --- a/src/mongo/db/namespace_string.cpp +++ b/src/mongo/db/namespace_string.cpp @@ -435,20 +435,4 @@ void NamespaceStringOrUUID::serialize(BSONObjBuilder* builder, StringData fieldN } } -std::ostream& operator<<(std::ostream& stream, const NamespaceString& nss) { - return stream << nss.toString(); -} - -std::ostream& operator<<(std::ostream& stream, const NamespaceStringOrUUID& nsOrUUID) { - return stream << nsOrUUID.toString(); -} - -StringBuilder& operator<<(StringBuilder& builder, const NamespaceString& nss) { - return builder << nss.toString(); -} - -StringBuilder& operator<<(StringBuilder& builder, const NamespaceStringOrUUID& nsOrUUID) { - return builder << nsOrUUID.toString(); -} - } // namespace mongo diff --git a/src/mongo/db/namespace_string.h b/src/mongo/db/namespace_string.h index 6b90b1aa1a4..9433c7592ad 100644 --- a/src/mongo/db/namespace_string.h +++ b/src/mongo/db/namespace_string.h @@ -703,30 +703,36 @@ public: */ static bool validCollectionName(StringData coll); - // Relops among `NamespaceString`. + friend std::ostream& operator<<(std::ostream& stream, const NamespaceString& nss) { + return stream << nss.toString(); + } + + friend StringBuilder& operator<<(StringBuilder& builder, const NamespaceString& nss) { + return builder << nss.toString(); + } + friend bool operator==(const NamespaceString& a, const NamespaceString& b) { - return (a.tenantId() == b.tenantId()) && (a.ns() == b.ns()); + return a._lens() == b._lens(); } + friend bool operator!=(const NamespaceString& a, const NamespaceString& b) { - return !(a == b); + return a._lens() != b._lens(); } + friend bool operator<(const NamespaceString& a, const NamespaceString& b) { - if (a.tenantId() != b.tenantId()) { - return a.tenantId() < b.tenantId(); - } - return a.ns() < b.ns(); + return a._lens() < b._lens(); } + friend bool operator>(const NamespaceString& a, const NamespaceString& b) { - if (a.tenantId() != b.tenantId()) { - return a.tenantId() > b.tenantId(); - } - return a.ns() > b.ns(); + return a._lens() > b._lens(); } + friend bool operator<=(const NamespaceString& a, const NamespaceString& b) { - return !(a > b); + return a._lens() <= b._lens(); } + friend bool operator>=(const NamespaceString& a, const NamespaceString& b) { - return !(a < b); + return a._lens() >= b._lens(); } template <typename H> @@ -742,6 +748,10 @@ public: } private: + std::tuple<const boost::optional<TenantId>&, const std::string&> _lens() const { + return std::tie(tenantId(), ns()); + } + DatabaseName _dbName; std::string _ns; size_t _dotIndex = std::string::npos; @@ -813,6 +823,14 @@ public: void serialize(BSONObjBuilder* builder, StringData fieldName) const; + friend std::ostream& operator<<(std::ostream& stream, const NamespaceStringOrUUID& o) { + return stream << o.toString(); + } + + friend StringBuilder& operator<<(StringBuilder& builder, const NamespaceStringOrUUID& o) { + return builder << o.toString(); + } + private: // At any given time exactly one of these optionals will be initialized. boost::optional<NamespaceString> _nss; @@ -827,11 +845,6 @@ private: boost::optional<DatabaseName> _dbname; }; -std::ostream& operator<<(std::ostream& stream, const NamespaceString& nss); -std::ostream& operator<<(std::ostream& stream, const NamespaceStringOrUUID& nsOrUUID); -StringBuilder& operator<<(StringBuilder& builder, const NamespaceString& nss); -StringBuilder& operator<<(StringBuilder& builder, const NamespaceStringOrUUID& nsOrUUID); - /** * "database.a.b.c" -> "database" */ |