Diana Software
Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
QDb Class Reference

base class for db interface More...

Inheritance diagram for QDb:
QDianaDb

Public Types

typedef std::vector< QVdtcolumn
 
typedef std::map< std::string, columnQDbTable
 

Public Member Functions

virtual ~QDb ()
 
double DoQueryDouble (const std::string &query)
 
int DoQueryInt (const std::string &query)
 
bool DoQueryBool (const std::string &query)
 
std::string DoQueryString (const std::string &query)
 
std::vector< int > DoQueryVectorInt (const std::string &query)
 
std::vector< double > DoQueryVectorDouble (const std::string &query)
 
std::vector< std::string > DoQueryVectorString (const std::string &query)
 
QError DoQuery (const std::string &query, QDbTable &table)
 
QDbTable DoQuery (const std::string &query)
 
QError DoSQLNoReturn (const std::string &query)
 
int DoExec (const std::string &Query)
 Execute an INSERT, UPDATE, DELETE, FETCH, or MOVE statement. More...
 
int Insert (const std::string &tableName, const column &fields, const column &values)
 
void SetConnectAttemptTimeoutSec (int timeout)
 
void SetConnectRandomDelaySec (double minDelaySec, double maxDelaySec)
 
void SetDisconnectTimeoutSec (double timeout)
 
bool Disconnect ()
 

Protected Member Functions

 QDb (const std::string &dbHost, const std::string &dbPort, const std::string &dbUsr, const std::string &dbPwd, const std::string &dbName)
 
bool IsConnected () const
 
const char * DataBase () const
 

Private Member Functions

QError Connect ()
 
bool UnlockedDisconnect ()
 
QError Query (const std::string &query, PGresult **result)
 
QError BasicQuery (const std::string &query, PGresult **result) const
 
QError CheckSingleResult (const QDbTable &table, const std::string &query, const std::string &funcName, const std::string &file, int line) const
 
QError ConnectBase ()
 
void RandomWaitBeforeConnect () const
 
QError InitWatchdogThread ()
 
QError UpdateWatchdogTimer ()
 

Private Attributes

PGconn * fConnection
 
const std::string fDbHost
 
const std::string fDbPort
 
const std::string fDbUser
 
const std::string fDbPwd
 
const std::string fDbName
 
int fConnectAttemptTimeoutSec
 
double fDisconnectTimeoutSec
 
QDbWatchdogThreadHandlerfThreadHandler
 
QWatchdogTimerfWatchdogTimer
 
boost::mutex * fMutex
 
double fMinConnectDelaySec
 
double fMaxConnectDelaySec
 

Friends

class QDbWatchdogThread
 

Detailed Description

base class for db interface

Author
Marco Pallavicini
Sergio Di Domizio
Andrea Giachero

Definition at line 27 of file QDb.hh.

Member Typedef Documentation

◆ column

typedef std::vector<QVdt> QDb::column

Definition at line 33 of file QDb.hh.

◆ QDbTable

typedef std::map<std::string, column> QDb::QDbTable

Definition at line 34 of file QDb.hh.

Constructor & Destructor Documentation

◆ ~QDb()

QDb::~QDb ( )
virtual

Definition at line 51 of file QDb.cc.

References Disconnect(), fMutex, fThreadHandler, fWatchdogTimer, and IsConnected().

◆ QDb()

QDb::QDb ( const std::string &  dbHost,
const std::string &  dbPort,
const std::string &  dbUsr,
const std::string &  dbPwd,
const std::string &  dbName 
)
protected

Definition at line 27 of file QDb.cc.

References fMutex.

Member Function Documentation

◆ BasicQuery()

QError QDb::BasicQuery ( const std::string &  query,
PGresult **  result 
) const
private

Perform a query without checking the connection status, essentially just run PQexec() and check the error status. This is the only method of this class where PQexec is called.

Definition at line 376 of file QDb.cc.

References fConnection, QERR_DB_QUERY_FAILED, and QERR_SUCCESS.

Referenced by Query().

◆ CheckSingleResult()

QError QDb::CheckSingleResult ( const QDbTable table,
const std::string &  query,
const std::string &  funcName,
const std::string &  file,
int  line 
) const
private

check that table contains a single result (one field, one row)

Definition at line 456 of file QDb.cc.

References QERR_DB_MAXLINES_EXCEEDED, QERR_DB_NULL_RESULT, QERR_SUCCESS, and QERR_UNDEFINED_STATUS.

Referenced by DoQueryBool(), DoQueryDouble(), DoQueryInt(), DoQueryString(), DoQueryVectorDouble(), DoQueryVectorInt(), and DoQueryVectorString().

◆ Connect()

