Kea
1.9.9-git
|
Common PgSql Connector Pool. More...
#include <pgsql_connection.h>
Public Member Functions | |
PgSqlConnection (const ParameterMap ¶meters, 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 ¶meters, 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 ¶meters) |
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 ¶meters) |
Redact database access string. More... | |
static isc::data::ElementPtr | toElement (const ParameterMap ¶ms) |
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... | |
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.
|
inline |
Constructor.
Initialize PgSqlConnection object with parameters needed for connection.
parameters | Specify the connection details. |
io_accessor | The IOService accessor function. |
callback | The connection recovery callback. |
Definition at line 312 of file pgsql_connection.h.
|
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.
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.
r | result of the last PostgreSQL operation |
statement | - tagged statement that was executed |
isc::db::DbOperationError | Detailed 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().
void isc::db::PgSqlConnection::commit | ( | ) |
Commit Transactions.
Commits all pending database operations.
DbOperationError | If 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().
bool isc::db::PgSqlConnection::compareError | ( | const PgSqlResult & | r, |
const char * | error_state | ||
) |
Checks a result set's SQL state against an error state.
r | result set to check |
error_state | error state to compare against |
Definition at line 310 of file pgsql_connection.cc.
References PGSQL_STATECODE_LEN.
|
static |
Get the schema version.
parameters | A data structure relating keywords and values concerned with the database. |
isc::db::DbOperationError | An 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().
void isc::db::PgSqlConnection::openDatabase | ( | ) |
Open Database.
Opens the database using the information supplied in the parameters passed to the constructor.
NoDatabaseName | Mandatory database name not given |
DbOpenError | Error 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().
|
inline |
Boolean Operator.
Allows testing the PgConnection for initialized connection
Definition at line 457 of file pgsql_connection.h.
|
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.
statement | SQL statement to be prepared. |
isc::db::DbOperationError | An 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.
start_statement | Pointer to the first statement in range of the statements to be compiled. |
end_statement | Pointer to the statement marking end of the range of statements to be compiled. This last statement is not compiled. |
isc::db::DbOperationError | An operation on the open database has failed. |
Definition at line 169 of file pgsql_connection.cc.
References prepareStatement().
void isc::db::PgSqlConnection::rollback | ( | ) |
Rollback Transactions.
Rolls back all pending database operations.
DbOperationError | If 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().
|
inline |
The recover connection.
This function starts the recover process of the connection.
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().
void isc::db::PgSqlConnection::startTransaction | ( | ) |
Start a transaction.
Starts a transaction.
DbOperationError | If 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().
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().
|
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().