Add ability to set reconnect flag on MySQL connections

Add database server ping method to SQL classes
pull/2/head
Timothy Pearson 10 years ago
parent 4de3697383
commit 7b43eed24a

@ -848,6 +848,17 @@ void QIBaseDriver::close()
}
}
bool QIBaseDriver::ping()
{
if ( !isOpen() ) {
return FALSE;
}
// FIXME
// Implement ping if available
return TRUE;
}
QSqlQuery QIBaseDriver::createQuery() const
{
return QSqlQuery(new QIBaseResult(this));

@ -94,6 +94,7 @@ public:
const QString & host,
int port ) { return open (db, user, password, host, port, QString()); }
void close();
bool ping();
QSqlQuery createQuery() const;
bool beginTransaction();
bool commitTransaction();

@ -504,6 +504,8 @@ bool QMYSQLDriver::open( const QString& db,
optionFlags |= CLIENT_ODBC;
else if ( opt == "CLIENT_SSL" )
optionFlags |= CLIENT_SSL;
else if ( opt == "MYSQL_OPT_RECONNECT" )
optionFlags |= MYSQL_OPT_RECONNECT;
else
qWarning( "QMYSQLDriver::open: Unknown connect option '%s'", (*it).latin1() );
}
@ -544,6 +546,21 @@ void QMYSQLDriver::close()
}
}
bool QMYSQLDriver::ping()
{
if ( !isOpen() ) {
return FALSE;
}
if (mysql_ping( d->mysql )) {
return TRUE;
}
else {
setLastError( qMakeError("Unable to execute ping", QSqlError::Statement, d ) );
return FALSE;
}
}
QSqlQuery QMYSQLDriver::createQuery() const
{
return QSqlQuery( new QMYSQLResult( this ) );

@ -100,6 +100,7 @@ public:
const QString & host = QString::null,
int port = -1 );
void close();
bool ping();
QSqlQuery createQuery() const;
QStringList tables( const QString& user ) const;
QSqlIndex primaryIndex( const QString& tablename ) const;

@ -1490,6 +1490,13 @@ void QODBCDriver::close()
setOpenError( FALSE );
}
bool QODBCDriver::ping()
{
// FIXME
// Implement ping if supported
return TRUE;
}
void QODBCDriver::cleanup()
{
SQLRETURN r;

@ -128,6 +128,7 @@ public:
const QString & host = QString::null,
int port = -1 );
void close();
bool ping();
QSqlQuery createQuery() const;
QStringList tables( const QString& user ) const;
QSqlRecord record( const QString& tablename ) const;

@ -679,6 +679,29 @@ void QPSQLDriver::close()
}
}
bool QPSQLDriver::ping()
{
if ( !isOpen() ) {
return FALSE;
}
PGresult *res = NULL;
// Send ping
res = PQexec( d->connection, "" );
PQclear(res);
// Check connection status
if ( PQstatus( d->connection ) != CONNECTION_OK ) {
PQreset( d->connection );
if ( PQstatus( d->connection ) != CONNECTION_OK ) {
setLastError( qMakeError("Unable to execute ping", QSqlError::Statement, d ) );
return FALSE;
}
}
return TRUE;
}
QSqlQuery QPSQLDriver::createQuery() const
{
return QSqlQuery( new QPSQLResult( this, d ) );

@ -98,6 +98,7 @@ public:
const QString & host = QString::null,
int port = -1 );
void close();
bool ping();
QSqlQuery createQuery() const;
QStringList tables( const QString& user ) const;
QSqlIndex primaryIndex( const QString& tablename ) const;

@ -352,6 +352,17 @@ void QSQLiteDriver::close()
}
}
bool QSQLiteDriver::ping()
{
if ( !isOpen() ) {
return FALSE;
}
// FIXME
// Implement ping if available
return TRUE;
}
QSqlQuery QSQLiteDriver::createQuery() const
{
return QSqlQuery(new QSQLiteResult(this));

@ -72,6 +72,7 @@ public:
const QString & host,
int port ) { return open (db, user, password, host, port, QString()); }
void close();
bool ping();
QSqlQuery createQuery() const;
bool beginTransaction();
bool commitTransaction();

@ -336,6 +336,17 @@ void QSQLite3Driver::close()
}
}
bool QSQLite3Driver::ping()
{
if ( !isOpen() ) {
return FALSE;
}
// FIXME
// Implement ping if available
return TRUE;
}
QSqlQuery QSQLite3Driver::createQuery() const
{
return QSqlQuery(new QSQLite3Result(this));

@ -72,6 +72,7 @@ public:
const QString & host,
int port ) { return open (db, user, password, host, port, QString()); }
void close();
bool ping();
QSqlQuery createQuery() const;
bool beginTransaction();
bool commitTransaction();

@ -144,6 +144,7 @@ public:
return FALSE;
}
void close() {}
bool ping() { return TRUE; }
QSqlQuery createQuery() const { return QSqlQuery( new QNullResult(this) ); }
};
@ -795,6 +796,15 @@ void QSqlDatabase::close()
d->driver->close();
}
/*!
Sends a ping to the database server.
*/
bool QSqlDatabase::ping()
{
return d->driver->ping();
}
/*!
Returns TRUE if the database connection is currently open;
otherwise returns FALSE.

@ -95,6 +95,7 @@ public:
bool open();
bool open( const QString& user, const QString& password );
void close();
bool ping();
bool isOpen() const;
bool isOpenError() const;
QStringList tables() const;

@ -98,6 +98,7 @@ public:
const QString & host = QString::null,
int port = -1 ) = 0;
virtual void close() = 0;
virtual bool ping() = 0;
virtual QSqlQuery createQuery() const = 0;
// ### remove for 4.0

Loading…
Cancel
Save