Branch: master

d8352f9d 2014-09-03 18:37:52 Timothy Pearson
Automated update from Qt3
M src/sql/drivers/ibase/qsql_ibase.cpp
M src/sql/drivers/ibase/qsql_ibase.h
M src/sql/drivers/mysql/qsql_mysql.cpp
M src/sql/drivers/mysql/qsql_mysql.h
M src/sql/drivers/odbc/qsql_odbc.cpp
M src/sql/drivers/odbc/qsql_odbc.h
M src/sql/drivers/psql/qsql_psql.cpp
M src/sql/drivers/psql/qsql_psql.h
M src/sql/drivers/sqlite/qsql_sqlite.cpp
M src/sql/drivers/sqlite/qsql_sqlite.h
M src/sql/drivers/sqlite3/qsql_sqlite3.cpp
M src/sql/drivers/sqlite3/qsql_sqlite3.h
M src/sql/ntqsqldatabase.h
M src/sql/ntqsqldriver.h
M src/sql/qsqldatabase.cpp
diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp
index 6a1d0ab..ee2976d 100644
--- a/src/sql/drivers/ibase/qsql_ibase.cpp
+++ b/src/sql/drivers/ibase/qsql_ibase.cpp
@@ -848,6 +848,17 @@
     }
 }
 
+bool TQIBaseDriver::ping()
+{
+    if ( !isOpen() ) {
+        return FALSE;
+    }
+
+    // FIXME
+    // Implement ping if available
+    return TRUE;
+}
+
 TQSqlQuery TQIBaseDriver::createQuery() const
 {
     return TQSqlQuery(new TQIBaseResult(this));
diff --git a/src/sql/drivers/ibase/qsql_ibase.h b/src/sql/drivers/ibase/qsql_ibase.h
index 45cb4b8..023a6b0 100644
--- a/src/sql/drivers/ibase/qsql_ibase.h
+++ b/src/sql/drivers/ibase/qsql_ibase.h
@@ -94,6 +94,7 @@
 	    const TQString & host,
 	    int port ) { return open (db, user, password, host, port, TQString()); }
     void close();
+    bool ping();
     TQSqlQuery createQuery() const;
     bool beginTransaction();
     bool commitTransaction();
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index aca8354..aad8462 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -504,6 +504,8 @@
 	    optionFlags |= CLIENT_ODBC;
 	else if ( opt == "CLIENT_SSL" )
 	    optionFlags |= CLIENT_SSL;
+	else if ( opt == "MYSQL_OPT_RECONNECT" )
+	    optionFlags |= MYSQL_OPT_RECONNECT;
 	else 
 	    tqWarning( "TQMYSQLDriver::open: Unknown connect option '%s'", (*it).latin1() );
     }
@@ -544,6 +546,21 @@
     }
 }
 
+bool TQMYSQLDriver::ping()
+{
+    if ( !isOpen() ) {
+        return FALSE;
+    }
+
+    if (mysql_ping( d->mysql )) {
+	return TRUE;
+    }
+    else {
+	setLastError( qMakeError("Unable to execute ping", TQSqlError::Statement, d ) );
+	return FALSE;
+    }
+}
+
 TQSqlQuery TQMYSQLDriver::createQuery() const
 {
     return TQSqlQuery( new TQMYSQLResult( this ) );
diff --git a/src/sql/drivers/mysql/qsql_mysql.h b/src/sql/drivers/mysql/qsql_mysql.h
index 6b1daef..e464625 100644
--- a/src/sql/drivers/mysql/qsql_mysql.h
+++ b/src/sql/drivers/mysql/qsql_mysql.h
@@ -100,6 +100,7 @@
 			      const TQString & host = TQString::null,
 			      int port = -1 );
     void		close();
+    bool		ping();
     TQSqlQuery		createQuery() const;
     TQStringList		tables( const TQString& user ) const;
     TQSqlIndex		primaryIndex( const TQString& tablename ) const;
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index 40739b3..3bedbb8 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -1490,6 +1490,13 @@
     setOpenError( FALSE );
 }
 
+bool TQODBCDriver::ping()
+{
+    // FIXME
+    // Implement ping if supported
+    return TRUE;
+}
+
 void TQODBCDriver::cleanup()
 {
     SQLRETURN r;
diff --git a/src/sql/drivers/odbc/qsql_odbc.h b/src/sql/drivers/odbc/qsql_odbc.h
index 0ce0170..619212d 100644
--- a/src/sql/drivers/odbc/qsql_odbc.h
+++ b/src/sql/drivers/odbc/qsql_odbc.h
@@ -128,6 +128,7 @@
 			      const TQString & host = TQString::null,
 			      int port = -1 );
     void		close();
