Storage Engine API
mongo::DatabaseImpl Class Reference

Represents a logical database containing Collections. More...

#include <database_impl.h>

Inheritance diagram for mongo::DatabaseImpl:
mongo::Database::Impl

Detailed Description

Represents a logical database containing Collections.

The semantics for a const Database are that you can mutate individual collections but not add or remove them.

Classes

class  AddCollectionChange
 
class  iterator
 Iterating over a Database yields Collection* pointers. More...
 
class  RemoveCollectionChange
 

Public Types

typedef StringMap< Collection * > CollectionMap
 

Public Member Functions

 DatabaseImpl (Database *this_, OperationContext *opCtx, StringData name, DatabaseCatalogEntry *dbEntry)
 
 ~DatabaseImpl ()
 
void init (OperationContext *) final
 
iterator begin () const
 
iterator end () const
 
void close (OperationContext *opCtx, const std::string &reason) final
 
const std::string & name () const final
 
void clearTmpCollections (OperationContext *opCtx) final
 
Status setProfilingLevel (OperationContext *opCtx, int newLevel) final
 Sets a new profiling level for the database and returns the outcome. More...
 
int getProfilingLevel () const final
 
const char * getProfilingNS () const final
 
void setDropPending (OperationContext *opCtx, bool dropPending) final
 
bool isDropPending (OperationContext *opCtx) const final
 
void getStats (OperationContext *opCtx, BSONObjBuilder *output, double scale=1) final
 
const DatabaseCatalogEntrygetDatabaseCatalogEntry () const final
 
Status dropCollection (OperationContext *opCtx, StringData fullns, repl::OpTime dropOpTime) final
 dropCollection() will refuse to drop system collections. More...
 
Status dropCollectionEvenIfSystem (OperationContext *opCtx, const NamespaceString &fullns, repl::OpTime dropOpTime) final
 
Status dropView (OperationContext *opCtx, StringData fullns) final
 
CollectioncreateCollection (OperationContext *opCtx, StringData ns, const CollectionOptions &options=CollectionOptions(), bool createDefaultIndexes=true, const BSONObj &idIndex=BSONObj()) final
 
Status createView (OperationContext *opCtx, StringData viewName, const CollectionOptions &options) final
 
CollectiongetCollection (OperationContext *opCtx, StringData ns) const final
 
CollectiongetCollection (OperationContext *opCtx, const NamespaceString &ns) const
 
ViewCatalog * getViewCatalog () final
 Get the view catalog, which holds the definition for all views created on this database. More...
 
CollectiongetOrCreateCollection (OperationContext *opCtx, const NamespaceString &nss) final
 
Status renameCollection (OperationContext *opCtx, StringData fromNS, StringData toNS, bool stayTemp) final
 
const NamespaceString & getSystemIndexesName () const final
 
const std::string & getSystemViewsName () const final
 
StatusWith< NamespaceString > makeUniqueCollectionNamespace (OperationContext *opCtx, StringData collectionNameModel) final
 
CollectionMapcollections () final
 
const CollectionMapcollections () const final
 
- Public Member Functions inherited from mongo::Database::Impl
virtual ~Impl ()=0
 

Static Public Member Functions

static void dropDatabase (OperationContext *opCtx, Database *db)
 Physically drops the specified opened database and removes it from the server's metadata. More...
 
static Status validateDBName (StringData dbname)
 

Private Member Functions

Collection_getOrCreateCollectionInstance (OperationContext *opCtx, const NamespaceString &nss)
 Gets or creates collection instance from existing metadata, Returns NULL if invalid. More...
 
void _checkCanCreateCollection (OperationContext *opCtx, const NamespaceString &nss, const CollectionOptions &options)
 Throws if there is a reason 'ns' cannot be created as a user collection. More...
 
void _clearCollectionCache (OperationContext *opCtx, StringData fullns, const std::string &reason, bool collectionGoingAway)
 Deregisters and invalidates all cursors on collection 'fullns'. More...
 
Status _finishDropCollection (OperationContext *opCtx, const NamespaceString &fullns, Collection *collection)
 Completes a collection drop by removing all the indexes and removing the collection itself from the storage engine. More...
 

Private Attributes

const std::string _name
 
DatabaseCatalogEntry_dbEntry
 
const std::string _profileName
 
const NamespaceString _indexesName
 
const std::string _viewsName
 
int _profile
 
bool _dropPending = false
 
std::unique_ptr< PseudoRandom > _uniqueCollectionNamespacePseudoRandom
 
CollectionMap _collections
 
DurableViewCatalogImpl _durableViews
 
ViewCatalog _views
 
Database_this
 

Friends

class Collection
 
