|
- /*! \page connstr Connecting to Database
-
- \section cs Connection Strings
- \subsection fmt Connection String Format
-
- CppDB connection string consists of the following parts:
-
- -# Driver Name separated from rest of the string with ":"
- -# Set of key = value pairs separated with ";" symbol. Where value can be put in single quotation marks ' and double quotation mark represents a single one (like in SQL syntax).
-
- For example
- \verbatim
- mysql:database=test;user=joe;password='d''eep secret'
- \endverbatim
-
- Represent a driver "mysql", user "joe" and password "d'eep secret".
-
- There are special keys that used as internal cppdb options rather then connection options. Such
- keys are always start with \@ symbol. For example "@use_prepared=off".
-
- \subsection speckeys Special Options
-
- These are CppDB special key values that are used as meta data for the connection:
-
- - \@stmt_cache_size - integer - the maximal number of cached statements. Default is 64.
- \n
- Each time new statement is created it is stored back in
- cache for future reuse and thus next time when the statement
- is created it would be fetched from cache rather then
- being prepared again. It gives significant performance
- boost for query and statements execution. The cache is handled using LRU queue.
- - \@use_prepared - "on" or "off" by default create prepared statements or ordinary statements. Default is "on".
- - \@pool_size - integer - the size of connection pool. Default is 0 - no connection pooling.
- \n
- This provides connection pool for efficient
- connection reuse that significantly improves the performance.
- - \@pool_max_idle - integer - the number if seconds to keep idle connection in pool. Default 600 - 10 minutes.
- \n
- This is useful for keeping maximal amount of time for holding an idle connection in pool.
- - \@modules_path - string - the path to search cppdb modules (drivers) in.
- \n
- Several paths can be given, under POSIX platform they should be separated
- using ':' symbol and under Windows (not Cygwin) it should be ';' symbol. For example:
- \n
- \verbatim
- mydriver:@modules_path=/opt/cppd/lib:/usr/local/lib;database=foo
- mydriver:@modules_path='c:/cppdb/lib;c:/mydrv';database=foo
- \endverbatim
- - \@module - string - the path to loadable cppdb module (shared object or dll).
- \n
- The explicit path to cppdb driver, for example "mydriver:@module=/opt/lib/libmy.so"
-
- \section Establishing Connection
-
- Connecting to the database can be done using either by creating a session object with connection string parameter cppdb::session::session(std::string const &) or
- by calling cppdb::session::open() function.
-
- When the connection established first time for specific driver, it loads its shared object or dll and makes it available for you.
- If you want to unload the drivers that are not used any more you should call cppdb::driver_manager::collect_unused(). And if all
- drivers that do not have opened connections will be closed.
-
- \note If you use connection pooling you would also want to call cppdb::connections_manager::gc() to remove all sessions that were idle
- for long period of time.
-
- Both classes cppdb::connections_manager and cppdb::driver_manager are singleton classes that used for connection management and pooling
- and in fact, cppdb::session::open() just calls cppdb::connections_manager::open() to get the underlying cppdb::backend::connection object.
-
- */
-
-
- //--------------------------
- /*! \page advanced_drivers Linking Existing Drivers Statically
-
- \section advanced_drivers_before_you_begin Before You Begin
-
- In some cases you want to have drivers statically linked into your application. The simplest way is
- to \ref build "build" it with internal option for specific backend you need. This is the best
- and less error prone way.
-
- However you may also to use it directly without rebuilding cppdb library.
-
- \section advanced_drivers_linking Linking the Module
-
- CppDB comes with following libraries (the names below are for Linux, under other OS they may be slightly different):
-
- - libcppdb.so and libcppdb.a - shared and static version of cppdb without modules
- - libcppdb_XXX.so and libcppdb_XXX.a - shared and static version of modules, where XXX is the name of the module.
-
- By default, cppdb tries to load the module's shared object on the run time. However, if you want to link the
- module statically into the library you may do following.
-
- -# During linking use static library for the cppdb and for the module you need.
- -# Link with the appropriate native client library for the module.
-
- For example:
-
- \verbatim
- g++ my_program.o /usr/lib/libcppdb.a /usr/lib/libcppdb_sqlite3.a -lpthread -ldl -lsqlite3
- \endverbatim
-
- Where libcppdb.a and libcppdb_sqlite3.a are the static version of the library and the module, "-lpthread -ldl" are
- dependencies of libcppdb and "-lsqlite3" is the dependency of sqlite3 module.
-
- \section advanced_drivers_installing Adding Backend to Driver
-
- Linking only with the backend is not enough, you need also install the driver to cppdb::driver_manager so it would
- know to use it directly rather then try to load it dynamically.
-
- Every backend as a single entry point called "cppdb_XXX_get_connection" where XXX is the backend name, so together
- with cppdb::backend::static_driver you can install it to the \ref cppdb::driver_manager driver_manger as shown in the example below:
-
- \code
- extern "C" {
- cppdb::backend::connection *cppdb_sqlite3_get_connection(cppdb::connection_info const &);
- }
- void add_driver()
- {
- cppdb::driver_manager::instance().install_driver("sqlite3",new cppdb::backend::static_driver(cppdb_sqlite3_get_connection));
- }
- \endcode
-
- */
|