QError QDb::Connect ( )
private

Open a database connection if it is not already open.

This method also initializes and updates the watchdog timer (if this feature is enabled, see SetDisconnectTimeoutSec()). For the watchdog timer mechanism to work properly, this method assumes that the Query() method include a call to Connect().

Definition at line 73 of file QDb.cc.

References ConnectBase(), err, fConnectAttemptTimeoutSec, InitWatchdogThread(), IsConnected(), QERR_SUCCESS, RandomWaitBeforeConnect(), and UpdateWatchdogTimer().

Referenced by Query().

◆ ConnectBase()

QError QDb::ConnectBase ( )
private

Definition at line 115 of file QDb.cc.

References fConnection, fDbHost, fDbName, fDbPort, fDbPwd, fDbUser, IsConnected(), QERR_DB_CONN_FAILED, and QERR_SUCCESS.

Referenced by Connect().

◆ DataBase()

const char* QDb::DataBase ( ) const
inlineprotected

Definition at line 125 of file QDb.hh.

References fDbName.

◆ Disconnect()

bool QDb::Disconnect ( )

Definition at line 151 of file QDb.cc.

References fMutex, and UnlockedDisconnect().

Referenced by QDbWatchdogThread::operator()(), QDianaDb::Reset(), and ~QDb().

◆ DoExec()

int QDb::DoExec ( const std::string &  Query)

Execute an INSERT, UPDATE, DELETE, FETCH, or MOVE statement.

Returns
Number of rows affected

Definition at line 305 of file QDb.cc.

References err, QERR_SUCCESS, and Query().

Referenced by Insert(), QCalibrationParametersHandle::StoreOnDB(), QCOFParametersHandle::StoreOnDB(), QEnergyRangesHandle::StoreOnDB(), and QJitterHandle::StoreOnDB().

◆ DoQuery() [1/2]

QDb::QDbTable QDb::DoQuery ( const std::string &  query)

Definition at line 169 of file QDb.cc.

References DoQuery(), err, and QERR_SUCCESS.

◆ DoQuery() [2/2]

QError QDb::DoQuery ( const std::string &  query,
QDbTable table 
)

◆ DoQueryBool()

bool QDb::DoQueryBool ( const std::string &  query)

expect a single result of type bool

Definition at line 213 of file QDb.cc.

References CheckSingleResult(), DoQuery(), err, and QERR_SUCCESS.

◆ DoQueryDouble()

double QDb::DoQueryDouble ( const std::string &  query)

◆ DoQueryInt()

int QDb::DoQueryInt ( const std::string &  query)

◆ DoQueryString()

std::string QDb::DoQueryString ( const std::string &  query)

◆ DoQueryVectorDouble()

std::vector< double > QDb::DoQueryVectorDouble ( const std::string &  query)

expect a single result of type "vector of double"

Definition at line 260 of file QDb.cc.

References CheckSingleResult(), DoQuery(), err, and QERR_SUCCESS.

Referenced by QAverageNoiseHandle::FillFromDB(), QAveragePulseHandle::FillFromDB(), and QCalibrationParametersHandle::FillFromDB().

◆ DoQueryVectorInt()

std::vector< int > QDb::DoQueryVectorInt ( const std::string &  query)

expect a single result of type "vector of int"

Definition at line 245 of file QDb.cc.

References CheckSingleResult(), DoQuery(), err, and QERR_SUCCESS.

Referenced by QAverageNoiseHandle::FillFromDB(), QAveragePulseHandle::FillFromDB(), and QCalibrationParametersHandle::FillFromDB().

◆ DoQueryVectorString()

std::vector< std::string > QDb::DoQueryVectorString ( const std::string &  query)

expect a single result of type "vector of string"

Definition at line 276 of file QDb.cc.

References CheckSingleResult(), DoQuery(), err, and QERR_SUCCESS.

◆ DoSQLNoReturn()

QError QDb::DoSQLNoReturn ( const std::string &  query)

make query and expect no output

Definition at line 292 of file QDb.cc.

References err, QERR_SUCCESS, and Query().

◆ InitWatchdogThread()

QError QDb::InitWatchdogThread ( )
private

◆ Insert()

int QDb::Insert ( const std::string &  tableName,
const column fields,
const column values 
)

◆ IsConnected()

bool QDb::IsConnected ( ) const
protected

Definition at line 66 of file QDb.cc.

References fConnection.

Referenced by Connect(), ConnectBase(), QDbWatchdogThread::operator()(), QDianaDb::Reset(), and ~QDb().

◆ Query()

QError QDb::Query ( const std::string &  query,
PGresult **  result 
)
private

