libpqxx  v4.0-1
C++ library for PostgreSQL
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pqxx::transactor< TRANSACTION > Class Template Reference

#include <transactor.hxx>

Inheritance diagram for pqxx::transactor< TRANSACTION >:
Collaboration diagram for pqxx::transactor< TRANSACTION >:

Public Member Functions

 transactor (const PGSTD::string &TName="transactor")
 
PGSTD::string Name () const
 The transactor's name. More...
 
void on_abort (const char[]) throw ()
 Optional overridable function to be called if transaction is aborted. More...
 
void on_commit ()
 Optional overridable function to be called after successful commit. More...
 
void on_doubt () throw ()
 Overridable function to be called when "in doubt" about outcome. More...
 
void operator() (TRANSACTION &T)
 Overridable transaction definition; insert your database code here. More...
 

Private Attributes

PGSTD::string m_Name
 

Constructor & Destructor Documentation

template<typename TRANSACTION = transaction<read_committed>>
pqxx::transactor< TRANSACTION >::transactor ( const PGSTD::string &  TName = "transactor< TRANSACTION >")
inlineexplicit

Member Function Documentation

template<typename TRANSACTION = transaction<read_committed>>
PGSTD::string pqxx::transactor< TRANSACTION >::Name ( ) const
inline

The transactor's name.

References pqxx::transactor< TRANSACTION >::m_Name.

template<typename TRANSACTION = transaction<read_committed>>
void pqxx::transactor< TRANSACTION >::on_abort ( const char  []) throw ()
inline

Optional overridable function to be called if transaction is aborted.

This need not imply complete failure; the transactor will automatically retry the operation a number of times before giving up. on_abort() will be called for each of the failed attempts.

One parameter is passed in by the framework: an error string describing why the transaction failed. This will also be logged to the connection's notice processor.

template<typename TRANSACTION = transaction<read_committed>>
void pqxx::transactor< TRANSACTION >::on_commit ( )
inline

Optional overridable function to be called after successful commit.

If your on_commit() throws an exception, the actual back-end transaction will remain committed, so any changes in the database remain regardless of how this function terminates.

template<typename TRANSACTION = transaction<read_committed>>
void pqxx::transactor< TRANSACTION >::on_doubt ( ) throw ()
inline

Overridable function to be called when "in doubt" about outcome.

This may happen if the connection to the backend is lost while attempting to commit. In that case, the backend may have committed the transaction but is unable to confirm this to the frontend; or the transaction may have failed, causing it to be rolled back, but again without acknowledgement to the client program. The best way to deal with this situation is typically to wave red flags in the user's face and ask him to investigate.

The robusttransaction class is intended to reduce the chances of this error occurring, at a certain cost in performance.

See Also
robusttransaction
template<typename TRANSACTION = transaction<read_committed>>
void pqxx::transactor< TRANSACTION >::operator() ( TRANSACTION &  T)

Overridable transaction definition; insert your database code here.

The operation will be retried if the connection to the backend is lost or the operation fails, but not if the connection is broken in such a way as to leave the library in doubt as to whether the operation succeeded. In that case, an in_doubt_error will be thrown.

Recommended practice is to allow this operator to modify only the transactor itself, and the dedicated transaction object it is passed as an argument. This is what makes side effects, retrying etc. controllable in the transactor framework.

Parameters
TDedicated transaction context created to perform this operation.

Member Data Documentation

template<typename TRANSACTION = transaction<read_committed>>
PGSTD::string pqxx::transactor< TRANSACTION >::m_Name
private

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