summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/sql/tqsqldatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/sql/tqsqldatabase.cpp')
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldatabase.cpp1332
1 files changed, 0 insertions, 1332 deletions
diff --git a/tqtinterface/qt4/src/sql/tqsqldatabase.cpp b/tqtinterface/qt4/src/sql/tqsqldatabase.cpp
deleted file mode 100644
index 1876720..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldatabase.cpp
+++ /dev/null
@@ -1,1332 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlDatabase class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the sql module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqsqldatabase.h"
-
-#ifndef TQT_NO_SQL
-
-#ifdef TQ_OS_WIN32
-// Conflicting declarations of LPCBYTE in sqlfront.h and winscard.h
-#define _WINSCARD_H_
-#endif
-
-#ifdef TQT_STQL_POSTGRES
-#include "drivers/psql/tqsql_psql.h"
-#endif
-#ifdef TQT_STQL_MYSQL
-#include "drivers/mysql/tqsql_mysql.h"
-#endif
-#ifdef TQT_STQL_ODBC
-#include "drivers/odbc/tqsql_odbc.h"
-#endif
-#ifdef TQT_STQL_OCI
-#include "drivers/oci/tqsql_oci.h"
-#endif
-#ifdef TQT_STQL_TDS
-#include "drivers/tds/tqsql_tds.h"
-#endif
-#ifdef TQT_STQL_DB2
-#include "drivers/db2/tqsql_db2.h"
-#endif
-#ifdef TQT_STQL_STQLITE
-#include "drivers/sqlite/tqsql_sqlite.h"
-#endif
-#ifdef TQT_STQL_IBASE
-#include "drivers/ibase/tqsql_ibase.h"
-#endif
-
-#include "tqapplication.h"
-#include "tqsqlresult.h"
-#include "tqsqldriver.h"
-#include "tqsqldriverinterface_p.h"
-#include <private/tqpluginmanager_p.h>
-#include <private/tqsqlextension_p.h>
-#include "tqobject.h"
-#include "tqguardedptr.h"
-#include "tqcleanuphandler.h"
-#include "tqdict.h"
-#include <stdlib.h>
-
-TQT_STATIC_CONST_IMPL char * const TQSqlDatabase::defaultConnection = "qt_sql_default_connection";
-
-TQPtrDict<TQSqlDriverExtension> *qt_driver_extension_dict = 0;
-TQPtrDict<TQSqlOpenExtension> *qt_open_extension_dict = 0;
-
-static TQSingleCleanupHandler< TQPtrDict<TQSqlDriverExtension> > qt_driver_ext_cleanup;
-static TQSingleCleanupHandler< TQPtrDict<TQSqlOpenExtension> > qt_open_ext_cleanup;
-
-TQ_EXPORT TQPtrDict<TQSqlDriverExtension> *qSqlDriverExtDict()
-{
- if ( !qt_driver_extension_dict ) {
- qt_driver_extension_dict = new TQPtrDict<TQSqlDriverExtension>;
- qt_driver_ext_cleanup.set( &qt_driver_extension_dict );
- }
- return qt_driver_extension_dict;
-}
-
-TQ_EXPORT TQPtrDict<TQSqlOpenExtension> *qSqlOpenExtDict()
-{
- if ( !qt_open_extension_dict ) {
- qt_open_extension_dict = new TQPtrDict<TQSqlOpenExtension>;
- qt_open_ext_cleanup.set( &qt_open_extension_dict );
- }
- return qt_open_extension_dict;
-}
-
-class TQNullResult : public TQSqlResult
-{
-public:
- TQNullResult(const TQSqlDriver* d): TQSqlResult(d){}
- ~TQNullResult(){}
-protected:
- TQVariant data( int ) { return TQVariant(); }
- bool reset ( const TQString& sqlquery ) { TQString s(sqlquery); return FALSE; }
- bool fetch( int i ) { i = i; return FALSE; }
- bool fetchFirst() { return FALSE; }
- bool fetchLast() { return FALSE; }
- bool isNull( int ) {return FALSE; }
- TQSqlRecord record() {return TQSqlRecord();}
- int size() {return 0;}
- int numRowsAffected() {return 0;}
-};
-
-class TQNullDriver : public TQSqlDriver
-{
-public:
- TQNullDriver(): TQSqlDriver(){}
- ~TQNullDriver(){}
- bool hasFeature( DriverFeature /* f */ ) const { return FALSE; } ;
- bool open( const TQString & ,
- const TQString & ,
- const TQString & ,
- const TQString &,
- int ) {
- return FALSE;
- }
- void close() {}
- TQSqlQuery createQuery() const { return TQSqlQuery( new TQNullResult(this) ); }
-};
-
-typedef TQDict<TQSqlDriverCreatorBase> TQDriverDict;
-
-class TQSqlDatabaseManager : public TQObject
-{
-public:
- TQSqlDatabaseManager( TQObject * parent = 0, const char * name = 0 );
- ~TQSqlDatabaseManager();
- static TQSqlDatabase* database( const TQString& name, bool open );
- static TQSqlDatabase* addDatabase( TQSqlDatabase* db, const TQString & name );
- static void removeDatabase( const TQString& name );
- static void removeDatabase( TQSqlDatabase* db );
- static bool contains( const TQString& name );
- static TQDriverDict* driverDict();
-
-protected:
- static TQSqlDatabaseManager* instance();
- TQDict< TQSqlDatabase > dbDict;
- TQDriverDict* drDict;
-};
-
-/*!
- Constructs an SQL database manager.
-*/
-
-TQSqlDatabaseManager::TQSqlDatabaseManager( TQObject * parent, const char * name )
- : TQObject( parent, name ), dbDict( 1 ), drDict( 0 )
-{
-}
-
-/*!
- Destroys the object and frees any allocated resources. All open
- database connections are closed. All database connections are
- deleted.
-*/
-
-TQSqlDatabaseManager::~TQSqlDatabaseManager()
-{
- TQDictIterator< TQSqlDatabase > it( dbDict );
- while ( it.current() ) {
- it.current()->close();
- delete it.current();
- ++it;
- }
- delete drDict;
-}
-
-/*!
- \internal
-*/
-TQDriverDict* TQSqlDatabaseManager::driverDict()
-{
- TQSqlDatabaseManager* sqlConnection = instance();
- if ( !sqlConnection->drDict ) {
- sqlConnection->drDict = new TQDriverDict();
- sqlConnection->drDict->setAutoDelete( TRUE );
- }
- return sqlConnection->drDict;
-}
-
-
-/*!
- \internal
-*/
-TQSqlDatabaseManager* TQSqlDatabaseManager::instance()
-{
- static TQGuardedPtr<TQSqlDatabaseManager> sqlConnection = 0;
- if ( !sqlConnection ) {
- if( tqApp == 0 ){
- qFatal( "TQSqlDatabaseManager: A TQApplication object has to be "
- "instantiated in order to use the SQL module." );
- return 0;
- }
- sqlConnection = new TQSqlDatabaseManager( TQT_TQOBJECT(tqApp), "database manager" );
- }
- return (TQSqlDatabaseManager*)sqlConnection;
-}
-
-/*!
- Returns the database connection called \a name. If \a open is
- TRUE, the database connection is opened. If \a name does not exist
- in the list of managed databases, 0 is returned.
-*/
-
-TQSqlDatabase* TQSqlDatabaseManager::database( const TQString& name, bool open )
-{
- if ( !contains( name ) )
- return 0;
-
- TQSqlDatabaseManager* sqlConnection = instance();
- TQSqlDatabase* db = sqlConnection->dbDict.find( name );
- if ( db && !db->isOpen() && open ) {
- db->open();
-#ifdef TQT_CHECK_RANGE
- if ( !db->isOpen() )
- qWarning("TQSqlDatabaseManager::database: unable to open database: %s: %s",
- db->lastError().databaseText().latin1(), db->lastError().driverText().latin1() );
-#endif
- }
- return db;
-}
-
-/*!
- Returns TRUE if the list of database connections contains \a name;
- otherwise returns FALSE.
-*/
-
-bool TQSqlDatabaseManager::contains( const TQString& name )
-{
- TQSqlDatabaseManager* sqlConnection = instance();
- TQSqlDatabase* db = sqlConnection->dbDict.find( name );
- if ( db )
- return TRUE;
- return FALSE;
-}
-
-
-/*!
- Adds a database to the SQL connection manager. The database
- connection is referred to by \a name. The newly added database
- connection is returned. This function will only return 0 if it is
- called \e before a TQApplication object has been instantiated. Use
- the output of drivers() to determine whether a particular driver
- is available or not.
-
- The returned TQSqlDatabase object is owned by the framework and
- must not be deleted. If you want to explicitly remove the connection,
- use removeDatabase().
-
- \sa TQSqlDatabase database()
-*/
-
-TQSqlDatabase* TQSqlDatabaseManager::addDatabase( TQSqlDatabase* db, const TQString & name )
-{
- TQSqlDatabaseManager* sqlConnection = instance();
- if( sqlConnection == 0 )
- return 0;
- if ( contains( name ) )
- sqlConnection->removeDatabase( name );
- sqlConnection->dbDict.insert( name, db );
- return db;
-}
-
-/*!
- Removes the database connection \a name from the SQL connection
- manager.
-
- \warning There should be no open queries on the database
- connection when this function is called, otherwise a resource leak
- will occur.
-*/
-
-void TQSqlDatabaseManager::removeDatabase( const TQString& name )
-{
- TQSqlDatabaseManager* sqlConnection = instance();
- sqlConnection->dbDict.setAutoDelete( TRUE );
- sqlConnection->dbDict.remove( name );
- sqlConnection->dbDict.setAutoDelete( FALSE );
-}
-
-
-/*!
- Removes the database connection \a db from the SQL connection
- manager. The TQSqlDatabase object is destroyed when it is removed
- from the manager.
-
- \warning The \a db pointer is not valid after this function has
- been called.
-*/
-
-void TQSqlDatabaseManager::removeDatabase( TQSqlDatabase* db )
-{
- TQSqlDatabaseManager* sqlConnection = instance();
- if ( !sqlConnection )
- return;
- TQDictIterator< TQSqlDatabase > it( sqlConnection->dbDict );
- while ( it.current() ) {
- if ( it.current() == db ) {
- sqlConnection->dbDict.remove( it.currentKey() );
- db->close();
- delete db;
- break;
- }
- ++it;
- }
-}
-
-class TQSqlDatabasePrivate
-{
-public:
- TQSqlDatabasePrivate():
- driver(0),
-#ifndef TQT_NO_COMPONENT
- plugIns(0),
-#endif
- port(-1) {}
- ~TQSqlDatabasePrivate()
- {
- }
- TQSqlDriver* driver;
-#ifndef TQT_NO_COMPONENT
- TQPluginManager<TQSqlDriverFactoryInterface> *plugIns;
-#endif
- TQString dbname;
- TQString uname;
- TQString pword;
- TQString hname;
- TQString drvName;
- int port;
- TQString connOptions;
-};
-
-/*!
- \class TQSqlDatabase tqsqldatabase.h
- \brief The TQSqlDatabase class is used to create SQL database
- connections and to provide transaction handling.
-
- \ingroup database
- \mainclass
- \module sql
-
- Note that transaction handling is not supported by every SQL
- database. You can find out whether transactions are supported
- using TQSqlDriver::hasFeature().
-
- The TQSqlDatabase class provides an abstract interface for
- accessing many types of database backends. Database-specific
- drivers are used internally to actually access and manipulate
- data, (see TQSqlDriver). Result set objects provide the interface
- for executing and manipulating SQL queries (see TQSqlQuery).
-*/
-
-/*!
- Adds a database to the list of database connections using the
- driver \a type and the connection name \a connectionName.
-
- The database connection is referred to by \a connectionName. The
- newly added database connection is returned. This pointer is owned
- by TQSqlDatabase and will be deleted on program exit or when
- removeDatabase() is called.
-
- If \a connectionName is not specified, the newly added database
- connection becomes the default database connection for the
- application, and subsequent calls to database() (without a
- database name parameter) will return a pointer to it. If \a
- connectionName is given, use \link TQSqlDatabase::database()
- database(connectionName)\endlink to retrieve a pointer to the
- database connection.
-
- \warning If you add a database with the same name as an
- existing database, the new database will replace the old one.
- This will happen automatically if you call this function more
- than once without specifying \a connectionName.
-
- \sa database() removeDatabase()
-*/
-TQSqlDatabase* TQSqlDatabase::addDatabase( const TQString& type, const TQString& connectionName )
-{
- return TQSqlDatabaseManager::addDatabase( new TQSqlDatabase( type, connectionName ), connectionName );
-}
-
-/*!
- Returns the database connection called \a connectionName. The
- database connection must have been previously added with
- addDatabase(). If \a open is TRUE (the default) and the database
- connection is not already open it is opened now. If no \a
- connectionName is specified the default connection is used. If \a
- connectionName does not exist in the list of databases, 0 is
- returned. The pointer returned is owned by TQSqlDatabase and should
- \e not be deleted.
-
- \warning There are restrictions on the use of database connections
- in threaded applications. Please see the \link threads.html#threads-sql
- Thread Support in TQt\endlink document for more information about
- threading and SQL databases.
-*/
-
-TQSqlDatabase* TQSqlDatabase::database( const TQString& connectionName, bool open )
-{
- return TQSqlDatabaseManager::database( connectionName, open );
-}
-
-/*!
- Removes the database connection \a connectionName from the list of
- database connections.
-
- \warning There should be no open queries on the database
- connection when this function is called, otherwise a resource leak
- will occur.
-*/
-
-void TQSqlDatabase::removeDatabase( const TQString& connectionName )
-{
- TQSqlDatabaseManager::removeDatabase( connectionName );
-}
-
-/*!
- \overload
-
- Removes the database connection \a db from the list of database
- connections. The TQSqlDatabase object is destroyed when it is removed
- from the list.
-
- \warning The \a db pointer is not valid after this function has
- been called. There should be no open queries on the database
- connection when this function is called, otherwise a resource leak
- will occur.
-*/
-
-void TQSqlDatabase::removeDatabase( TQSqlDatabase* db )
-{
- TQSqlDatabaseManager::removeDatabase( db );
-}
-
-/*!
- Returns a list of all the available database drivers.
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = TQSqlDatabase::drivers();
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-*/
-
-TQStringList TQSqlDatabase::drivers()
-{
- TQStringList l;
-
-#ifndef TQT_NO_COMPONENT
- TQPluginManager<TQSqlDriverFactoryInterface> *plugIns;
- plugIns = new TQPluginManager<TQSqlDriverFactoryInterface>( IID_TQSqlDriverFactory, TQApplication::libraryPaths(), TQString("/sqldrivers") );
-
- l = plugIns->featureList();
- delete plugIns;
-#endif
-
- TQDictIterator<TQSqlDriverCreatorBase> itd( *TQSqlDatabaseManager::driverDict() );
- while ( itd.current() ) {
- if ( !l.contains( itd.currentKey() ) )
- l << itd.currentKey();
- ++itd;
- }
-
-#ifdef TQT_STQL_POSTGRES
- if ( !l.contains( "TQPSQL7" ) )
- l << "TQPSQL7";
-#endif
-#ifdef TQT_STQL_MYSQL
- if ( !l.contains( "TQMYSQL3" ) )
- l << "TQMYSQL3";
-#endif
-#ifdef TQT_STQL_ODBC
- if ( !l.contains( "TQODBC3" ) )
- l << "TQODBC3";
-#endif
-#ifdef TQT_STQL_OCI
- if ( !l.contains( "TQOCI8" ) )
- l << "TQOCI8";
-#endif
-#ifdef TQT_STQL_TDS
- if ( !l.contains( "TQTDS7" ) )
- l << "TQTDS7";
-#endif
-#ifdef TQT_STQL_DB2
- if ( !l.contains( "TQDB2" ) )
- l << "TQDB2";
-#endif
-#ifdef TQT_STQL_STQLITE
- if ( !l.contains( "TQSQLITE" ) )
- l << "TQSQLITE";
-#endif
-#ifdef TQT_STQL_IBASE
- if ( !l.contains( "TQIBASE" ) )
- l << "TQIBASE";
-#endif
-
- return l;
-}
-
-/*!
- This function registers a new SQL driver called \a name, within
- the SQL framework. This is useful if you have a custom SQL driver
- and don't want to compile it as a plugin.
-
- Example usage:
-
- \code
- TQSqlDatabase::registerSqlDriver( "MYDRIVER", new TQSqlDriverCreator<MyDatabaseDriver> );
- TQSqlDatabase* db = TQSqlDatabase::addDatabase( "MYDRIVER" );
- ...
- \endcode
-
- \warning The framework takes ownership of the \a creator pointer,
- so it should not be deleted.
-*/
-void TQSqlDatabase::registerSqlDriver( const TQString& name, const TQSqlDriverCreatorBase* creator )
-{
- TQSqlDatabaseManager::driverDict()->remove( name );
- if ( creator )
- TQSqlDatabaseManager::driverDict()->insert( name, creator );
-}
-
-/*!
- Returns TRUE if the list of database connections contains \a
- connectionName; otherwise returns FALSE.
-*/
-
-bool TQSqlDatabase::contains( const TQString& connectionName )
-{
- return TQSqlDatabaseManager::contains( connectionName );
-}
-
-
-/*!
- Creates a TQSqlDatabase connection called \a name that uses the
- driver referred to by \a type, with the parent \a parent and the
- object name \a objname. If the \a type is not recognized, the
- database connection will have no functionality.
-
- The currently available drivers are:
-
- \table
- \header \i Driver Type \i Description
- \row \i TQODBC3 \i ODBC Driver (includes Microsoft SQL Server)
- \row \i TQOCI8 \i Oracle Call Interface Driver
- \row \i TQPSQL7 \i PostgreSQL v6.x and v7.x Driver
- \row \i TQTDS7 \i Sybase Adaptive Server
- \row \i TQMYSQL3 \i MySQL Driver
- \row \i TQDB2 \i IBM DB2, v7.1 and higher
- \row \i TQSQLITE \i STQLite Driver
- \row \i TQIBASE \i Borland Interbase Driver
- \endtable
-
- Additional third party drivers, including your own custom drivers,
- can be loaded dynamically.
-
- \sa registerSqlDriver()
-*/
-
-TQSqlDatabase::TQSqlDatabase( const TQString& type, const TQString& name, TQObject * parent, const char * objname )
- : TQObject( parent, objname )
-{
- init( type, name );
-}
-
-
-/*!
- \overload
-
- Creates a database connection using the driver \a driver, with
- the parent \a parent and the object name \a objname.
-
- \warning The framework takes ownership of the \a driver pointer,
- so it should not be deleted.
-*/
-
-TQSqlDatabase::TQSqlDatabase( TQSqlDriver* driver, TQObject * parent, const char * objname )
- : TQObject( parent, objname )
-{
- d = new TQSqlDatabasePrivate();
- d->driver = driver;
-}
-
-/*!
- \internal
-
- Create the actual driver instance \a type.
-*/
-
-void TQSqlDatabase::init( const TQString& type, const TQString& )
-{
- d = new TQSqlDatabasePrivate();
- d->drvName = type;
-
- if ( !d->driver ) {
-
-#ifdef TQT_STQL_POSTGRES
- if ( type == "TQPSQL7" )
- d->driver = new TQPSTQLDriver();
-#endif
-
-#ifdef TQT_STQL_MYSQL
- if ( type == "TQMYSQL3" )
- d->driver = new TQMYSTQLDriver();
-#endif
-
-#ifdef TQT_STQL_ODBC
- if ( type == "TQODBC3" )
- d->driver = new TQODBCDriver();
-#endif
-
-#ifdef TQT_STQL_OCI
- if ( type == "TQOCI8" )
- d->driver = new TQOCIDriver();
-#endif
-
-#ifdef TQT_STQL_TDS
- if ( type == "TQTDS7" )
- d->driver = new TQTDSDriver();
-#endif
-
-#ifdef TQT_STQL_DB2
- if ( type == "TQDB2" )
- d->driver = new TQDB2Driver();
-#endif
-
-#ifdef TQT_STQL_STQLITE
- if ( type == "TQSQLITE" )
- d->driver = new TQSTQLiteDriver();
-#endif
-
-#ifdef TQT_STQL_IBASE
- if ( type == "TQIBASE" )
- d->driver = new TQIBaseDriver();
-#endif
-
- }
-
- if ( !d->driver ) {
- TQDictIterator<TQSqlDriverCreatorBase> it( *TQSqlDatabaseManager::driverDict() );
- while ( it.current() && !d->driver ) {
- if ( type == it.currentKey() ) {
- d->driver = it.current()->createObject();
- }
- ++it;
- }
- }
-
-#ifndef TQT_NO_COMPONENT
- if ( !d->driver ) {
- d->plugIns =
- new TQPluginManager<TQSqlDriverFactoryInterface>( IID_TQSqlDriverFactory, TQApplication::libraryPaths(), "/sqldrivers" );
-
- TQInterfacePtr<TQSqlDriverFactoryInterface> iface = 0;
- d->plugIns->queryInterface( type, &iface );
- if( iface )
- d->driver = iface->create( type );
- }
-#endif
-
- if ( !d->driver ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQSqlDatabase: %s driver not loaded", type.latin1() );
- qWarning( "TQSqlDatabase: available drivers: %s", drivers().join(" ").latin1() );
-#endif
- d->driver = new TQNullDriver();
- d->driver->setLastError( TQSqlError( "Driver not loaded", "Driver not loaded" ) );
- }
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlDatabase::~TQSqlDatabase()
-{
- delete d->driver;
-#ifndef TQT_NO_COMPONENT
- delete d->plugIns;
-#endif
- delete d;
-}
-
-/*!
- Executes a SQL statement (e.g. an \c INSERT, \c UPDATE or \c
- DELETE statement) on the database, and returns a TQSqlQuery object.
- Use lastError() to retrieve error information. If \a query is
- TQString::null, an empty, invalid query is returned and lastError()
- is not affected.
-
- \sa TQSqlQuery lastError()
-*/
-
-TQSqlQuery TQSqlDatabase::exec( const TQString & query ) const
-{
- TQSqlQuery r = d->driver->createQuery();
- if ( !query.isNull() ) {
- r.exec( query );
- d->driver->setLastError( r.lastError() );
- }
- return r;
-}
-
-/*!
- Opens the database connection using the current connection values.
- Returns TRUE on success; otherwise returns FALSE. Error
- information can be retrieved using the lastError() function.
-
- \sa lastError()
-*/
-
-bool TQSqlDatabase::open()
-{
- return d->driver->open( d->dbname, d->uname, d->pword, d->hname,
- d->port, d->connOptions );
-}
-
-/*!
- \overload
-
- Opens the database connection using the given \a user name and \a
- password. Returns TRUE on success; otherwise returns FALSE. Error
- information can be retrieved using the lastError() function.
-
- This function does not store the password it is given. Instead,
- the password is passed directly to the driver for opening a
- connection and is then discarded.
-
- \sa lastError()
-*/
-
-bool TQSqlDatabase::open( const TQString& user, const TQString& password )
-{
- setUserName( user );
- return d->driver->open( d->dbname, user, password, d->hname,
- d->port, d->connOptions );
-}
-
-/*!
- Closes the database connection, freeing any resources acquired.
-
- \sa removeDatabase()
-*/
-
-void TQSqlDatabase::close()
-{
- d->driver->close();
-}
-
-/*!
- Returns TRUE if the database connection is currently open;
- otherwise returns FALSE.
-*/
-
-bool TQSqlDatabase::isOpen() const
-{
- return d->driver->isOpen();
-}
-
-/*!
- Returns TRUE if there was an error opening the database
- connection; otherwise returns FALSE. Error information can be
- retrieved using the lastError() function.
-*/
-
-bool TQSqlDatabase::isOpenError() const
-{
- return d->driver->isOpenError();
-}
-
-/*!
- Begins a transaction on the database if the driver supports
- transactions. Returns TRUE if the operation succeeded; otherwise
- returns FALSE.
-
- \sa TQSqlDriver::hasFeature() commit() rollback()
-*/
-
-bool TQSqlDatabase::transaction()
-{
- if ( !d->driver->hasFeature( TQSqlDriver::Transactions ) )
- return FALSE;
- return d->driver->beginTransaction();
-}
-
-/*!
- Commits a transaction to the database if the driver supports
- transactions. Returns TRUE if the operation succeeded; otherwise
- returns FALSE.
-
- \sa TQSqlDriver::hasFeature() rollback()
-*/
-
-bool TQSqlDatabase::commit()
-{
- if ( !d->driver->hasFeature( TQSqlDriver::Transactions ) )
- return FALSE;
- return d->driver->commitTransaction();
-}
-
-/*!
- Rolls a transaction back on the database if the driver supports
- transactions. Returns TRUE if the operation succeeded; otherwise
- returns FALSE.
-
- \sa TQSqlDriver::hasFeature() commit() transaction()
-*/
-
-bool TQSqlDatabase::rollback()
-{
- if ( !d->driver->hasFeature( TQSqlDriver::Transactions ) )
- return FALSE;
- return d->driver->rollbackTransaction();
-}
-
-/*!
- \property TQSqlDatabase::databaseName
- \brief the name of the database
-
- Note that the database name is the TNS Service Name for the TQOCI8
- (Oracle) driver.
-
- For the TQODBC3 driver it can either be a DSN, a DSN filename (the
- file must have a \c .dsn extension), or a connection string. MS
- Access users can for example use the following connection string
- to open a \c .mdb file directly, instead of having to create a DSN
- entry in the ODBC manager:
-
- \code
- ...
- db = TQSqlDatabase::addDatabase( "TQODBC3" );
- db->setDatabaseName( "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb" );
- if ( db->open() ) {
- // success!
- }
- ...
- \endcode
- ("FIL" is the required spelling in Microsoft's API.)
-
- There is no default value.
-*/
-
-void TQSqlDatabase::setDatabaseName( const TQString& name )
-{
- d->dbname = name;
-}
-
-/*!
- \property TQSqlDatabase::userName
- \brief the user name connected to the database
-
- There is no default value.
-*/
-
-void TQSqlDatabase::setUserName( const TQString& name )
-{
- d->uname = name;
-}
-
-/*!
- \property TQSqlDatabase::password
- \brief the password used to connect to the database
-
- There is no default value.
-
- \warning This function stores the password in plain text within
- TQt. Use the open() call that takes a password as parameter to
- avoid this behaviour.
-
- \sa open()
-*/
-
-void TQSqlDatabase::setPassword( const TQString& password )
-{
- d->pword = password;
-}
-
-/*!
- \property TQSqlDatabase::hostName
- \brief the host name where the database resides
-
- There is no default value.
-*/
-
-void TQSqlDatabase::setHostName( const TQString& host )
-{
- d->hname = host;
-}
-
-/*!
- \property TQSqlDatabase::port
- \brief the port used to connect to the database
-
- There is no default value.
-*/
-
-void TQSqlDatabase::setPort( int p )
-{
- d->port = p;
-}
-
-TQString TQSqlDatabase::databaseName() const
-{
- return d->dbname;
-}
-
-TQString TQSqlDatabase::userName() const
-{
- return d->uname;
-}
-
-TQString TQSqlDatabase::password() const
-{
- return d->pword;
-}
-
-TQString TQSqlDatabase::hostName() const
-{
- return d->hname;
-}
-
-/*!
- Returns the name of the driver used by the database connection.
-*/
-TQString TQSqlDatabase::driverName() const
-{
- return d->drvName;
-}
-
-int TQSqlDatabase::port() const
-{
- return d->port;
-}
-
-/*!
- Returns the database driver used to access the database
- connection.
-*/
-
-TQSqlDriver* TQSqlDatabase::driver() const
-{
- return d->driver;
-}
-
-/*!
- Returns information about the last error that occurred on the
- database. See TQSqlError for more information.
-*/
-
-TQSqlError TQSqlDatabase::lastError() const
-{
- return d->driver->lastError();
-}
-
-
-/*!
- \overload
-
- Returns a list of the database's tables that are visible to the
- user. To include views or system tables, use the version of this
- function that takes a table \c type parameter.
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = myDatabase.tables();
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-*/
-
-TQStringList TQSqlDatabase::tables() const
-{
- return tables( TQSql::Tables );
-}
-
-/*!
- Returns a list of the database's tables, system tables and views,
- as specified by the parameter \a type.
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = myDatabase.tables( TQSql::Tables | TQSql::Views );
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-*/
-
-TQStringList TQSqlDatabase::tables( TQSql::TableType type ) const
-{
- return d->driver->tables( TQString::number( (int)type ) );
-}
-
-/*!
- Returns the primary index for table \a tablename. If no primary
- index exists an empty TQSqlIndex will be returned.
-*/
-
-TQSqlIndex TQSqlDatabase::primaryIndex( const TQString& tablename ) const
-{
- return d->driver->primaryIndex( tablename );
-}
-
-
-/*!
- Returns a TQSqlRecord populated with the names of all the fields in
- the table (or view) called \a tablename. The order in which the
- fields appear in the record is undefined. If no such table (or
- view) exists, an empty record is returned.
-
- \sa recordInfo()
-*/
-
-TQSqlRecord TQSqlDatabase::record( const TQString& tablename ) const
-{
- return d->driver->record( tablename );
-}
-
-
-/*!
- \overload
-
- Returns a TQSqlRecord populated with the names of all the fields
- used in the SQL \a query. If the query is a "SELECT *" the order
- in which fields appear in the record is undefined.
-
- \sa recordInfo()
-*/
-
-TQSqlRecord TQSqlDatabase::record( const TQSqlQuery& query ) const
-{
- return d->driver->record( query );
-}
-
-/*!
- Returns a TQSqlRecordInfo populated with meta data about the table
- or view \a tablename. If no such table (or view) exists, an empty
- record is returned.
-
- \sa TQSqlRecordInfo, TQSqlFieldInfo, record()
-*/
-TQSqlRecordInfo TQSqlDatabase::recordInfo( const TQString& tablename ) const
-{
- return d->driver->recordInfo( tablename );
-}
-
-/*!
- \overload
-
- Returns a TQSqlRecordInfo object with meta data for the TQSqlQuery
- \a query. Note that this overloaded function may return less
- information than the recordInfo() function which takes the name of
- a table as parameter.
-
- \sa TQSqlRecordInfo, TQSqlFieldInfo, record()
-*/
-TQSqlRecordInfo TQSqlDatabase::recordInfo( const TQSqlQuery& query ) const
-{
- return d->driver->recordInfo( query );
-}
-
-/*!
- \property TQSqlDatabase::connectOptions
- \brief the database connect options
-
- The format of the options string is a semi-colon separated list of
- option names or option = value pairs. The options depend on the
- database client used:
-
- \table
- \header \i ODBC \i MySQL \i PostgreSQL
- \row
-
- \i
- \list
- \i STQL_ATTR_ACCESS_MODE
- \i STQL_ATTR_LOGIN_TIMEOUT
- \i STQL_ATTR_CONNECTION_TIMEOUT
- \i STQL_ATTR_CURRENT_CATALOG
- \i STQL_ATTR_METADATA_ID
- \i STQL_ATTR_PACKET_SIZE
- \i STQL_ATTR_TRACEFILE
- \i STQL_ATTR_TRACE
- \endlist
-
- \i
- \list
- \i CLIENT_COMPRESS
- \i CLIENT_FOUND_ROWS
- \i CLIENT_IGNORE_SPACE
- \i CLIENT_SSL
- \i CLIENT_ODBC
- \i CLIENT_NO_SCHEMA
- \i CLIENT_INTERACTIVE
- \endlist
-
- \i
- \list
- \i connect_timeout
- \i options
- \i tty
- \i requiressl
- \i service
- \endlist
-
- \header \i DB2 \i OCI \i TDS
- \row
-
- \i
- \list
- \i STQL_ATTR_ACCESS_MODE
- \i STQL_ATTR_LOGIN_TIMEOUT
- \endlist
-
- \i
- \e none
-
- \i
- \e none
-
- \endtable
-
- Example of usage:
- \code
- ...
- // MySQL connection
- db->setConnectOptions( "CLIENT_SSL;CLIENT_IGNORE_SPACE" ); // use an SSL connection to the server
- if ( !db->open() ) {
- db->setConnectOptions(); // clears the connect option string
- ...
- }
- ...
- // PostgreSQL connection
- db->setConnectOptions( "requiressl=1" ); // enable PostgreSQL SSL connections
- if ( !db->open() ) {
- db->setConnectOptions(); // clear options
- ...
- }
- ...
- // ODBC connection
- db->setConnectOptions( "STQL_ATTR_ACCESS_MODE=STQL_MODE_READ_ONLY;STQL_ATTR_TRACE=STQL_OPT_TRACE_ON" ); // set ODBC options
- if ( !db->open() ) {
- db->setConnectOptions(); // don't try to set this option
- ...
- }
- \endcode
-
- Please refer to the client library documentation for more
- information about the different options. The options will be set
- prior to opening the database connection. Setting new options
- without re-opening the connection does nothing.
-
- \sa connectOptions()
-*/
-
-void TQSqlDatabase::setConnectOptions( const TQString& options )
-{
- d->connOptions = options;
-}
-
-TQString TQSqlDatabase::connectOptions() const
-{
- return d->connOptions;
-}
-
-/*!
- Returns TRUE if a driver called \a name is available; otherwise
- returns FALSE.
-
- \sa drivers()
-*/
-
-bool TQSqlDatabase::isDriverAvailable( const TQString& name )
-{
- TQStringList l = drivers();
- TQStringList::ConstIterator it = l.begin();
- for ( ;it != l.end(); ++it ) {
- if ( *it == name )
- return TRUE;
- }
- return FALSE;
-}
-
-/*! \overload
-
- This function is useful if you need to set up the database
- connection and instantiate the driver yourself. If you do this, it
- is recommended that you include the driver code in your own
- application. For example, setting up a custom PostgreSQL
- connection and instantiating the TQPSQL7 driver can be done the
- following way:
-
- \code
- #include "tqtdir/src/sql/drivers/psql/qsql_psql.cpp"
- \endcode
- (We assume that \c qtdir is the directory where TQt is installed.)
- This will pull in the code that is needed to use the PostgreSQL
- client library and to instantiate a TQPSTQLDriver object, assuming
- that you have the PostgreSQL headers somewhere in your include
- search path.
-
- \code
- PGconn* con = PQconnectdb( "host=server user=bart password=simpson dbname=springfield" );
- TQPSTQLDriver* drv = new TQPSTQLDriver( con );
- TQSqlDatabase* db = TQSqlDatabase::addDatabase( drv ); // becomes the new default connection
- TQSqlQuery q;
- q.exec( "SELECT * FROM people" );
- ...
- \endcode
-
- The above code sets up a PostgreSQL connection and instantiates a
- TQPSTQLDriver object. Next, addDatabase() is called to add the
- connection to the known connections so that it can be used by the
- TQt SQL classes. When a driver is instantiated with a connection
- handle (or set of handles), TQt assumes that you have already
- opened the database connection.
-
- Remember that you must link your application against the database
- client library as well. The simplest way to do this is to add
- lines like those below to your \c .pro file:
-
- \code
- unix:LIBS += -lpq
- win32:LIBS += libpqdll.lib
- \endcode
-
- You will need to have the client library in your linker's search
- path.
-
- The method described above will work for all the drivers, the only
- difference is the arguments the driver constructors take. Below is
- an overview of the drivers and their constructor arguments.
-
- \table
- \header \i Driver \i Class name \i Constructor arguments \i File to include
- \row
- \i TQPSQL7
- \i TQPSTQLDriver
- \i PGconn* connection
- \i \c qsql_psql.cpp
- \row
- \i TQMYSQL3
- \i TQMYSTQLDriver
- \i MYSQL* connection
- \i \c qsql_mysql.cpp
- \row
- \i TQOCI8
- \i TQOCIDriver
- \i OCIEnv* environment, OCIError* error, OCISvcCtx* serviceContext
- \i \c qsql_oci.cpp
- \row
- \i TQODBC3
- \i TQODBCDriver
- \i STQLHANDLE environment, STQLHANDLE connection
- \i \c qsql_odbc.cpp
- \row
- \i TQDB2
- \i TQDB2
- \i STQLHANDLE environment, STQLHANDLE connection
- \i \c qsql_db2.cpp
- \row
- \i TQTDS7
- \i TQTDSDriver
- \i LOGINREC* loginRecord, DBPROCESS* dbProcess, const TQString& hostName
- \i \c qsql_tds.cpp
- \row
- \i TQSQLITE
- \i TQSTQLiteDriver
- \i sqlite* connection
- \i \c qsql_sqlite.cpp
- \row
- \i TQIBASE
- \i TQIBaseDriver
- \i isc_db_handle connection
- \i \c qsql_ibase.cpp
- \endtable
-
- Note: The host name (or service name) is needed when constructing
- the TQTDSDriver for creating new connections for internal
- queries. This is to prevent the simultaneous usage of several
- TQSqlQuery/\l{TQSqlCursor} objects from blocking each other.
-
- \warning The SQL framework takes ownership of the \a driver pointer,
- and it should not be deleted. The returned TQSqlDatabase object is
- owned by the framework and must not be deleted. If you want to
- explicitly remove the connection, use removeDatabase()
-
- \sa drivers()
-*/
-
-TQSqlDatabase* TQSqlDatabase::addDatabase( TQSqlDriver* driver, const TQString& connectionName )
-{
- return TQSqlDatabaseManager::addDatabase( new TQSqlDatabase( driver ), connectionName );
-}
-#endif // TQT_NO_SQL