Possibly open the connection and perform the query using BasicQuery(). Disconnect(), Connect() and call again BasicQuery() if the first attempt failed. The second attempt is needed for the connection failover mechanism to work properly. All the queries are supposed to pass through this method, which in turns calls BasicQuery().

Definition at line 352 of file QDb.cc.

References BasicQuery(), Connect(), err, fMutex, QERR_SUCCESS, and UnlockedDisconnect().

Referenced by DoExec(), DoQuery(), and DoSQLNoReturn().

◆ RandomWaitBeforeConnect()

void QDb::RandomWaitBeforeConnect ( ) const
private

Definition at line 498 of file QDb.cc.

References fMaxConnectDelaySec, and fMinConnectDelaySec.

Referenced by Connect().

◆ SetConnectAttemptTimeoutSec()

void QDb::SetConnectAttemptTimeoutSec ( int  timeout)
inline

Set timeout in seconds for attempting db connection. Any value smaller than 1 will result in no timeout. The default is no timeout.

Definition at line 82 of file QDb.hh.

References fConnectAttemptTimeoutSec.

◆ SetConnectRandomDelaySec()

void QDb::SetConnectRandomDelaySec ( double  minDelaySec,
double  maxDelaySec 
)
inline

Definition at line 101 of file QDb.hh.

References fMaxConnectDelaySec, and fMinConnectDelaySec.

◆ SetDisconnectTimeoutSec()

void QDb::SetDisconnectTimeoutSec ( double  timeout)
inline

Set a timeout for disconnecting from the server after the connection is unused for a certain time. A negative or zero value means that the connection will remain open until this object is deleted.

Definition at line 110 of file QDb.hh.

References fDisconnectTimeoutSec.

◆ UnlockedDisconnect()

bool QDb::UnlockedDisconnect ( )
private

Definition at line 158 of file QDb.cc.

References fConnection.

Referenced by Disconnect(), and Query().

◆ UpdateWatchdogTimer()

QError QDb::UpdateWatchdogTimer ( )
private

Friends And Related Function Documentation

◆ QDbWatchdogThread

friend class QDbWatchdogThread
friend

Definition at line 128 of file QDb.hh.

Member Data Documentation

◆ fConnectAttemptTimeoutSec

int QDb::fConnectAttemptTimeoutSec
private

Definition at line 141 of file QDb.hh.

Referenced by Connect(), and SetConnectAttemptTimeoutSec().

◆ fConnection

PGconn* QDb::fConnection
private

Definition at line 132 of file QDb.hh.

Referenced by BasicQuery(), ConnectBase(), IsConnected(), and UnlockedDisconnect().

◆ fDbHost

const std::string QDb::fDbHost
private

Definition at line 134 of file QDb.hh.

Referenced by ConnectBase().

◆ fDbName

const std::string QDb::fDbName
private

Definition at line 138 of file QDb.hh.

Referenced by ConnectBase(), and DataBase().

◆ fDbPort

const std::string QDb::fDbPort
private

Definition at line 135 of file QDb.hh.

Referenced by ConnectBase().

◆ fDbPwd

const std::string QDb::fDbPwd
private

Definition at line 137 of file QDb.hh.

Referenced by ConnectBase().

◆ fDbUser

const std::string QDb::fDbUser
private

Definition at line 136 of file QDb.hh.

Referenced by ConnectBase().

◆ fDisconnectTimeoutSec

double QDb::fDisconnectTimeoutSec
private

Definition at line 154 of file QDb.hh.

Referenced by InitWatchdogThread(), and SetDisconnectTimeoutSec().

◆ fMaxConnectDelaySec

double QDb::fMaxConnectDelaySec
private

Definition at line 150 of file QDb.hh.

Referenced by RandomWaitBeforeConnect(), and SetConnectRandomDelaySec().

◆ fMinConnectDelaySec

double QDb::fMinConnectDelaySec
private

Definition at line 149 of file QDb.hh.

Referenced by RandomWaitBeforeConnect(), and SetConnectRandomDelaySec().

◆ fMutex

boost::mutex* QDb::fMutex
private

Definition at line 158 of file QDb.hh.

Referenced by Disconnect(), QDb(), Query(), and ~QDb().

◆ fThreadHandler

QDbWatchdogThreadHandler* QDb::fThreadHandler
private

Definition at line 156 of file QDb.hh.

Referenced by InitWatchdogThread(), UpdateWatchdogTimer(), and ~QDb().

◆ fWatchdogTimer

QWatchdogTimer* QDb::fWatchdogTimer
private

Definition at line 157 of file QDb.hh.

Referenced by InitWatchdogThread(), UpdateWatchdogTimer(), and ~QDb().


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