Kea  1.9.9-git
isc::db::PgSqlConnection Class Reference

Common PgSql Connector Pool. More...

#include <pgsql_connection.h>

+ Inheritance diagram for isc::db::PgSqlConnection:

Public Member Functions

 PgSqlConnection (const ParameterMap &parameters, IOServiceAccessorPtr io_accessor=IOServiceAccessorPtr(), DbCallback callback=DbCallback())
 Constructor. More...
 
virtual ~PgSqlConnection ()
 Destructor. More...
 
void checkStatementError (const PgSqlResult &r, PgSqlTaggedStatement &statement)
 Checks result of the r object. More...
 
void commit ()
 Commit Transactions. More...
 
bool compareError (const PgSqlResult &r, const char *error_state)
 Checks a result set's SQL state against an error state. More...
 
void openDatabase ()
 Open Database. More...
 
 operator bool () const
 Boolean Operator. More...
 
 operator PGconn * () const
 Conversion Operator. More...
 
void prepareStatement (const PgSqlTaggedStatement &statement)
 Prepare Single Statement. More...
 
void prepareStatements (const PgSqlTaggedStatement *start_statement, const PgSqlTaggedStatement *end_statement)
 Prepare statements. More...
 
void rollback ()
 Rollback Transactions. More...
 
void startRecoverDbConnection ()
 The recover connection. More...
 
void startTransaction ()
 Start a transaction. More...
 
- Public Member Functions inherited from isc::db::DatabaseConnection
 DatabaseConnection (const ParameterMap &parameters, DbCallback callback=DbCallback())
 Constructor. More...
 
virtual ~DatabaseConnection ()
 Destructor. More...
 
void checkUnusable ()
 Throws an exception if the connection is not usable. More...
 
bool configuredReadOnly () const
 Convenience method checking if database should be opened with read only access. More...
 
std::string getParameter (const std::string &name) const
 Returns value of a connection parameter. More...
 
bool isUnusable ()
 Flag which indicates if connection is unusable. More...
 
virtual void makeReconnectCtl (const std::string &timer_name)
 Instantiates a ReconnectCtl based on the connection's reconnect parameters. More...
 
ReconnectCtlPtr reconnectCtl ()
 The reconnect settings. More...
 

Static Public Member Functions

static std::pair< uint32_t, uint32_t > getVersion (const ParameterMap &parameters)
 Get the schema version. More...
 
- Static Public Member Functions inherited from isc::db::DatabaseConnection
static bool invokeDbFailedCallback (const ReconnectCtlPtr &db_reconnect_ctl)
 Invokes the connection's restore failed connectivity callback. More...
 
static bool invokeDbLostCallback (const ReconnectCtlPtr &db_reconnect_ctl)
 Invokes the connection's lost connectivity callback. More...
 
static bool invokeDbRecoveredCallback (const ReconnectCtlPtr &db_reconnect_ctl)
 Invokes the connection's restored connectivity callback. More...
 
static ParameterMap parse (const std::string &dbaccess)
 Parse database access string. More...
 
static std::string redactedAccessString (const ParameterMap &parameters)
 Redact database access string. More...
 
static isc::data::ElementPtr toElement (const ParameterMap &params)
 Unparse a parameter map. More...
 
static isc::data::ElementPtr toElementDbAccessString (const std::string &dbaccess)
 Unparse an access string. More...
 

Public Attributes

PgSqlHolder conn_
 PgSql connection handle. More...
 
isc::asiolink::IOServicePtr io_service_
 IOService object, used for all ASIO operations. More...
 
IOServiceAccessorPtr io_service_accessor_
 Accessor function which returns the IOService that can be used to recover the connection. More...
 

Static Public Attributes

static const char DUPLICATE_KEY [] = ERRCODE_UNIQUE_VIOLATION
 Define the PgSql error state for a duplicate key error. More...
 
- Static Public Attributes inherited from isc::db::DatabaseConnection
static DbCallback db_failed_callback_ = 0
 Optional callback function to invoke if an opened connection recovery failed. More...
 
static DbCallback db_lost_callback_ = 0
 Optional callback function to invoke if an opened connection is lost. More...
 
static DbCallback db_recovered_callback_ = 0
 Optional callback function to invoke if an opened connection recovery succeeded. More...
 
static const time_t MAX_DB_TIME = 2147483647
 Defines maximum value for time that can be reliably stored. More...
 

Additional Inherited Members

- Public Types inherited from isc::db::DatabaseConnection
typedef std::map< std::string, std::string > ParameterMap
 Database configuration parameter map. More...
 
- Protected Member Functions inherited from isc::db::DatabaseConnection
void markUnusable ()
 Sets the unusable flag to true. More...
 