+    bool		ping();
     TQSqlQuery		createQuery() const;
     TQStringList		tables( const TQString& user ) const;
     TQSqlRecord		record( const TQString& tablename ) const;
diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp
index 033c69f..8e2c02a 100644
--- a/src/sql/drivers/psql/qsql_psql.cpp
+++ b/src/sql/drivers/psql/qsql_psql.cpp
@@ -679,6 +679,29 @@
     }
 }
 
+bool TQPSQLDriver::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", TQSqlError::Statement, d ) );
+	    return FALSE;
+	}
+    }
+    return TRUE;
+}
+
 TQSqlQuery TQPSQLDriver::createQuery() const
 {
     return TQSqlQuery( new TQPSQLResult( this, d ) );
diff --git a/src/sql/drivers/psql/qsql_psql.h b/src/sql/drivers/psql/qsql_psql.h
index dd1ddc7..6f9c4f5 100644
--- a/src/sql/drivers/psql/qsql_psql.h
+++ b/src/sql/drivers/psql/qsql_psql.h
@@ -98,6 +98,7 @@
 				const TQString & host = TQString::null,
 				int port = -1 );
     void		close();
+    bool		ping();
     TQSqlQuery		createQuery() const;
     TQStringList		tables( const TQString& user ) const;
     TQSqlIndex		primaryIndex( const TQString& tablename ) const;
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index ece3b9e..92a66c7 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -352,6 +352,17 @@
     }
 }
 
+bool TQSQLiteDriver::ping()
+{
+    if ( !isOpen() ) {
+        return FALSE;
+    }
+
+    // FIXME
+    // Implement ping if available
+    return TRUE;
+}
+
 TQSqlQuery TQSQLiteDriver::createQuery() const
 {
     return TQSqlQuery(new TQSQLiteResult(this));
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.h b/src/sql/drivers/sqlite/qsql_sqlite.h
index ff05ede..b90662c 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.h
+++ b/src/sql/drivers/sqlite/qsql_sqlite.h
@@ -72,6 +72,7 @@
 	    const TQString & host,
 	    int port ) { return open (db, user, password, host, port, TQString()); }
     void close();
+    bool ping();
     TQSqlQuery createQuery() const;
     bool beginTransaction();
     bool commitTransaction();
diff --git a/src/sql/drivers/sqlite3/qsql_sqlite3.cpp b/src/sql/drivers/sqlite3/qsql_sqlite3.cpp
index a756c7d..4d79cb4 100644
--- a/src/sql/drivers/sqlite3/qsql_sqlite3.cpp
+++ b/src/sql/drivers/sqlite3/qsql_sqlite3.cpp
@@ -336,6 +336,17 @@
     }
 }
 
+bool TQSQLite3Driver::ping()
+{
+    if ( !isOpen() ) {
+        return FALSE;
+    }
+
+    // FIXME
+    // Implement ping if available
+    return TRUE;
+}
+
 TQSqlQuery TQSQLite3Driver::createQuery() const
 {
     return TQSqlQuery(new TQSQLite3Result(this));
diff --git a/src/sql/drivers/sqlite3/qsql_sqlite3.h b/src/sql/drivers/sqlite3/qsql_sqlite3.h
index 4d79176..facd85a 100644
--- a/src/sql/drivers/sqlite3/qsql_sqlite3.h
+++ b/src/sql/drivers/sqlite3/qsql_sqlite3.h
@@ -72,6 +72,7 @@
                const TQString & host,
                int port ) { return open (db, user, password, host, port, TQString()); }
     void close();
+    bool ping();
     TQSqlQuery createQuery() const;
     bool beginTransaction();
     bool commitTransaction();
diff --git a/src/sql/ntqsqldatabase.h b/src/sql/ntqsqldatabase.h
index 2423fd2..b44735e 100644
--- a/src/sql/ntqsqldatabase.h
+++ b/src/sql/ntqsqldatabase.h
@@ -95,6 +95,7 @@
     bool		open();
     bool		open( const TQString& user, const TQString& password );
     void		close();
+    bool		ping();
     bool		isOpen() const;
     bool		isOpenError() const;
     TQStringList		tables() const;
diff --git a/src/sql/ntqsqldriver.h b/src/sql/ntqsqldriver.h
index 5da9030..09c74b2 100644
--- a/src/sql/ntqsqldriver.h
+++ b/src/sql/ntqsqldriver.h
@@ -98,6 +98,7 @@
 				      const TQString & host = TQString::null,
 				      int port = -1 ) = 0;
     virtual void		close() = 0;
+    virtual bool		ping() = 0;
     virtual TQSqlQuery		createQuery() const = 0;
 
     // ### remove for 4.0
diff --git a/src/sql/qsqldatabase.cpp b/src/sql/qsqldatabase.cpp
 ** Diff limit reached (max: 250 lines) **