XmlManager::createContainer

#include <DbXml.hpp>

XmlContainer XmlManager::createContainer(const std::string &name)

XmlContainer XmlManager::createContainer(
    XmlTransaction &txn, const std::string &name)

XmlContainer XmlManager::createContainer(const std::string &name, 
    const XmlContainerConfig &config)

XmlContainer XmlManager::createContainer(
    XmlTransaction &txn, const std::string &name, 
    XmlContainerConfig config)

XmlContainer XmlManager::createContainer(const std::string &name,
    const XmlContainerConfig &flags, 
    XmlContainer::ContainerType type, int mode = 0)

XmlContainer XmlManager::createContainer(XmlTransaction &txn,
    const std::string &name, const XmlContainerConfig &flags,
    XmlContainer::ContainerType type, int mode = 0)

Creates and opens a container, returning a handle to an XmlContainer object. If the container already exists at the time this method is called, an exception is thrown.

Use XmlManager::openContainer to open a container that has already been created.

Containers always remain open until the last handle referencing the container is destroyed.

There are two basic forms of this method: one that accepts an XmlContainerConfig object, and a simpler form that creates a default container.

Creating a default container

#include <DbXml.hpp>

XmlContainer XmlManager::createContainer(const std::string &name)

XmlContainer XmlManager::createContainer(
    XmlTransaction &txn, const std::string &name) 

Creates a default container. The container is created using the settings XmlContainerConfig::setAllowCreate and XmlContainerConfig::setExclusiveCreate set to true unless the default behavior has been overridden using XmlManager::setDefaultContainerConfig. In addition, the container is set up to use node-level storage unless XmlManager::setDefaultContainerConfig is used.

Parameters are:

txn

The XmlTransaction object to use for this container creation.

name

The container's name. The container is created relative to the underlying environment's home directory (see the XmlManager class description for more information) unless an absolute path is used for the name; in that case the container is created in the location identified by the path.

The name provided must be unique for the environment or an exception is thrown.

Creating a container using an XmlContainerConfig object

#include <DbXml.hpp>

XmlContainer XmlManager::createContainer(const std::string &name, 
    const XmlContainerConfig &config)

XmlContainer XmlManager::createContainer(
    XmlTransaction &txn, const std::string &name, 
    XmlContainerConfig config)

XmlContainer XmlManager::createContainer(const std::string &name,
    const XmlContainerConfig &flags, 
    XmlContainer::ContainerType type, int mode = 0)

XmlContainer XmlManager::createContainer(XmlTransaction &txn,
    const std::string &name, const XmlContainerConfig &flags,
    XmlContainer::ContainerType type, int mode = 0)

Creates a container.

Parameters are:

txn

The XmlTransaction object to use for this container creation.

name

The container's name. The container is created relative to the underlying environment's home directory (see the XmlManager class description for more information) unless an absolute path is used for the name; in that case the container is created in the location identified by the path.

The name provided must be unique for the environment or an exception is thrown.

flags

This parameter must be set to 0 or by bitwise inclusively OR'ing together one or more of the following values:

  • DB_CREATE

    If the container does not currently exist, create it.

  • DB_READ_UNCOMMITTED

    This operation will support degree 1 isolation; that is, read operations may return data that has been modified by other transactions but which has not yet been committed. Silently ignored if the DB_READ_UNCOMMITTED flag was not specified when the underlying container was opened.

  • DB_EXCL

    Return an error if the container already exists. This flag is only meaningful when specified with the DB_CREATE flag.

  • DB_MULTIVERSION

    Open the database with support for multiversion concurrency control. This will cause updates to the container to follow a copy-on-write protocol, which is required to support snapshot isolation. This flag requires that the container be transactionally protected during its open.

  • DB_NOMMAP

    Do not map this container into process memory (see the DbEnv::set_mp_mmapsize() method for further information).

  • DB_RDONLY

    Open the container for reading only. Any attempt to modify items in the container will fail, regardless of the actual permissions of any underlying files.

  • DB_THREAD

    Cause the container handle to be free-threaded; that is, concurrently usable by multiple threads in the address space.

  • DBXML_CHKSUM

    Do checksum verification of pages read into the cache from the backing filestore. Berkeley DB XML uses the SHA1 Secure Hash Algorithm if encryption is configured and a general hash algorithm if it is not.

  • DBXML_ENCRYPT

    Encrypt the database using the cryptographic password specified to DbEnv::set_encrypt().

  • DB_TXN_NOT_DURABLE

    If set, Berkeley DB XML will not write log records for this database. This means that updates of this database exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the application or system fails, integrity will not persist. The database file must be verified and/or restored from backup after a failure.

  • DBXML_INDEX_NODES

    Causes the indexer to create index targets that reference nodes rather than documents. This allows index lookups during query processing to more efficiently find target nodes and avoid walking the document tree. It can apply to both container types, and is the default for containers of type XmlContainer::NodeContainer.

  • DBXML_NO_INDEX_NODES

    Causes the indexer to create index targets that reference documents rather than nodes. This can be more desirable for simple queries that only need to return documents and do relatively little navigation during querying. It can apply to both container types, and is the default for containers of type XmlContainer::WholedocContainer.

  • DBXML_STATISTICS

    Causes the container to be created to include structural statistics information, which is very useful for cost based query optimisation. Containers created with these statistics will take longer to load and update, since the statistics must also be updated. This is the default.

  • DBXML_NO_STATISTICS

    Causes the container to be created without structural statistics information – by default structural statistics are created.

  • DBXML_TRANSACTIONAL

    Cause the container to support transactions. If this flag is set, an XmlTransaction object may be used with any method that supports transactional protection. Also, if this flag is used, and if an XmlTransaction object is not provided to a method that modifies an XmlContainer or XmlDocument object, then auto commit is automatically used for the operation.

  • DBXML_ALLOW_VALIDATION

    When loading documents into the container, validate the XML if it refers to a DTD or XML Schema.

Note that regardless the setting of your flags, XmlContainerConfig::setAllowCreate and XmlContainerConfig::setExclusiveCreate will be set to true.

type

The type of container to create. The container type must be one of the following values:

  • XmlContainer::NodeContainer

    Documents are broken down into their component nodes, and these nodes are stored individually in the container. This is the preferred container storage type.

  • XmlContainer::WholedocContainer

    Documents are stored intact; all white space and formatting is preserved.

mode

On Windows systems, mode is ignored.

On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, files are created with mode mode (as described in chmod(2)) and modified by the process' umask value at the time of creation (see umask(2)). Created files are owned by the process owner; the group ownership of created files is based on the system and directory defaults, and is not further specified by Berkeley DB. System shared memory segments created by are created with mode mode, unmodified by the process' umask value. If mode is 0, DB XML will use a default mode of readable and writable by both owner and group.

Errors

The XmlManager::createContainer method may fail and throw XmlException , encapsulating one of the following non-zero errors:

CONTAINER_EXISTS

The container name that you provided already exists, and the DB_CREATE flag is set to false.

INVALID_VALUE

You provided an invalid value to the flags parameter.

Class

XmlManager

See Also

XmlManager Methods