- Protected Attributes inherited from isc::db::DatabaseConnection
DbCallback callback_
 The callback used to recover the connection. More...
 

Detailed Description

Common PgSql Connector Pool.

This class provides common operations for PgSql database connection used by both PgSqlLeaseMgr and PgSqlHostDataSource. It manages connecting to the database and preparing compiled statements. Its fields are public, because they are used (both set and retrieved) in classes that use instances of PgSqlConnection.

Definition at line 300 of file pgsql_connection.h.

Constructor & Destructor Documentation

isc::db::PgSqlConnection::PgSqlConnection ( const ParameterMap parameters,
IOServiceAccessorPtr  io_accessor = IOServiceAccessorPtr(),
DbCallback  callback = DbCallback() 
)
inline

Constructor.

Initialize PgSqlConnection object with parameters needed for connection.

Parameters
parametersSpecify the connection details.
io_accessorThe IOService accessor function.
callbackThe connection recovery callback.

Definition at line 312 of file pgsql_connection.h.

isc::db::PgSqlConnection::~PgSqlConnection ( )
virtual

Destructor.

Definition at line 119 of file pgsql_connection.cc.

References isc::db::DB_LOG< log_type >::arg(), conn_, and isc::db::PGSQL_DEALLOC_ERROR.

+ Here is the call graph for this function:

Member Function Documentation

void isc::db::PgSqlConnection::checkStatementError ( const PgSqlResult r,
PgSqlTaggedStatement statement 
)

Checks result of the r object.

This function is used to determine whether or not the SQL statement execution succeeded, and in the event of failures, decide whether or not the failures are recoverable.

If the error is recoverable, the function will throw a DbOperationError. If the error is deemed unrecoverable, such as a loss of connectivity with the server, the function will call startRecoverDbConnection() which will start the connection recovery.

If the invocation returns true, this indicates the calling layer will attempt recovery, and the function throws a DbOperationError to allow the caller to error handle the failed db access attempt.

Parameters
rresult of the last PostgreSQL operation
statement- tagged statement that was executed
Exceptions
isc::db::DbOperationErrorDetailed PostgreSQL failure

Definition at line 318 of file pgsql_connection.cc.

References isc::db::DB_LOG< log_type >::arg(), conn_, isc_throw, isc::db::DatabaseConnection::markUnusable(), isc::db::PgSqlTaggedStatement::name, isc::db::PGSQL_FATAL_ERROR, and startRecoverDbConnection().

+ Here is the call graph for this function:

void isc::db::PgSqlConnection::commit ( )

Commit Transactions.

Commits all pending database operations.

Exceptions
DbOperationErrorIf the commit failed.

Definition at line 372 of file pgsql_connection.cc.

References isc::db::DatabaseConnection::checkUnusable(), conn_, isc::db::DB_DBG_TRACE_DETAIL, isc_throw, and isc::db::PGSQL_COMMIT.

Referenced by isc::db::PgSqlTransaction::commit().

+ Here is the call graph for this function:

bool isc::db::PgSqlConnection::compareError ( const PgSqlResult r,
const char *  error_state 
)

Checks a result set's SQL state against an error state.

Parameters
rresult set to check
error_stateerror state to compare against
Returns
True if the result set's SQL state equals the error_state, false otherwise.

Definition at line 310 of file pgsql_connection.cc.

References PGSQL_STATECODE_LEN.

std::pair< uint32_t, uint32_t > isc::db::PgSqlConnection::getVersion ( const ParameterMap parameters)
static

Get the schema version.

Parameters
parametersA data structure relating keywords and values concerned with the database.
Returns
Version number as a pair of unsigned integers. "first" is the major version number, "second" the minor number.
Exceptions
isc::db::DbOperationErrorAn operation on the open database has failed.

Definition at line 134 of file pgsql_connection.cc.

References conn_, isc::db::PgSqlExchange::getColumnValue(), isc_throw, openDatabase(), and version().

Referenced by isc::dhcp::PgSqlLeaseMgr::getVersion(), and isc::dhcp::PgSqlHostDataSourceImpl::getVersion().

+ Here is the call graph for this function:

void isc::db::PgSqlConnection::openDatabase ( )

Open Database.

Opens the database using the information supplied in the parameters passed to the constructor.

Exceptions
NoDatabaseNameMandatory database name not given
DbOpenErrorError opening the database

Definition at line 179 of file pgsql_connection.cc.

References conn_, isc::db::DatabaseConnection::getParameter(), isc_throw, isc::db::PGSQL_DEFAULT_CONNECTION_TIMEOUT, and isc::db::PgSqlHolder::setConnection().

Referenced by getVersion().