class NamespaceDetails
 
class IndexCatalog
 

Member Typedef Documentation

◆ CollectionMap

Constructor & Destructor Documentation

◆ DatabaseImpl()

mongo::DatabaseImpl::DatabaseImpl ( Database this_,
OperationContext *  opCtx,
StringData  name,
DatabaseCatalogEntry dbEntry 
)
explicit

◆ ~DatabaseImpl()

mongo::DatabaseImpl::~DatabaseImpl ( )

Member Function Documentation

◆ _checkCanCreateCollection()

void mongo::DatabaseImpl::_checkCanCreateCollection ( OperationContext *  opCtx,
const NamespaceString &  nss,
const CollectionOptions options 
)
private

Throws if there is a reason 'ns' cannot be created as a user collection.

◆ _clearCollectionCache()

void mongo::DatabaseImpl::_clearCollectionCache ( OperationContext *  opCtx,
StringData  fullns,
const std::string &  reason,
bool  collectionGoingAway 
)
private

Deregisters and invalidates all cursors on collection 'fullns'.

Callers must specify 'reason' for why the cache is being cleared. If 'collectionGoingAway' is false, unpinned cursors will not be killed.

◆ _finishDropCollection()

Status mongo::DatabaseImpl::_finishDropCollection ( OperationContext *  opCtx,
const NamespaceString &  fullns,
Collection collection 
)
private

Completes a collection drop by removing all the indexes and removing the collection itself from the storage engine.

This is called from dropCollectionEvenIfSystem() to drop the collection immediately on unreplicated collection drops.

◆ _getOrCreateCollectionInstance()

Collection * mongo::DatabaseImpl::_getOrCreateCollectionInstance ( OperationContext *  opCtx,
const NamespaceString &  nss 
)
private

Gets or creates collection instance from existing metadata, Returns NULL if invalid.

Note: This does not add the collection to _collections map, that must be done by the caller, who takes onership of the Collection*

◆ begin()

iterator mongo::DatabaseImpl::begin ( ) const
inline

◆ clearTmpCollections()

void mongo::DatabaseImpl::clearTmpCollections ( OperationContext *  opCtx)
finalvirtual

Implements mongo::Database::Impl.

◆ close()

void mongo::DatabaseImpl::close ( OperationContext *  opCtx,
const std::string &  reason 
)
finalvirtual

Implements mongo::Database::Impl.

◆ collections() [1/2]

CollectionMap& mongo::DatabaseImpl::collections ( )
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ collections() [2/2]

const CollectionMap& mongo::DatabaseImpl::collections ( ) const
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ createCollection()

Collection * mongo::DatabaseImpl::createCollection ( OperationContext *  opCtx,
StringData  ns,
const CollectionOptions options = CollectionOptions(),
bool  createDefaultIndexes = true,
const BSONObj &  idIndex = BSONObj() 
)
finalvirtual

Implements mongo::Database::Impl.

◆ createView()

Status mongo::DatabaseImpl::createView ( OperationContext *  opCtx,
StringData  viewName,
const CollectionOptions options 
)
finalvirtual

Implements mongo::Database::Impl.

◆ dropCollection()

Status mongo::DatabaseImpl::dropCollection ( OperationContext *  opCtx,
StringData  fullns,
repl::OpTime  dropOpTime 
)
finalvirtual

dropCollection() will refuse to drop system collections.

Use dropCollectionEvenIfSystem() if that is required.

If we are applying a 'drop' oplog entry on a secondary, 'dropOpTime' will contain the optime of the oplog entry.

Implements mongo::Database::Impl.

◆ dropCollectionEvenIfSystem()

Status mongo::DatabaseImpl::dropCollectionEvenIfSystem ( OperationContext *  opCtx,
const NamespaceString &  fullns,
repl::OpTime  dropOpTime 
)
finalvirtual

Implements mongo::Database::Impl.

◆ dropDatabase()

void mongo::DatabaseImpl::dropDatabase ( OperationContext *  opCtx,
Database db 
)
static

Physically drops the specified opened database and removes it from the server's metadata.

It doesn't notify the replication subsystem or do any other consistency checks, so it should not be used directly from user commands.

Must be called with the specified database locked in X mode.

◆ dropView()

Status mongo::DatabaseImpl::dropView ( OperationContext *  opCtx,
StringData  fullns 
)
finalvirtual

Implements mongo::Database::Impl.

◆ end()

iterator mongo::DatabaseImpl::end ( ) const
inline

◆ getCollection() [1/2]

Collection * mongo::DatabaseImpl::getCollection ( OperationContext *  opCtx,
StringData  ns 
) const
finalvirtual
Parameters
ns- this is fully qualified, which is maybe not ideal ???

