34 #include "mongo/base/shim.h" 35 #include "mongo/base/status.h" 36 #include "mongo/base/string_data.h" 37 #include "mongo/bson/bsonobj.h" 40 #include "mongo/db/namespace_string.h" 41 #include "mongo/db/repl/optime.h" 43 #include "mongo/db/views/view.h" 44 #include "mongo/db/views/view_catalog.h" 45 #include "mongo/stdx/functional.h" 46 #include "mongo/util/mongoutils/str.h" 47 #include "mongo/util/string_map.h" 65 virtual void init(OperationContext*
opCtx) = 0;
67 virtual void close(OperationContext* opCtx,
const std::string& reason) = 0;
69 virtual const std::string&
name()
const = 0;
79 virtual void setDropPending(OperationContext* opCtx,
bool dropPending) = 0;
81 virtual bool isDropPending(OperationContext* opCtx)
const = 0;
83 virtual void getStats(OperationContext* opCtx, BSONObjBuilder* output,
double scale) = 0;
89 repl::OpTime dropOpTime) = 0;
91 const NamespaceString& fullns,
92 repl::OpTime dropOpTime) = 0;
94 virtual Status dropView(OperationContext* opCtx, StringData fullns) = 0;
100 const BSONObj& idIndex) = 0;
111 const NamespaceString& nss) = 0;
123 OperationContext* opCtx, StringData collectionNameModel) = 0;
126 virtual const CollectionMap&
collections()
const = 0;
142 (OperationContext * opCtx,
148 const BSONObj& idIndex = BSONObj())
152 OperationContext* opCtx,
156 ->std::unique_ptr<Impl>) makeImpl;
169 explicit inline iterator() =
default;
181 return lhs.
_it == rhs.
_it;
185 return !(lhs == rhs);
194 auto oldPosition = *
this;
200 CollectionMap::const_iterator
_it;
203 explicit inline Database(OperationContext*
const opCtx,
204 const StringData name,
206 :
_pimpl(makeImpl(this, opCtx, name, dbEntry, PrivateCall<
Database>{})) {
225 inline void close(OperationContext*
const opCtx,
const std::string& reason) {
229 inline const std::string&
name()
const {
275 inline void getStats(OperationContext*
const opCtx,
276 BSONObjBuilder*
const output,
277 const double scale = 1) {
293 const StringData fullns,
294 repl::OpTime dropOpTime = {}) {
298 const NamespaceString& fullns,
299 repl::OpTime dropOpTime = {}) {
311 const BSONObj& idIndex = BSONObj()) {
316 const StringData viewName,
341 const NamespaceString& nss) {
346 const StringData fromNS,
347 const StringData toNS,
348 const bool stayTemp) {
380 OperationContext* opCtx, StringData collectionNameModel) {
389 static void hook() noexcept;
virtual Status dropCollectionEvenIfSystem(OperationContext *opCtx, const NamespaceString &fullns, repl::OpTime dropOpTime)=0
virtual Status renameCollection(OperationContext *opCtx, StringData fromNS, StringData toNS, bool stayTemp)=0
StatusWith< NamespaceString > makeUniqueCollectionNamespace(OperationContext *opCtx, StringData collectionNameModel)
Generates a collection namespace suitable for creating a temporary collection.
Definition: database.h:379
StringMap< Collection * > CollectionMap
Definition: database.h:59
Database(OperationContext *const opCtx, const StringData name, DatabaseCatalogEntry *const dbEntry)
Definition: database.h:203
virtual Status createView(OperationContext *opCtx, StringData viewName, const CollectionOptions &options)=0
ViewCatalog * getViewCatalog()
Get the view catalog, which holds the definition for all views created on this database.
Definition: database.h:336
iterator & operator++()
Definition: database.h:188
const char * getProfilingNS() const
Definition: database.h:251
virtual void init(OperationContext *opCtx)=0
Collection * getCollection(OperationContext *opCtx, const NamespaceString &ns) const
Definition: database.h:328
ptrdiff_t difference_type
Definition: database.h:167
iterator begin() const
Definition: database.h:216
virtual Collection * getOrCreateCollection(OperationContext *opCtx, const NamespaceString &nss)=0
Status dropView(OperationContext *const opCtx, const StringData fullns)
Definition: database.h:303
Collection *const const NamespaceString & ns
Definition: collection_info_cache_impl.cpp:53
virtual const NamespaceString & getSystemIndexesName() const =0
Collection * getCollection(OperationContext *opCtx, const StringData ns) const
Definition: database.h:324
Definition: database.h:61
Definition: collection_options.h:57
reference operator*() const
Definition: database.h:172
Database *const OperationContext *const const StringData DatabaseCatalogEntry *const dbEntry
Definition: database_impl.cpp:82
const std::string & name() const
Definition: database.h:229
Status dropCollectionEvenIfSystem(OperationContext *const opCtx, const NamespaceString &fullns, repl::OpTime dropOpTime={})
Definition: database.h:297
virtual StatusWith< NamespaceString > makeUniqueCollectionNamespace(OperationContext *opCtx, StringData collectionNameModel)=0
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
virtual int getProfilingLevel() const =0
virtual const DatabaseCatalogEntry * getDatabaseCatalogEntry() const =0
Database *const this_
Definition: database_impl.cpp:82
friend bool operator!=(const iterator &lhs, const iterator &rhs)
Definition: database.h:184
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
Iterating over a Database yields Collection* pointers.
Definition: database.h:161
Definition: collection_options.h:68
std::forward_iterator_tag iterator_category
Definition: database.h:163
Collection * getOrCreateCollection(OperationContext *const opCtx, const NamespaceString &nss)
Definition: database.h:340
TUHook() noexcept
Definition: database.h:391
virtual Collection * getCollection(OperationContext *opCtx, StringData ns) const =0
const std::string & getSystemViewsName() const
Definition: database.h:365
this is NOT safe through a yield right now.
Definition: collection.h:160
Status dropCollection(OperationContext *const opCtx, const StringData fullns, repl::OpTime dropOpTime={})
dropCollection() will refuse to drop system collections.
Definition: database.h:292
static MONGO_DECLARE_SHIM((OperationContext *opCtx) ->void) dropAllDatabasesExceptLocal
Database & operator=(Database &&)=delete
void close(OperationContext *const opCtx, const std::string &reason)
Definition: database.h:225
CollectionMap::const_iterator _it
Definition: database.h:200
virtual void setDropPending(OperationContext *opCtx, bool dropPending)=0
const NamespaceString & getSystemIndexesName() const
Definition: database.h:361
Status createView(OperationContext *const opCtx, const StringData viewName, const CollectionOptions &options)
Definition: database.h:315
virtual void close(OperationContext *opCtx, const std::string &reason)=0
virtual const std::string & name() const =0
IndexSet::const_iterator it
Definition: ephemeral_for_test_btree_impl.cpp:458
ParseKind
The 'uuid' member is a collection property stored in the catalog with user-settable options...
Definition: collection_options.h:68
Definition: index_key_validate.h:40
const DatabaseCatalogEntry * getDatabaseCatalogEntry() const
Definition: database.h:281
pointer operator->() const
Definition: database.h:176
Collection * createCollection(OperationContext *const opCtx, StringData ns, const CollectionOptions &options=CollectionOptions(), const bool createDefaultIndexes=true, const BSONObj &idIndex=BSONObj())
Definition: database.h:307
IndexSet::const_iterator _it
Definition: ephemeral_for_test_btree_impl.cpp:452
OperationContext Database StringData BSONObj CollectionOptions::ParseKind parseKind
Definition: database_impl.cpp:949
std::unique_ptr< Impl > _pimpl
Definition: database.h:407
virtual const std::string & getSystemViewsName() const =0
Status dropDatabase(OperationContext *opCtx, const std::string &dbName)
Drops the database "dbName".
Definition: drop_database.cpp:85
Definition: database_catalog_entry.h:50
iterator operator++(int)
Definition: database.h:193
Represents a logical database containing Collections.
Definition: database.h:57
virtual const char * getProfilingNS() const =0
iterator end() const
Definition: database.h:220
iterator(CollectionMap::const_iterator it)
Definition: database.h:170
void setDropPending(OperationContext *opCtx, bool dropPending)
Sets the 'drop-pending' state of this Database.
Definition: database.h:263
OperationContext Database * db
Definition: database_impl.cpp:949
OperationContext Database StringData BSONObj options
Definition: database_impl.cpp:949
virtual bool isDropPending(OperationContext *opCtx) const =0
virtual void getStats(OperationContext *opCtx, BSONObjBuilder *output, double scale)=0
int getProfilingLevel() const
Definition: database.h:247
virtual ViewCatalog * getViewCatalog()=0
const Impl & _impl() const
Definition: database.h:397
Definition: database.h:388
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool createDefaultIndexes
Definition: database_impl.cpp:949
bool isDropPending(OperationContext *opCtx) const
Returns the 'drop-pending' state of this Database.
Definition: database.h:271
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
virtual CollectionMap & collections()=0
Status renameCollection(OperationContext *const opCtx, const StringData fromNS, const StringData toNS, const bool stayTemp)
Definition: database.h:345
void clearTmpCollections(OperationContext *const opCtx)
Definition: database.h:233
void getStats(OperationContext *const opCtx, BSONObjBuilder *const output, const double scale=1)
Definition: database.h:275
friend bool operator==(const iterator &lhs, const iterator &rhs)
Definition: database.h:180
virtual Collection * createCollection(OperationContext *opCtx, StringData ns, const CollectionOptions &options, bool createDefaultIndexes, const BSONObj &idIndex)=0
Status setProfilingLevel(OperationContext *const opCtx, const int newLevel)
Sets a new profiling level for the database and returns the outcome.
Definition: database.h:243
Impl & _impl()
Definition: database.h:402
virtual void clearTmpCollections(OperationContext *opCtx)=0
virtual Status dropCollection(OperationContext *opCtx, StringData fullns, repl::OpTime dropOpTime)=0
virtual Status setProfilingLevel(OperationContext *opCtx, int newLevel)=0
virtual Status dropView(OperationContext *opCtx, StringData fullns)=0