+ Here is the call graph for this function:

isc::db::PgSqlConnection::operator bool ( ) const
inline

Boolean Operator.

Allows testing the PgConnection for initialized connection

Definition at line 457 of file pgsql_connection.h.

isc::db::PgSqlConnection::operator PGconn * ( ) const
inline

Conversion Operator.

Allows the PgConnection object to be passed as the context argument to PQxxxx functions.

Definition at line 450 of file pgsql_connection.h.

void isc::db::PgSqlConnection::prepareStatement ( const PgSqlTaggedStatement statement)

Prepare Single Statement.

Creates a prepared statement from the text given and adds it to the statements_ vector at the given index.

Parameters
statementSQL statement to be prepared.
Exceptions
isc::db::DbOperationErrorAn operation on the open database has failed.

Definition at line 158 of file pgsql_connection.cc.

References conn_, isc_throw, isc::db::PgSqlTaggedStatement::name, isc::db::PgSqlTaggedStatement::nbparams, isc::db::PgSqlTaggedStatement::text, and isc::db::PgSqlTaggedStatement::types.

Referenced by prepareStatements().

void isc::db::PgSqlConnection::prepareStatements ( const PgSqlTaggedStatement start_statement,
const PgSqlTaggedStatement end_statement 
)

Prepare statements.

Creates the prepared statements for all of the SQL statements used by the PostgreSQL backend.

Parameters
start_statementPointer to the first statement in range of the statements to be compiled.
end_statementPointer to the statement marking end of the range of statements to be compiled. This last statement is not compiled.
Exceptions
isc::db::DbOperationErrorAn operation on the open database has failed.

Definition at line 169 of file pgsql_connection.cc.

References prepareStatement().

+ Here is the call graph for this function:

void isc::db::PgSqlConnection::rollback ( )

Rollback Transactions.

Rolls back all pending database operations.

Exceptions
DbOperationErrorIf the rollback failed.

Definition at line 383 of file pgsql_connection.cc.

References isc::db::DatabaseConnection::checkUnusable(), conn_, isc::db::DB_DBG_TRACE_DETAIL, isc_throw, and isc::db::PGSQL_ROLLBACK.

Referenced by isc::db::PgSqlTransaction::~PgSqlTransaction().

+ Here is the call graph for this function:

void isc::db::PgSqlConnection::startRecoverDbConnection ( )
inline

The recover connection.

This function starts the recover process of the connection.

Note
The recover function must be run on the IO Service thread.

Definition at line 427 of file pgsql_connection.h.

References isc::db::DatabaseConnection::callback_, io_service_, io_service_accessor_, and isc::db::DatabaseConnection::reconnectCtl().

Referenced by checkStatementError().

+ Here is the call graph for this function:

void isc::db::PgSqlConnection::startTransaction ( )

Start a transaction.

Starts a transaction.

Exceptions
DbOperationErrorIf the transaction start failed.

Definition at line 360 of file pgsql_connection.cc.

References isc::db::DatabaseConnection::checkUnusable(), conn_, isc::db::DB_DBG_TRACE_DETAIL, isc_throw, and isc::db::PGSQL_START_TRANSACTION.

Referenced by isc::db::PgSqlTransaction::PgSqlTransaction().

+ Here is the call graph for this function:

Member Data Documentation

PgSqlHolder isc::db::PgSqlConnection::conn_

PgSql connection handle.

This field is public, because it is used heavily from PgSqlLeaseMgr and from PgSqlHostDataSource.

Definition at line 444 of file pgsql_connection.h.

Referenced by checkStatementError(), commit(), getVersion(), openDatabase(), prepareStatement(), rollback(), startTransaction(), and ~PgSqlConnection().

const char isc::db::PgSqlConnection::DUPLICATE_KEY = ERRCODE_UNIQUE_VIOLATION
static

Define the PgSql error state for a duplicate key error.

Definition at line 303 of file pgsql_connection.h.

Referenced by isc::dhcp::PgSqlHostDataSourceImpl::addStatement().

isc::asiolink::IOServicePtr isc::db::PgSqlConnection::io_service_

IOService object, used for all ASIO operations.

Definition at line 471 of file pgsql_connection.h.

Referenced by startRecoverDbConnection().

IOServiceAccessorPtr isc::db::PgSqlConnection::io_service_accessor_

Accessor function which returns the IOService that can be used to recover the connection.

This accessor is used to lazy retrieve the IOService when the connection is lost. It is useful to retrieve it at a later time to support hook libraries which create managers on load and set IOService later on by using the dhcp4_srv_configured and dhcp6_srv_configured hooks.

Definition at line 468 of file pgsql_connection.h.

Referenced by startRecoverDbConnection().


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