Implements mongo::Database::Impl.

◆ getCollection() [2/2]

Collection * mongo::DatabaseImpl::getCollection ( OperationContext *  opCtx,
const NamespaceString &  ns 
) const

◆ getDatabaseCatalogEntry()

const DatabaseCatalogEntry * mongo::DatabaseImpl::getDatabaseCatalogEntry ( ) const
finalvirtual

Implements mongo::Database::Impl.

◆ getOrCreateCollection()

Collection * mongo::DatabaseImpl::getOrCreateCollection ( OperationContext *  opCtx,
const NamespaceString &  nss 
)
finalvirtual

Implements mongo::Database::Impl.

◆ getProfilingLevel()

int mongo::DatabaseImpl::getProfilingLevel ( ) const
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ getProfilingNS()

const char* mongo::DatabaseImpl::getProfilingNS ( ) const
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ getStats()

void mongo::DatabaseImpl::getStats ( OperationContext *  opCtx,
BSONObjBuilder *  output,
double  scale = 1 
)
finalvirtual

Implements mongo::Database::Impl.

◆ getSystemIndexesName()

const NamespaceString& mongo::DatabaseImpl::getSystemIndexesName ( ) const
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ getSystemViewsName()

const std::string& mongo::DatabaseImpl::getSystemViewsName ( ) const
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ getViewCatalog()

ViewCatalog* mongo::DatabaseImpl::getViewCatalog ( )
inlinefinalvirtual

Get the view catalog, which holds the definition for all views created on this database.

You must be holding a database lock to use this accessor.

Implements mongo::Database::Impl.

◆ init()

void mongo::DatabaseImpl::init ( OperationContext *  opCtx)
finalvirtual

Implements mongo::Database::Impl.

◆ isDropPending()

bool mongo::DatabaseImpl::isDropPending ( OperationContext *  opCtx) const
finalvirtual

Implements mongo::Database::Impl.

◆ makeUniqueCollectionNamespace()

StatusWith< NamespaceString > mongo::DatabaseImpl::makeUniqueCollectionNamespace ( OperationContext *  opCtx,
StringData  collectionNameModel 
)
finalvirtual

Implements mongo::Database::Impl.

◆ name()

const std::string& mongo::DatabaseImpl::name ( ) const
inlinefinalvirtual

Implements mongo::Database::Impl.

◆ renameCollection()

Status mongo::DatabaseImpl::renameCollection ( OperationContext *  opCtx,
StringData  fromNS,
StringData  toNS,
bool  stayTemp 
)
finalvirtual

Implements mongo::Database::Impl.

◆ setDropPending()

void mongo::DatabaseImpl::setDropPending ( OperationContext *  opCtx,
bool  dropPending 
)
finalvirtual

Implements mongo::Database::Impl.

◆ setProfilingLevel()

Status mongo::DatabaseImpl::setProfilingLevel ( OperationContext *  opCtx,
int  newLevel 
)
finalvirtual

Sets a new profiling level for the database and returns the outcome.

Parameters
opCtxOperation context which to use for creating the profiling collection.
newLevelNew profiling level to use.

Implements mongo::Database::Impl.

◆ validateDBName()

Status mongo::DatabaseImpl::validateDBName ( StringData  dbname)
static

Friends And Related Function Documentation

◆ Collection

friend class Collection
friend

◆ IndexCatalog

friend class IndexCatalog
friend

◆ NamespaceDetails

friend class NamespaceDetails
friend

Member Data Documentation

◆ _collections

CollectionMap mongo::DatabaseImpl::_collections
private

◆ _dbEntry

DatabaseCatalogEntry* mongo::DatabaseImpl::_dbEntry
private

◆ _dropPending

bool mongo::DatabaseImpl::_dropPending = false
private

◆ _durableViews

DurableViewCatalogImpl mongo::DatabaseImpl::_durableViews
private

◆ _indexesName

const NamespaceString mongo::DatabaseImpl::_indexesName
private

◆ _name

const std::string mongo::DatabaseImpl::_name
private

◆ _profile

int mongo::DatabaseImpl::_profile
private

◆ _profileName

const std::string mongo::DatabaseImpl::_profileName
private

◆ _this

Database* mongo::DatabaseImpl::_this
private

◆ _uniqueCollectionNamespacePseudoRandom

std::unique_ptr<PseudoRandom> mongo::DatabaseImpl::_uniqueCollectionNamespacePseudoRandom
private

◆ _views

ViewCatalog mongo::DatabaseImpl::_views
private

◆ _viewsName

const std::string mongo::DatabaseImpl::_viewsName
private

The documentation for this class was generated from the following files: