summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/sql
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/sql')
-rw-r--r--tqtinterface/qt4/src/sql/README.module37
-rw-r--r--tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp259
-rw-r--r--tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.h104
-rw-r--r--tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.cpp1078
-rw-r--r--tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.h117
-rw-r--r--tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.cpp775
-rw-r--r--tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.h131
-rw-r--r--tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.cpp2035
-rw-r--r--tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.h165
-rw-r--r--tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.cpp1117
-rw-r--r--tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.h131
-rw-r--r--tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.cpp513
-rw-r--r--tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.h90
-rw-r--r--tqtinterface/qt4/src/sql/qt_sql.pri254
-rw-r--r--tqtinterface/qt4/src/sql/tqdatabrowser.cpp1284
-rw-r--r--tqtinterface/qt4/src/sql/tqdatabrowser.h178
-rw-r--r--tqtinterface/qt4/src/sql/tqdatatable.cpp2322
-rw-r--r--tqtinterface/qt4/src/sql/tqdatatable.h245
-rw-r--r--tqtinterface/qt4/src/sql/tqdataview.cpp208
-rw-r--r--tqtinterface/qt4/src/sql/tqdataview.h91
-rw-r--r--tqtinterface/qt4/src/sql/tqeditorfactory.cpp192
-rw-r--r--tqtinterface/qt4/src/sql/tqeditorfactory.h76
-rw-r--r--tqtinterface/qt4/src/sql/tqsql.cpp114
-rw-r--r--tqtinterface/qt4/src/sql/tqsql.h100
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlcursor.cpp1549
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlcursor.h160
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldatabase.cpp1332
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldatabase.h156
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldriver.cpp509
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldriver.h126
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldriverinterface_p.h85
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldriverplugin.cpp161
-rw-r--r--tqtinterface/qt4/src/sql/tqsqldriverplugin.h73
-rw-r--r--tqtinterface/qt4/src/sql/tqsqleditorfactory.cpp221
-rw-r--r--tqtinterface/qt4/src/sql/tqsqleditorfactory.h77
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlerror.cpp228
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlerror.h93
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlextension_p.cpp169
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlextension_p.h148
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlfield.cpp563
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlfield.h154
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlform.cpp403
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlform.h109
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlindex.cpp301
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlindex.h99
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlmanager_p.cpp941
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlmanager_p.h163
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlpropertymap.cpp304
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlpropertymap.h78
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlquery.cpp1215
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlquery.h134
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlrecord.cpp774
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlrecord.h141
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlresult.cpp368
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlresult.h115
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlselectcursor.cpp249
-rw-r--r--tqtinterface/qt4/src/sql/tqsqlselectcursor.h104
57 files changed, 0 insertions, 22918 deletions
diff --git a/tqtinterface/qt4/src/sql/README.module b/tqtinterface/qt4/src/sql/README.module
deleted file mode 100644
index 511d90e..0000000
--- a/tqtinterface/qt4/src/sql/README.module
+++ /dev/null
@@ -1,37 +0,0 @@
-Before building the Qt library, the Qt SQL module can be enabled for
-specific databases using 'configure'. 'configure' is located at the
-top of your QTDIR.
-
-Specific databases drivers can be enabled using one of the following
-options:
-
- ./configure [-qt-sql-<driver>] [-plugin-sql-<driver>]
-
-or disabled using the following option:
-
- ./configure [-no-sql-<driver>]
-
-Where <driver> is the name of the driver, for example 'psql'. This
-will configure the Qt library to compile the specified driver into
-the Qt lib itself.
-
-For example, to build the PostgreSQL driver directly into the Qt
-library, configure Qt like this:
-
- ./configure -qt-sql-psql
-
-In addition, you may need to specify an extra include path, as some
-database drivers require headers for the database they are using,
-for example:
-
- ./configure -qt-sql-psql -I/usr/local/include
-
-If instead you need to build the PostgreSQL driver as a dynamically
-loaded plugin, configure Qt like this:
-
- ./configure -plugin-sql-psql
-
-To compile drivers as dynamically loaded plugins, see the
-QTDIR/plugins/src/sqldrivers directory. Use 'configure -help'
-for a complete list of configure options. See the Qt documentation
-for a complete list of supported database drivers.
diff --git a/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp b/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp
deleted file mode 100644
index 39195e9..0000000
--- a/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Implementation of cached TQt SQL result classes
-**
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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 "tqsqlcachedresult.h"
-#include <tqdatetime.h>
-
-#ifndef TQT_NO_SQL
-static const uint initial_cache_size = 128;
-
-class TQtSqlCachedResultPrivate
-{
-public:
- TQtSqlCachedResultPrivate();
- bool seek(int i);
- void init(int count, bool fo);
- void cleanup();
- TQtSqlCachedResult::RowCache* next();
- void revertLast();
-
- TQtSqlCachedResult::RowsetCache *cache;
- TQtSqlCachedResult::RowCache *current;
- int rowCacheEnd;
- int colCount;
- bool forwardOnly;
-};
-
-TQtSqlCachedResultPrivate::TQtSqlCachedResultPrivate():
- cache(0), current(0), rowCacheEnd(0), colCount(0), forwardOnly(FALSE)
-{
-}
-
-void TQtSqlCachedResultPrivate::cleanup()
-{
- if (cache) {
- for (int i = 0; i < rowCacheEnd; ++i)
- delete (*cache)[i];
- delete cache;
- cache = 0;
- }
- if (forwardOnly)
- delete current;
- current = 0;
- forwardOnly = FALSE;
- colCount = 0;
- rowCacheEnd = 0;
-}
-
-void TQtSqlCachedResultPrivate::init(int count, bool fo)
-{
- cleanup();
- forwardOnly = fo;
- colCount = count;
- if (fo)
- current = new TQtSqlCachedResult::RowCache(count);
- else
- cache = new TQtSqlCachedResult::RowsetCache(initial_cache_size);
-}
-
-TQtSqlCachedResult::RowCache *TQtSqlCachedResultPrivate::next()
-{
- if (forwardOnly)
- return current;
-
- TQ_ASSERT(cache);
- current = new TQtSqlCachedResult::RowCache(colCount);
- if (rowCacheEnd == (int)cache->size())
- cache->resize(cache->size() * 2);
- cache->insert(rowCacheEnd++, current);
- return current;
-}
-
-bool TQtSqlCachedResultPrivate::seek(int i)
-{
- if (forwardOnly || i < 0)
- return FALSE;
- if (i >= rowCacheEnd)
- return FALSE;
- current = (*cache)[i];
- return TRUE;
-}
-
-void TQtSqlCachedResultPrivate::revertLast()
-{
- if (forwardOnly)
- return;
- --rowCacheEnd;
- delete current;
- current = 0;
-}
-
-//////////////
-
-TQtSqlCachedResult::TQtSqlCachedResult(const TQSqlDriver * db ): TQSqlResult ( db )
-{
- d = new TQtSqlCachedResultPrivate();
-}
-
-TQtSqlCachedResult::~TQtSqlCachedResult()
-{
- delete d;
-}
-
-void TQtSqlCachedResult::init(int colCount)
-{
- d->init(colCount, isForwardOnly());
-}
-
-bool TQtSqlCachedResult::fetch(int i)
-{
- if ((!isActive()) || (i < 0))
- return FALSE;
- if (at() == i)
- return TRUE;
- if (d->forwardOnly) {
- // speed hack - do not copy values if not needed
- if (at() > i || at() == TQSql::AfterLast)
- return FALSE;
- while(at() < i - 1) {
- if (!gotoNext(0))
- return FALSE;
- setAt(at() + 1);
- }
- if (!gotoNext(d->current))
- return FALSE;
- setAt(at() + 1);
- return TRUE;
- }
- if (d->seek(i)) {
- setAt(i);
- return TRUE;
- }
- setAt(d->rowCacheEnd - 1);
- while (at() < i) {
- if (!cacheNext())
- return FALSE;
- }
- return TRUE;
-}
-
-bool TQtSqlCachedResult::fetchNext()
-{
- if (d->seek(at() + 1)) {
- setAt(at() + 1);
- return TRUE;
- }
- return cacheNext();
-}
-
-bool TQtSqlCachedResult::fetchPrev()
-{
- return fetch(at() - 1);
-}
-
-bool TQtSqlCachedResult::fetchFirst()
-{
- if (d->forwardOnly && at() != TQSql::BeforeFirst) {
- return FALSE;
- }
- if (d->seek(0)) {
- setAt(0);
- return TRUE;
- }
- return cacheNext();
-}
-
-bool TQtSqlCachedResult::fetchLast()
-{
- if (at() == TQSql::AfterLast) {
- if (d->forwardOnly)
- return FALSE;
- else
- return fetch(d->rowCacheEnd - 1);
- }
-
- int i = at();
- while (fetchNext())
- i++; /* brute force */
- if (d->forwardOnly && at() == TQSql::AfterLast) {
- setAt(i);
- return TRUE;
- } else {
- return fetch(d->rowCacheEnd - 1);
- }
-}
-
-TQVariant TQtSqlCachedResult::data(int i)
-{
- if (!d->current || i >= (int)d->current->size() || i < 0)
- return TQVariant();
-
- return (*d->current)[i];
-}
-
-bool TQtSqlCachedResult::isNull(int i)
-{
- if (!d->current || i >= (int)d->current->size() || i < 0)
- return TRUE;
-
- return (*d->current)[i].isNull();
-}
-
-void TQtSqlCachedResult::cleanup()
-{
- setAt(TQSql::BeforeFirst);
- setActive(FALSE);
- d->cleanup();
-}
-
-bool TQtSqlCachedResult::cacheNext()
-{
- if (!gotoNext(d->next())) {
- d->revertLast();
- return FALSE;
- }
- setAt(at() + 1);
- return TRUE;
-}
-
-int TQtSqlCachedResult::colCount() const
-{
- return d->colCount;
-}
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.h b/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.h
deleted file mode 100644
index c066770..0000000
--- a/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Definition of shared TQt SQL module classes
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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.
-**
-**********************************************************************/
-
-#ifndef TQSQLCACHEDRESULT_H
-#define TQSQLCACHEDRESULT_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the TQt API. It exists for the convenience
-// of other TQt classes. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-//
-
-#include <tqglobal.h>
-#include <tqvariant.h>
-#include <tqptrvector.h>
-#include <tqvaluevector.h>
-#include <tqsqlresult.h>
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQtSqlCachedResultPrivate;
-
-class TQM_EXPORT_SQL TQtSqlCachedResult: public TQSqlResult
-{
-public:
- virtual ~TQtSqlCachedResult();
-
- typedef TQValueVector<TQVariant> RowCache;
- typedef TQPtrVector<RowCache> RowsetCache;
-
-protected:
- TQtSqlCachedResult(const TQSqlDriver * db);
-
- void init(int colCount);
- void cleanup();
- bool cacheNext();
-
- virtual bool gotoNext(RowCache* row) = 0;
-
- TQVariant data(int i);
- bool isNull(int i);
- bool fetch(int i);
- bool fetchNext();
- bool fetchPrev();
- bool fetchFirst();
- bool fetchLast();
-
- int colCount() const;
-
-private:
- TQtSqlCachedResultPrivate *d;
-};
-
-
-#endif
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.cpp b/tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.cpp
deleted file mode 100644
index 735363c..0000000
--- a/tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.cpp
+++ /dev/null
@@ -1,1078 +0,0 @@
-/****************************************************************************
-**
-** Implementation of Interbase driver classes.
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the sql module of the TQt GUI Toolkit.
-** EDITIONS: FREE, ENTERPRISE
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-****************************************************************************/
-
-#include "tqsql_ibase.h"
-
-#include <tqdatetime.h>
-#include <private/tqsqlextension_p.h>
-
-#include <ibase.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <math.h>
-
-#define TQIBASE_DRIVER_NAME "TQIBASE"
-
-class TQIBasePreparedExtension : public TQSqlExtension
-{
-public:
- TQIBasePreparedExtension(TQIBaseResult *r)
- : result(r) {}
-
- bool prepare(const TQString &query)
- {
- return result->prepare(query);
- }
-
- bool exec()
- {
- return result->exec();
- }
-
- TQIBaseResult *result;
-};
-
-static bool getIBaseError(TQString& msg, ISC_STATUS* status, long &sqlcode)
-{
- if (status[0] != 1 || status[1] <= 0)
- return FALSE;
-
- sqlcode = isc_sqlcode(status);
- char buf[512];
- isc_sql_interprete(sqlcode, buf, 512);
- msg = TQString::fromUtf8(buf);
- return TRUE;
-}
-
-static void createDA(XSTQLDA *&sqlda)
-{
- sqlda = (XSTQLDA *) malloc(XSTQLDA_LENGTH(1));
- sqlda->sqln = 1;
- sqlda->sqld = 0;
- sqlda->version = STQLDA_VERSION1;
- sqlda->sqlvar[0].sqlind = 0;
- sqlda->sqlvar[0].sqldata = 0;
-}
-
-static void enlargeDA(XSTQLDA *&sqlda, int n)
-{
- free(sqlda);
- sqlda = (XSTQLDA *) malloc(XSTQLDA_LENGTH(n));
- sqlda->sqln = n;
- sqlda->version = STQLDA_VERSION1;
-}
-
-static void initDA(XSTQLDA *sqlda)
-{
- for (int i = 0; i < sqlda->sqld; ++i) {
- switch (sqlda->sqlvar[i].sqltype & ~1) {
- case STQL_INT64:
- case STQL_LONG:
- case STQL_SHORT:
- case STQL_FLOAT:
- case STQL_DOUBLE:
- case STQL_TIMESTAMP:
- case STQL_TYPE_TIME:
- case STQL_TYPE_DATE:
- case STQL_TEXT:
- case STQL_BLOB:
- sqlda->sqlvar[i].sqldata = (char*)malloc(sqlda->sqlvar[i].sqllen);
- break;
- case STQL_VARYING:
- sqlda->sqlvar[i].sqldata = (char*)malloc(sqlda->sqlvar[i].sqllen + sizeof(short));
- break;
- default:
- // not supported - do not bind.
- sqlda->sqlvar[i].sqldata = 0;
- break;
- }
- if (sqlda->sqlvar[i].sqltype & 1) {
- sqlda->sqlvar[i].sqlind = (short*)malloc(sizeof(short));
- *(sqlda->sqlvar[i].sqlind) = 0;
- } else {
- sqlda->sqlvar[i].sqlind = 0;
- }
- }
-}
-
-static void delDA(XSTQLDA *&sqlda)
-{
- if (!sqlda)
- return;
- for (int i = 0; i < sqlda->sqld; ++i) {
- free(sqlda->sqlvar[i].sqlind);
- free(sqlda->sqlvar[i].sqldata);
- }
- free(sqlda);
- sqlda = 0;
-}
-
-static TQVariant::Type qIBaseTypeName(int iType)
-{
- switch (iType) {
- case blr_varying:
- case blr_varying2:
- case blr_text:
- case blr_cstring:
- case blr_cstring2:
- return TQVariant::String;
- case blr_sql_time:
- return TQVariant::Time;
- case blr_sql_date:
- return TQVariant::Date;
- case blr_timestamp:
- return TQVariant::DateTime;
- case blr_blob:
- return TQVariant::ByteArray;
- case blr_quad:
- case blr_short:
- case blr_long:
- return TQVariant::Int;
- case blr_int64:
- return TQVariant::LongLong;
- case blr_float:
- case blr_d_float:
- case blr_double:
- return TQVariant::Double;
- }
- return TQVariant::Invalid;
-}
-
-static TQVariant::Type qIBaseTypeName2(int iType)
-{
- switch(iType & ~1) {
- case STQL_VARYING:
- case STQL_TEXT:
- return TQVariant::String;
- case STQL_LONG:
- case STQL_SHORT:
- return TQVariant::Int;
- case STQL_INT64:
- return TQVariant::LongLong;
- case STQL_FLOAT:
- case STQL_DOUBLE:
- return TQVariant::Double;
- case STQL_TIMESTAMP:
- return TQVariant::DateTime;
- case STQL_TYPE_DATE:
- return TQVariant::Date;
- case STQL_TYPE_TIME:
- return TQVariant::Time;
- default:
- return TQVariant::Invalid;
- }
-}
-
-static ISC_TIME toTime(const TQTime &t)
-{
- static const TQTime midnight(0, 0, 0, 0);
- return (ISC_TIME)midnight.msecsTo(t) * 10;
-}
-
-static ISC_DATE toDate(const TQDate &d)
-{
- static const TQDate basedate(1858, 11, 17);
- return (ISC_DATE)basedate.daysTo(d);
-}
-
-static ISC_TIMESTAMP toTimeStamp(const TQDateTime &dt)
-{
- ISC_TIMESTAMP ts;
- ts.timestamp_time = toTime(dt.time());
- ts.timestamp_date = toDate(dt.date());
- return ts;
-}
-
-static TQTime toTQTime(ISC_TIME time)
-{
- // have to demangle the structure ourselves because isc_decode_time
- // strips the msecs
- static const TQTime t;
- return t.addMSecs(time / 10);
-}
-
-static TQDate toTQDate(ISC_DATE d)
-{
- static const TQDate bd(1858, 11, 17);
- return bd.addDays(d);
-}
-
-static TQDateTime toTQDateTime(ISC_TIMESTAMP *ts)
-{
- return TQDateTime(toTQDate(ts->timestamp_date), toTQTime(ts->timestamp_time));
-}
-
-class TQIBaseDriverPrivate
-{
-public:
- TQIBaseDriverPrivate(TQIBaseDriver *d): q(d)
- {
- ibase = 0;
- trans = 0;
- }
-
- bool isError(const TQString &msg = TQString::null, TQSqlError::Type typ = TQSqlError::Unknown)
- {
- TQString imsg;
- long sqlcode;
- if (!getIBaseError(imsg, status, sqlcode))
- return FALSE;
-
- q->setLastError(TQSqlError(msg, imsg, typ, (int)sqlcode));
- return TRUE;
- }
-
-public:
- TQIBaseDriver* q;
- isc_db_handle ibase;
- isc_tr_handle trans;
- ISC_STATUS status[20];
-};
-
-class TQIBaseResultPrivate
-{
-public:
- TQIBaseResultPrivate(TQIBaseResult *d, const TQIBaseDriver *ddb);
- ~TQIBaseResultPrivate() { cleanup(); }
-
- void cleanup();
- bool isError(const TQString &msg = TQString::null, TQSqlError::Type typ = TQSqlError::Unknown)
- {
- TQString imsg;
- long sqlcode;
- if (!getIBaseError(imsg, status, sqlcode))
- return FALSE;
-
- q->setLastError(TQSqlError(msg, imsg, typ, (int)sqlcode));
- return TRUE;
- }
-
- bool transaction();
- bool commit();
-
- bool isSelect();
- TQVariant fetchBlob(ISC_TQUAD *bId);
- void writeBlob(int i, const TQByteArray &ba);
-
-public:
- TQIBaseResult *q;
- const TQIBaseDriver *db;
- ISC_STATUS status[20];
- isc_tr_handle trans;
- //indicator whether we have a local transaction or a transaction on driver level
- bool localTransaction;
- isc_stmt_handle stmt;
- isc_db_handle ibase;
- XSTQLDA *sqlda; // output sqlda
- XSTQLDA *inda; // input parameters
- int queryType;
-};
-
-TQIBaseResultPrivate::TQIBaseResultPrivate(TQIBaseResult *d, const TQIBaseDriver *ddb):
- q(d), db(ddb), trans(0), stmt(0), ibase(ddb->d->ibase), sqlda(0), inda(0), queryType(-1)
-{
- localTransaction = (ddb->d->ibase == 0);
-}
-
-void TQIBaseResultPrivate::cleanup()
-{
- if (stmt) {
- isc_dsql_free_statement(status, &stmt, DSTQL_drop);
- stmt = 0;
- }
-
- commit();
- if (!localTransaction)
- trans = 0;
-
- delDA(sqlda);
- delDA(inda);
-
- queryType = -1;
- q->cleanup();
-}
-
-void TQIBaseResultPrivate::writeBlob(int i, const TQByteArray &ba)
-{
- isc_blob_handle handle = 0;
- ISC_TQUAD *bId = (ISC_TQUAD*)inda->sqlvar[i].sqldata;
- isc_create_blob2(status, &ibase, &trans, &handle, bId, 0, 0);
- if (!isError("Unable to create BLOB", TQSqlError::Statement)) {
- uint i = 0;
- while (i < ba.size()) {
- isc_put_segment(status, &handle, TQMIN(ba.size() - i, SHRT_MAX), ba.data());
- if (isError("Unable to write BLOB"))
- break;
- i += SHRT_MAX;
- }
- }
- isc_close_blob(status, &handle);
-}
-
-TQVariant TQIBaseResultPrivate::fetchBlob(ISC_TQUAD *bId)
-{
- isc_blob_handle handle = 0;
-
- isc_open_blob2(status, &ibase, &trans, &handle, bId, 0, 0);
- if (isError("Unable to open BLOB", TQSqlError::Statement))
- return TQVariant();
-
- unsigned short len = 0;
- TQByteArray ba(255);
- ISC_STATUS stat = isc_get_segment(status, &handle, &len, ba.size(), ba.data());
- while (status[1] == isc_segment) {
- uint osize = ba.size();
- // double the amount of data fetched on each iteration
- ba.resize(TQMIN(ba.size() * 2, SHRT_MAX));
- stat = isc_get_segment(status, &handle, &len, osize, ba.data() + osize);
- }
- bool isErr = isError("Unable to read BLOB", TQSqlError::Statement);
- isc_close_blob(status, &handle);
- if (isErr)
- return TQVariant();
-
- if (ba.size() > 255)
- ba.resize(ba.size() / 2 + len);
- else
- ba.resize(len);
-
- return ba;
-}
-
-bool TQIBaseResultPrivate::isSelect()
-{
- char acBuffer[9];
- char qType = isc_info_sql_stmt_type;
- isc_dsql_sql_info(status, &stmt, 1, &qType, sizeof(acBuffer), acBuffer);
- if (isError("Could not get query info", TQSqlError::Statement))
- return FALSE;
- int iLength = isc_vax_integer(&acBuffer[1], 2);
- queryType = isc_vax_integer(&acBuffer[3], iLength);
- return (queryType == isc_info_sql_stmt_select);
-}
-
-bool TQIBaseResultPrivate::transaction()
-{
- if (trans)
- return TRUE;
- if (db->d->trans) {
- localTransaction = FALSE;
- trans = db->d->trans;
- return TRUE;
- }
- localTransaction = TRUE;
-
- isc_start_transaction(status, &trans, 1, &ibase, 0, NULL);
- if (isError("Could not start transaction", TQSqlError::Statement))
- return FALSE;
-
- return TRUE;
-}
-
-// does nothing if the transaction is on the
-// driver level
-bool TQIBaseResultPrivate::commit()
-{
- if (!trans)
- return FALSE;
- // don't commit driver's transaction, the driver will do it for us
- if (!localTransaction)
- return TRUE;
-
- isc_commit_transaction(status, &trans);
- trans = 0;
- return !isError("Unable to commit transaction", TQSqlError::Statement);
-}
-
-//////////
-
-TQIBaseResult::TQIBaseResult(const TQIBaseDriver* db):
- TQtSqlCachedResult(db)
-{
- d = new TQIBaseResultPrivate(this, db);
- setExtension(new TQIBasePreparedExtension(this));
-}
-
-TQIBaseResult::~TQIBaseResult()
-{
- delete d;
-}
-
-bool TQIBaseResult::prepare(const TQString& query)
-{
- //qDebug("prepare: %s", query.ascii());
- if (!driver() || !driver()->isOpen() || driver()->isOpenError())
- return FALSE;
- d->cleanup();
- setActive(FALSE);
- setAt(TQSql::BeforeFirst);
-
- createDA(d->sqlda);
- createDA(d->inda);
-
- if (!d->transaction())
- return FALSE;
-
- isc_dsql_allocate_statement(d->status, &d->ibase, &d->stmt);
- if (d->isError("Could not allocate statement", TQSqlError::Statement))
- return FALSE;
- isc_dsql_prepare(d->status, &d->trans, &d->stmt, 0, query.utf8().data(), 3, d->sqlda);
- if (d->isError("Could not prepare statement", TQSqlError::Statement))
- return FALSE;
-
- isc_dsql_describe_bind(d->status, &d->stmt, 1, d->inda);
- if (d->isError("Could not describe input statement", TQSqlError::Statement))
- return FALSE;
- if (d->inda->sqld > d->inda->sqln) {
- enlargeDA(d->inda, d->inda->sqld);
-
- isc_dsql_describe_bind(d->status, &d->stmt, 1, d->inda);
- if (d->isError("Could not describe input statement", TQSqlError::Statement))
- return FALSE;
- }
- initDA(d->inda);
- if (d->sqlda->sqld > d->sqlda->sqln) {
- // need more field descriptors
- enlargeDA(d->sqlda, d->sqlda->sqld);
-
- isc_dsql_describe(d->status, &d->stmt, 1, d->sqlda);
- if (d->isError("Could not describe statement", TQSqlError::Statement))
- return FALSE;
- }
- initDA(d->sqlda);
-
- setSelect(d->isSelect());
- if (!isSelect()) {
- free(d->sqlda);
- d->sqlda = 0;
- }
-
- return TRUE;
-}
-
-bool TQIBaseResult::exec()
-{
- if (!driver() || !driver()->isOpen() || driver()->isOpenError())
- return FALSE;
- setActive(FALSE);
- setAt(TQSql::BeforeFirst);
-
- if (d->inda && extension()->index.count() > 0) {
- TQMap<int, TQString>::ConstIterator it;
- if ((int)extension()->index.count() > d->inda->sqld) {
- qWarning("TQIBaseResult::exec: Parameter mismatch, expected %d, got %d parameters", d->inda->sqld, extension()->index.count());
- return FALSE;
- }
- int para = 0;
- for (it = extension()->index.constBegin(); it != extension()->index.constEnd(); ++it, ++para) {
- if (para >= d->inda->sqld)
- break;
- if (!d->inda->sqlvar[para].sqldata)
- continue;
- const TQVariant val(extension()->values[it.data()].value);
- if (d->inda->sqlvar[para].sqltype & 1) {
- if (val.isNull()) {
- // set null indicator
- *(d->inda->sqlvar[para].sqlind) = 1;
- // and set the value to 0, otherwise it would count as empty string.
- *((short*)d->inda->sqlvar[para].sqldata) = 0;
- continue;
- }
- // a value of 0 means non-null.
- *(d->inda->sqlvar[para].sqlind) = 0;
- }
- switch(d->inda->sqlvar[para].sqltype & ~1) {
- case STQL_INT64:
- if (d->inda->sqlvar[para].sqlscale < 0)
- *((TQ_LLONG*)d->inda->sqlvar[para].sqldata) = TQ_LLONG(val.toDouble() *
- pow(10.0, d->inda->sqlvar[para].sqlscale * -1));
- else
- *((TQ_LLONG*)d->inda->sqlvar[para].sqldata) = val.toLongLong();
- break;
- case STQL_LONG:
- *((long*)d->inda->sqlvar[para].sqldata) = (long)val.toLongLong();
- break;
- case STQL_SHORT:
- *((short*)d->inda->sqlvar[para].sqldata) = (short)val.toInt();
- break;
- case STQL_FLOAT:
- *((float*)d->inda->sqlvar[para].sqldata) = (float)val.toDouble();
- break;
- case STQL_DOUBLE:
- *((double*)d->inda->sqlvar[para].sqldata) = val.toDouble();
- break;
- case STQL_TIMESTAMP:
- *((ISC_TIMESTAMP*)d->inda->sqlvar[para].sqldata) = toTimeStamp(val.toDateTime());
- break;
- case STQL_TYPE_TIME:
- *((ISC_TIME*)d->inda->sqlvar[para].sqldata) = toTime(val.toTime());
- break;
- case STQL_TYPE_DATE:
- *((ISC_DATE*)d->inda->sqlvar[para].sqldata) = toDate(val.toDate());
- break;
- case STQL_VARYING: {
- TQCString str(val.toString().utf8()); // keep a copy of the string alive in this scope
- short buflen = d->inda->sqlvar[para].sqllen;
- if (str.length() < (uint)buflen)
- buflen = str.length();
- *(short*)d->inda->sqlvar[para].sqldata = buflen; // first two bytes is the length
- memcpy(d->inda->sqlvar[para].sqldata + sizeof(short), str.data(), buflen);
- break; }
- case STQL_TEXT: {
- TQCString str(val.toString().utf8().leftJustify(d->inda->sqlvar[para].sqllen, ' ', TRUE));
- memcpy(d->inda->sqlvar[para].sqldata, str.data(), d->inda->sqlvar[para].sqllen);
- break; }
- case STQL_BLOB:
- d->writeBlob(para, val.toByteArray());
- break;
- default:
- break;
- }
- }
- }
-
- if (colCount()) {
- isc_dsql_free_statement(d->status, &d->stmt, DSTQL_close);
- if (d->isError("Unable to close statement"))
- return FALSE;
- cleanup();
- }
- if (d->sqlda)
- init(d->sqlda->sqld);
- isc_dsql_execute2(d->status, &d->trans, &d->stmt, 1, d->inda, 0);
- if (d->isError("Unable to execute query"))
- return FALSE;
-
- setActive(TRUE);
- return TRUE;
-}
-
-bool TQIBaseResult::reset (const TQString& query)
-{
-// qDebug("reset: %s", query.ascii());
- if (!driver() || !driver()->isOpen() || driver()->isOpenError())
- return FALSE;
- d->cleanup();
- setActive(FALSE);
- setAt(TQSql::BeforeFirst);
-
- createDA(d->sqlda);
-
- if (!d->transaction())
- return FALSE;
-
- isc_dsql_allocate_statement(d->status, &d->ibase, &d->stmt);
- if (d->isError("Could not allocate statement", TQSqlError::Statement))
- return FALSE;
- isc_dsql_prepare(d->status, &d->trans, &d->stmt, 0, query.utf8().data(), 3, d->sqlda);
- if (d->isError("Could not prepare statement", TQSqlError::Statement))
- return FALSE;
-
- if (d->sqlda->sqld > d->sqlda->sqln) {
- // need more field descriptors
- int n = d->sqlda->sqld;
- free(d->sqlda);
- d->sqlda = (XSTQLDA *) malloc(XSTQLDA_LENGTH(n));
- d->sqlda->sqln = n;
- d->sqlda->version = STQLDA_VERSION1;
-
- isc_dsql_describe(d->status, &d->stmt, 1, d->sqlda);
- if (d->isError("Could not describe statement", TQSqlError::Statement))
- return FALSE;
- }
-
- initDA(d->sqlda);
-
- setSelect(d->isSelect());
- if (isSelect()) {
- init(d->sqlda->sqld);
- } else {
- free(d->sqlda);
- d->sqlda = 0;
- }
-
- isc_dsql_execute(d->status, &d->trans, &d->stmt, 1, 0);
- if (d->isError("Unable to execute query"))
- return FALSE;
-
- // commit non-select queries (if they are local)
- if (!isSelect() && !d->commit())
- return FALSE;
-
- setActive(TRUE);
- return TRUE;
-}
-
-bool TQIBaseResult::gotoNext(TQtSqlCachedResult::RowCache* row)
-{
- ISC_STATUS stat = isc_dsql_fetch(d->status, &d->stmt, 1, d->sqlda);
-
- if (stat == 100) {
- // no more rows
- setAt(TQSql::AfterLast);
- return FALSE;
- }
- if (d->isError("Could not fetch next item", TQSqlError::Statement))
- return FALSE;
- if (!row) // not interested in actual values
- return TRUE;
-
- TQ_ASSERT(row);
- TQ_ASSERT((int)row->size() == d->sqlda->sqld);
- for (int i = 0; i < d->sqlda->sqld; ++i) {
- char *buf = d->sqlda->sqlvar[i].sqldata;
- int size = d->sqlda->sqlvar[i].sqllen;
- TQ_ASSERT(buf);
-
- if ((d->sqlda->sqlvar[i].sqltype & 1) && *d->sqlda->sqlvar[i].sqlind) {
- // null value
- TQVariant v;
- v.cast(qIBaseTypeName2(d->sqlda->sqlvar[i].sqltype));
- (*row)[i] = v;
- continue;
- }
-
- switch(d->sqlda->sqlvar[i].sqltype & ~1) {
- case STQL_VARYING:
- // pascal strings - a short with a length information followed by the data
- (*row)[i] = TQString::fromUtf8(buf + sizeof(short), *(short*)buf);
- break;
- case STQL_INT64:
- if (d->sqlda->sqlvar[i].sqlscale < 0)
- (*row)[i] = *(TQ_LLONG*)buf * pow(10.0, d->sqlda->sqlvar[i].sqlscale);
- else
- (*row)[i] = TQVariant(*(TQ_LLONG*)buf);
- break;
- case STQL_LONG:
- if (sizeof(int) == sizeof(long)) //dear compiler: please optimize me out.
- (*row)[i] = TQVariant((int)(*(long*)buf));
- else
- (*row)[i] = TQVariant((TQ_LLONG)(*(long*)buf));
- break;
- case STQL_SHORT:
- (*row)[i] = TQVariant((int)(*(short*)buf));
- break;
- case STQL_FLOAT:
- (*row)[i] = TQVariant((double)(*(float*)buf));
- break;
- case STQL_DOUBLE:
- (*row)[i] = TQVariant(*(double*)buf);
- break;
- case STQL_TIMESTAMP:
- (*row)[i] = toTQDateTime((ISC_TIMESTAMP*)buf);
- break;
- case STQL_TYPE_TIME:
- (*row)[i] = toTQTime(*(ISC_TIME*)buf);
- break;
- case STQL_TYPE_DATE:
- (*row)[i] = toTQDate(*(ISC_DATE*)buf);
- break;
- case STQL_TEXT:
- (*row)[i] = TQString::fromUtf8(buf, size);
- break;
- case STQL_BLOB:
- (*row)[i] = d->fetchBlob((ISC_TQUAD*)buf);
- break;
- default:
- // unknown type - don't even try to fetch
- (*row)[i] = TQVariant();
- break;
- }
- }
-
- return TRUE;
-}
-
-int TQIBaseResult::size()
-{
- static char sizeInfo[] = {isc_info_sql_records};
- char buf[33];
-
- if (!isActive() || !isSelect())
- return -1;
-
- isc_dsql_sql_info(d->status, &d->stmt, sizeof(sizeInfo), sizeInfo, sizeof(buf), buf);
- for (char* c = buf + 3; *c != isc_info_end; /*nothing*/) {
- char ct = *c++;
- short len = isc_vax_integer(c, 2);
- c += 2;
- int val = isc_vax_integer(c, len);
- c += len;
- if (ct == isc_info_req_select_count)
- return val;
- }
- return -1;
-}
-
-int TQIBaseResult::numRowsAffected()
-{
- static char acCountInfo[] = {isc_info_sql_records};
- char cCountType;
-
- switch (d->queryType) {
- case isc_info_sql_stmt_select:
- cCountType = isc_info_req_select_count;
- break;
- case isc_info_sql_stmt_update:
- cCountType = isc_info_req_update_count;
- break;
- case isc_info_sql_stmt_delete:
- cCountType = isc_info_req_delete_count;
- break;
- case isc_info_sql_stmt_insert:
- cCountType = isc_info_req_insert_count;
- break;
- }
-
- char acBuffer[33];
- int iResult = -1;
- isc_dsql_sql_info(d->status, &d->stmt, sizeof(acCountInfo), acCountInfo, sizeof(acBuffer), acBuffer);
- if (d->isError("Could not get statement info", TQSqlError::Statement))
- return -1;
- for (char *pcBuf = acBuffer + 3; *pcBuf != isc_info_end; /*nothing*/) {
- char cType = *pcBuf++;
- short sLength = isc_vax_integer (pcBuf, 2);
- pcBuf += 2;
- int iValue = isc_vax_integer (pcBuf, sLength);
- pcBuf += sLength;
-
- if (cType == cCountType) {
- iResult = iValue;
- break;
- }
- }
- return iResult;
-}
-
-/*********************************/
-
-TQIBaseDriver::TQIBaseDriver(TQObject * parent, const char * name)
- : TQSqlDriver(parent, name ? name : TQIBASE_DRIVER_NAME)
-{
- d = new TQIBaseDriverPrivate(this);
-}
-
-TQIBaseDriver::TQIBaseDriver(void *connection, TQObject *parent, const char *name)
- : TQSqlDriver(parent, name ? name : TQIBASE_DRIVER_NAME)
-{
- d = new TQIBaseDriverPrivate(this);
- d->ibase = (isc_db_handle)(long int)connection;
- setOpen(TRUE);
- setOpenError(FALSE);
-}
-
-TQIBaseDriver::~TQIBaseDriver()
-{
- delete d;
-}
-
-bool TQIBaseDriver::hasFeature(DriverFeature f) const
-{
- switch (f) {
- case Transactions:
-// case QuerySize:
- case PreparedQueries:
- case PositionalPlaceholders:
- case Unicode:
- case BLOB:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-bool TQIBaseDriver::open(const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString & host,
- int /*port*/,
- const TQString & /* connOpts */)
-{
- if (isOpen())
- close();
-
- static const char enc[8] = "UTF_FSS";
- TQCString usr = user.local8Bit();
- TQCString pass = password.local8Bit();
- usr.truncate(255);
- pass.truncate(255);
-
- TQByteArray ba(usr.length() + pass.length() + sizeof(enc) + 6);
- int i = -1;
- ba[++i] = isc_dpb_version1;
- ba[++i] = isc_dpb_user_name;
- ba[++i] = usr.length();
- memcpy(&ba[++i], usr.data(), usr.length());
- i += usr.length();
- ba[i] = isc_dpb_password;
- ba[++i] = pass.length();
- memcpy(&ba[++i], pass.data(), pass.length());
- i += pass.length();
- ba[i] = isc_dpb_lc_ctype;
- ba[++i] = sizeof(enc) - 1;
- memcpy(&ba[++i], enc, sizeof(enc) - 1);
- i += sizeof(enc) - 1;
-
- TQString ldb;
- if (!host.isEmpty())
- ldb += host + ":";
- ldb += db;
- isc_attach_database(d->status, 0, (char*)ldb.latin1(), &d->ibase, i, ba.data());
- if (d->isError("Error opening database", TQSqlError::Connection)) {
- setOpenError(TRUE);
- return FALSE;
- }
-
- setOpen(TRUE);
- return TRUE;
-}
-
-void TQIBaseDriver::close()
-{
- if (isOpen()) {
- isc_detach_database(d->status, &d->ibase);
- d->ibase = 0;
- setOpen(FALSE);
- setOpenError(FALSE);
- }
-}
-
-TQSqlQuery TQIBaseDriver::createQuery() const
-{
- return TQSqlQuery(new TQIBaseResult(this));
-}
-
-bool TQIBaseDriver::beginTransaction()
-{
- if (!isOpen() || isOpenError())
- return FALSE;
- if (d->trans)
- return FALSE;
-
- isc_start_transaction(d->status, &d->trans, 1, &d->ibase, 0, NULL);
- return !d->isError("Could not start transaction", TQSqlError::Transaction);
-}
-
-bool TQIBaseDriver::commitTransaction()
-{
- if (!isOpen() || isOpenError())
- return FALSE;
- if (!d->trans)
- return FALSE;
-
- isc_commit_transaction(d->status, &d->trans);
- d->trans = 0;
- return !d->isError("Unable to commit transaction", TQSqlError::Transaction);
-}
-
-bool TQIBaseDriver::rollbackTransaction()
-{
- if (!isOpen() || isOpenError())
- return FALSE;
- if (!d->trans)
- return FALSE;
-
- isc_rollback_transaction(d->status, &d->trans);
- d->trans = 0;
- return !d->isError("Unable to rollback transaction", TQSqlError::Transaction);
-}
-
-TQStringList TQIBaseDriver::tables(const TQString& typeName) const
-{
- TQStringList res;
- if (!isOpen())
- return res;
-
- int type = typeName.isEmpty() ? (int)TQSql::Tables | (int)TQSql::Views : typeName.toInt();
- TQString typeFilter;
-
- if (type == (int)TQSql::SystemTables) {
- typeFilter += "RDB$SYSTEM_FLAG != 0";
- } else if (type == ((int)TQSql::SystemTables | (int)TQSql::Views)) {
- typeFilter += "RDB$SYSTEM_FLAG != 0 OR RDB$VIEW_BLR NOT NULL";
- } else {
- if (!(type & (int)TQSql::SystemTables))
- typeFilter += "RDB$SYSTEM_FLAG = 0 AND ";
- if (!(type & (int)TQSql::Views))
- typeFilter += "RDB$VIEW_BLR IS NULL AND ";
- if (!(type & (int)TQSql::Tables))
- typeFilter += "RDB$VIEW_BLR IS NOT NULL AND ";
- if (!typeFilter.isEmpty())
- typeFilter.truncate(typeFilter.length() - 5);
- }
- if (!typeFilter.isEmpty())
- typeFilter.prepend("where ");
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
- if (!q.exec("select rdb$relation_name from rdb$relations " + typeFilter))
- return res;
- while(q.next())
- res << q.value(0).toString().stripWhiteSpace();
-
- return res;
-}
-
-TQSqlRecord TQIBaseDriver::record(const TQString& tablename) const
-{
- TQSqlRecord rec;
- if (!isOpen())
- return rec;
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
-
- q.exec("SELECT a.RDB$FIELD_NAME, b.RDB$FIELD_TYPE "
- "FROM RDB$RELATION_FIELDS a, RDB$FIELDS b "
- "WHERE b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE "
- "AND a.RDB$RELATION_NAME = '" + tablename.upper()+ "' "
- "ORDER BY RDB$FIELD_POSITION");
- while (q.next()) {
- TQSqlField field(q.value(0).toString().stripWhiteSpace(), qIBaseTypeName(q.value(1).toInt()));
- rec.append(field);
- }
-
- return rec;
-}
-
-TQSqlRecordInfo TQIBaseDriver::recordInfo(const TQString& tablename) const
-{
- TQSqlRecordInfo rec;
- if (!isOpen())
- return rec;
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
-
- q.exec("SELECT a.RDB$FIELD_NAME, b.RDB$FIELD_TYPE, b.RDB$FIELD_LENGTH, b.RDB$FIELD_SCALE, "
- "b.RDB$FIELD_PRECISION, a.RDB$NULL_FLAG "
- "FROM RDB$RELATION_FIELDS a, RDB$FIELDS b "
- "WHERE b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE "
- "AND a.RDB$RELATION_NAME = '" + tablename.upper() + "' "
- "ORDER BY a.RDB$FIELD_POSITION");
-
- while (q.next()) {
- TQVariant::Type type = qIBaseTypeName(q.value(1).toInt());
- TQSqlFieldInfo field(q.value(0).toString().stripWhiteSpace(), type, q.value(5).toInt(),
- q.value(2).toInt(), q.value(4).toInt(), TQVariant());
-
- rec.append(field);
- }
-
- return rec;
-}
-
-TQSqlIndex TQIBaseDriver::primaryIndex(const TQString &table) const
-{
- TQSqlIndex index(table);
- if (!isOpen())
- return index;
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
- q.exec("SELECT a.RDB$INDEX_NAME, b.RDB$FIELD_NAME, d.RDB$FIELD_TYPE "
- "FROM RDB$RELATION_CONSTRAINTS a, RDB$INDEX_SEGMENTS b, RDB$RELATION_FIELDS c, RDB$FIELDS d "
- "WHERE a.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' "
- "AND a.RDB$RELATION_NAME = '" + table.upper() + "' "
- "AND a.RDB$INDEX_NAME = b.RDB$INDEX_NAME "
- "AND c.RDB$RELATION_NAME = a.RDB$RELATION_NAME "
- "AND c.RDB$FIELD_NAME = b.RDB$FIELD_NAME "
- "AND d.RDB$FIELD_NAME = c.RDB$FIELD_SOURCE "
- "ORDER BY b.RDB$FIELD_POSITION");
-
- while (q.next()) {
- TQSqlField field(q.value(1).toString().stripWhiteSpace(), qIBaseTypeName(q.value(2).toInt()));
- index.append(field); //TODO: asc? desc?
- index.setName(q.value(0).toString());
- }
-
- return index;
-}
-
-TQSqlRecord TQIBaseDriver::record(const TQSqlQuery& query) const
-{
- TQSqlRecord rec;
- if (query.isActive() && query.driver() == this) {
- TQIBaseResult* result = (TQIBaseResult*)query.result();
- if (!result->d->sqlda)
- return rec;
- XSTQLVAR v;
- for (int i = 0; i < result->d->sqlda->sqld; ++i) {
- v = result->d->sqlda->sqlvar[i];
- TQSqlField f(TQString::tqfromLatin1(v.sqlname, v.sqlname_length).stripWhiteSpace(),
- qIBaseTypeName2(result->d->sqlda->sqlvar[i].sqltype));
- rec.append(f);
- }
- }
- return rec;
-}
-
-TQSqlRecordInfo TQIBaseDriver::recordInfo(const TQSqlQuery& query) const
-{
- TQSqlRecordInfo rec;
- if (query.isActive() && query.driver() == this) {
- TQIBaseResult* result = (TQIBaseResult*)query.result();
- if (!result->d->sqlda)
- return rec;
- XSTQLVAR v;
- for (int i = 0; i < result->d->sqlda->sqld; ++i) {
- v = result->d->sqlda->sqlvar[i];
- TQSqlFieldInfo f(TQString::tqfromLatin1(v.sqlname, v.sqlname_length).stripWhiteSpace(),
- qIBaseTypeName2(result->d->sqlda->sqlvar[i].sqltype),
- -1, v.sqllen, TQABS(v.sqlscale), TQVariant(), v.sqltype);
- rec.append(f);
- }
- }
- return rec;
-}
-
-TQString TQIBaseDriver::formatValue(const TQSqlField* field, bool trimStrings) const
-{
- switch (field->type()) {
- case TQVariant::DateTime: {
- TQDateTime datetime = field->value().toDateTime();
- if (datetime.isValid())
- return "'" + TQString::number(datetime.date().year()) + "-" +
- TQString::number(datetime.date().month()) + "-" +
- TQString::number(datetime.date().day()) + " " +
- TQString::number(datetime.time().hour()) + ":" +
- TQString::number(datetime.time().minute()) + ":" +
- TQString::number(datetime.time().second()) + "." +
- TQString::number(datetime.time().msec()).rightJustify(3, '0', TRUE) + "'";
- else
- return "NULL";
- }
- case TQVariant::Time: {
- TQTime time = field->value().toTime();
- if (time.isValid())
- return "'" + TQString::number(time.hour()) + ":" +
- TQString::number(time.minute()) + ":" +
- TQString::number(time.second()) + "." +
- TQString::number(time.msec()).rightJustify(3, '0', TRUE) + "'";
- else
- return "NULL";
- }
- case TQVariant::Date: {
- TQDate date = field->value().toDate();
- if (date.isValid())
- return "'" + TQString::number(date.year()) + "-" +
- TQString::number(date.month()) + "-" +
- TQString::number(date.day()) + "'";
- else
- return "NULL";
- }
- default:
- return TQSqlDriver::formatValue(field, trimStrings);
- }
-}
diff --git a/tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.h b/tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.h
deleted file mode 100644
index e720c1c..0000000
--- a/tqtinterface/qt4/src/sql/drivers/ibase/tqsql_ibase.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Definition of Interbase driver classes
-**
-** Created : 030911
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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.
-**
-**********************************************************************/
-
-#ifndef TQSQL_IBASE_H
-#define TQSQL_IBASE_H
-
-#include "tqsqlresult.h"
-#include "tqsqldriver.h"
-#include "../cache/tqsqlcachedresult.h"
-
-
-class TQIBaseDriverPrivate;
-class TQIBaseResultPrivate;
-class TQIBaseDriver;
-
-class TQIBaseResult : public TQtSqlCachedResult
-{
- friend class TQIBaseDriver;
- friend class TQIBaseResultPrivate;
-
-public:
- TQIBaseResult(const TQIBaseDriver* db);
- virtual ~TQIBaseResult();
-
- bool prepare(const TQString& query);
- bool exec();
-
-protected:
- bool gotoNext(TQtSqlCachedResult::RowCache* row);
- bool reset (const TQString& query);
- int size();
- int numRowsAffected();
-
-private:
- TQIBaseResultPrivate* d;
-};
-
-class TQIBaseDriver : public TQSqlDriver
-{
- friend class TQIBaseDriverPrivate;
- friend class TQIBaseResultPrivate;
- friend class TQIBaseResult;
-public:
- TQIBaseDriver(TQObject *parent = 0, const char *name = 0);
- TQIBaseDriver(void *connection, TQObject *parent = 0, const char *name = 0);
- virtual ~TQIBaseDriver();
- bool hasFeature(DriverFeature f) const;
- bool open(const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString & host,
- int port,
- const TQString & connOpts);
- bool open( const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString & host,
- int port ) { return open (db, user, password, host, port, TQString()); }
- void close();
- TQSqlQuery createQuery() const;
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
- TQStringList tables(const TQString& typeName) const;
-
- TQSqlRecord record(const TQString& tablename) const;
- TQSqlRecordInfo recordInfo(const TQString& tablename) const;
- TQSqlIndex primaryIndex(const TQString &table) const;
- TQSqlRecord record(const TQSqlQuery& query) const;
- TQSqlRecordInfo recordInfo(const TQSqlQuery& query) const;
-
- TQString formatValue(const TQSqlField* field, bool trimStrings) const;
-
-private:
- TQIBaseDriverPrivate* d;
-};
-
-
-#endif
-
diff --git a/tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.cpp b/tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.cpp
deleted file mode 100644
index 98cccb2..0000000
--- a/tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.cpp
+++ /dev/null
@@ -1,775 +0,0 @@
-/****************************************************************************
-**
-** Implementation of MYSQL driver classes
-**
-** Created : 001103
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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 "tqsql_mysql.h"
-#include <private/tqsqlextension_p.h>
-
-#include <tqdatetime.h>
-#include <tqvaluevector.h>
-#include <tqsqlrecord.h>
-
-#define TQMYSTQL_DRIVER_NAME "TQMYSQL3"
-
-#ifdef TQ_OS_WIN32
-// comment the next line out if you want to use MySQL/embedded on Win32 systems.
-// note that it will crash if you don't statically link to the mysql/e library!
-# define TQ_NO_MYSTQL_EMBEDDED
-#endif
-
-TQPtrDict<TQSqlOpenExtension> *qSqlOpenExtDict();
-
-static int qMySqlConnectionCount = 0;
-static bool qMySqlInitHandledByUser = FALSE;
-
-class TQMYSTQLOpenExtension : public TQSqlOpenExtension
-{
-public:
- TQMYSTQLOpenExtension( TQMYSTQLDriver *dri )
- : TQSqlOpenExtension(), driver(dri) {}
- ~TQMYSTQLOpenExtension() {}
-
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-
-private:
- TQMYSTQLDriver *driver;
-};
-
-bool TQMYSTQLOpenExtension::open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts )
-{
- return driver->open( db, user, password, host, port, connOpts );
-}
-
-class TQMYSTQLDriverPrivate
-{
-public:
- TQMYSTQLDriverPrivate() : mysql(0) {}
- MYSQL* mysql;
-};
-
-class TQMYSTQLResultPrivate : public TQMYSTQLDriverPrivate
-{
-public:
- TQMYSTQLResultPrivate() : TQMYSTQLDriverPrivate(), result(0) {}
- MYSTQL_RES* result;
- MYSTQL_ROW row;
- TQValueVector<TQVariant::Type> fieldTypes;
-};
-
-TQSqlError qMakeError( const TQString& err, int type, const TQMYSTQLDriverPrivate* p )
-{
- return TQSqlError(TQMYSTQL_DRIVER_NAME ": " + err, TQString(mysql_error( p->mysql )), type, mysql_errno( p->mysql ));
-}
-
-TQVariant::Type qDecodeMYSTQLType( int mysqltype, uint flags )
-{
- TQVariant::Type type;
- switch ( mysqltype ) {
- case FIELD_TYPE_TINY :
- case FIELD_TYPE_SHORT :
- case FIELD_TYPE_LONG :
- case FIELD_TYPE_INT24 :
- type = (flags & UNSIGNED_FLAG) ? TQVariant::UInt : TQVariant::Int;
- break;
- case FIELD_TYPE_YEAR :
- type = TQVariant::Int;
- break;
- case FIELD_TYPE_LONGLONG :
- type = (flags & UNSIGNED_FLAG) ? TQVariant::ULongLong : TQVariant::LongLong;
- break;
- case FIELD_TYPE_DECIMAL :
- case FIELD_TYPE_FLOAT :
- case FIELD_TYPE_DOUBLE :
- type = TQVariant::Double;
- break;
- case FIELD_TYPE_DATE :
- type = TQVariant::Date;
- break;
- case FIELD_TYPE_TIME :
- type = TQVariant::Time;
- break;
- case FIELD_TYPE_DATETIME :
- case FIELD_TYPE_TIMESTAMP :
- type = TQVariant::DateTime;
- break;
- case FIELD_TYPE_BLOB :
- case FIELD_TYPE_TINY_BLOB :
- case FIELD_TYPE_MEDIUM_BLOB :
- case FIELD_TYPE_LONG_BLOB :
- type = (flags & BINARY_FLAG) ? TQVariant::ByteArray : TQVariant::CString;
- break;
- default:
- case FIELD_TYPE_ENUM :
- case FIELD_TYPE_SET :
- case FIELD_TYPE_STRING :
- case FIELD_TYPE_VAR_STRING :
- type = TQVariant::String;
- break;
- }
- return type;
-}
-
-TQMYSTQLResult::TQMYSTQLResult( const TQMYSTQLDriver* db )
-: TQSqlResult( db )
-{
- d = new TQMYSTQLResultPrivate();
- d->mysql = db->d->mysql;
-}
-
-TQMYSTQLResult::~TQMYSTQLResult()
-{
- cleanup();
- delete d;
-}
-
-MYSTQL_RES* TQMYSTQLResult::result()
-{
- return d->result;
-}
-
-void TQMYSTQLResult::cleanup()
-{
- if ( d->result ) {
- mysql_free_result( d->result );
- }
- d->result = NULL;
- d->row = NULL;
- setAt( -1 );
- setActive( FALSE );
-}
-
-bool TQMYSTQLResult::fetch( int i )
-{
- if ( isForwardOnly() ) { // fake a forward seek
- if ( at() < i ) {
- int x = i - at();
- while ( --x && fetchNext() );
- return fetchNext();
- } else {
- return FALSE;
- }
- }
- if ( at() == i )
- return TRUE;
- mysql_data_seek( d->result, i );
- d->row = mysql_fetch_row( d->result );
- if ( !d->row )
- return FALSE;
- setAt( i );
- return TRUE;
-}
-
-bool TQMYSTQLResult::fetchNext()
-{
- d->row = mysql_fetch_row( d->result );
- if ( !d->row )
- return FALSE;
- setAt( at() + 1 );
- return TRUE;
-}
-
-bool TQMYSTQLResult::fetchLast()
-{
- if ( isForwardOnly() ) { // fake this since MySQL can't seek on forward only queries
- bool success = fetchNext(); // did we move at all?
- while ( fetchNext() );
- return success;
- }
- my_ulonglong numRows = mysql_num_rows( d->result );
- if ( !numRows )
- return FALSE;
- return fetch( numRows - 1 );
-}
-
-bool TQMYSTQLResult::fetchFirst()
-{
- if ( isForwardOnly() ) // again, fake it
- return fetchNext();
- return fetch( 0 );
-}
-
-TQVariant TQMYSTQLResult::data( int field )
-{
- if ( !isSelect() || field >= (int) d->fieldTypes.count() ) {
- qWarning( "TQMYSTQLResult::data: column %d out of range", field );
- return TQVariant();
- }
-
- TQString val( d->row[field] );
- switch ( d->fieldTypes.at( field ) ) {
- case TQVariant::LongLong:
- return TQVariant( val.toLongLong() );
- case TQVariant::ULongLong:
- return TQVariant( val.toULongLong() );
- case TQVariant::Int:
- return TQVariant( val.toInt() );
- case TQVariant::UInt:
- return TQVariant( val.toUInt() );
- case TQVariant::Double:
- return TQVariant( val.toDouble() );
- case TQVariant::Date:
- if ( val.isEmpty() ) {
- return TQVariant( TQDate() );
- } else {
- return TQVariant( TQDate::fromString( val, TQt::ISODate ) );
- }
- case TQVariant::Time:
- if ( val.isEmpty() ) {
- return TQVariant( TQTime() );
- } else {
- return TQVariant( TQTime::fromString( val, TQt::ISODate ) );
- }
- case TQVariant::DateTime:
- if ( val.isEmpty() )
- return TQVariant( TQDateTime() );
- if ( val.length() == 14u )
- // TIMESTAMPS have the format yyyyMMddhhmmss
- val.insert(4, "-").insert(7, "-").insert(10, 'T').insert(13, ':').insert(16, ':');
- return TQVariant( TQDateTime::fromString( val, TQt::ISODate ) );
- case TQVariant::ByteArray: {
- unsigned long* fl = mysql_fetch_lengths( d->result );
- TQByteArray ba;
- ba.duplicate( d->row[field], fl[field] );
- return TQVariant( ba );
- }
- default:
- case TQVariant::String:
- case TQVariant::CString:
- return TQVariant( val );
- }
-#ifdef TQT_CHECK_RANGE
- qWarning("TQMYSTQLResult::data: unknown data type");
-#endif
- return TQVariant();
-}
-
-bool TQMYSTQLResult::isNull( int field )
-{
- if ( d->row[field] == NULL )
- return TRUE;
- return FALSE;
-}
-
-bool TQMYSTQLResult::reset ( const TQString& query )
-{
- if ( !driver() )
- return FALSE;
- if ( !driver()-> isOpen() || driver()->isOpenError() )
- return FALSE;
- cleanup();
-
- const char *encQuery = query.ascii();
- if ( mysql_real_query( d->mysql, encQuery, tqstrlen(encQuery) ) ) {
- setLastError( qMakeError("Unable to execute query", TQSqlError::Statement, d ) );
- return FALSE;
- }
- if ( isForwardOnly() ) {
- if ( isActive() || isValid() ) // have to empty the results from previous query
- fetchLast();
- d->result = mysql_use_result( d->mysql );
- } else {
- d->result = mysql_store_result( d->mysql );
- }
- if ( !d->result && mysql_field_count( d->mysql ) > 0 ) {
- setLastError( qMakeError( "Unable to store result", TQSqlError::Statement, d ) );
- return FALSE;
- }
- int numFields = mysql_field_count( d->mysql );
- setSelect( !( numFields == 0) );
- d->fieldTypes.resize( numFields );
- if ( isSelect() ) {
- for( int i = 0; i < numFields; i++) {
- MYSTQL_FIELD* field = mysql_fetch_field_direct( d->result, i );
- if ( field->type == FIELD_TYPE_DECIMAL )
- d->fieldTypes[i] = TQVariant::String;
- else
- d->fieldTypes[i] = qDecodeMYSTQLType( field->type, field->flags );
- }
- }
- setActive( TRUE );
- return TRUE;
-}
-
-int TQMYSTQLResult::size()
-{
- return isSelect() ? (int)mysql_num_rows( d->result ) : -1;
-}
-
-int TQMYSTQLResult::numRowsAffected()
-{
- return (int)mysql_affected_rows( d->mysql );
-}
-
-/////////////////////////////////////////////////////////
-static void qServerEnd()
-{
-#ifndef TQ_NO_MYSTQL_EMBEDDED
-# if MYSTQL_VERSION_ID >= 40000
- mysql_server_end();
-# endif // MYSTQL_VERSION_ID
-#endif // TQ_NO_MYSTQL_EMBEDDED
-}
-
-static void qServerInit()
-{
-#ifndef TQ_NO_MYSTQL_EMBEDDED
-# if MYSTQL_VERSION_ID >= 40000
- if ( qMySqlInitHandledByUser || qMySqlConnectionCount > 1 )
- return;
-
- // this should only be called once
- // has no effect on client/server library
- // but is vital for the embedded lib
- if ( mysql_server_init( 0, 0, 0 ) ) {
-# ifdef TQT_CHECK_RANGE
- qWarning( "TQMYSTQLDriver::qServerInit: unable to start server." );
-# endif
- }
-
-# endif // MYSTQL_VERSION_ID
-#endif // TQ_NO_MYSTQL_EMBEDDED
-}
-
-TQMYSTQLDriver::TQMYSTQLDriver( TQObject * parent, const char * name )
- : TQSqlDriver( parent, name ? name : TQMYSTQL_DRIVER_NAME )
-{
- init();
- qServerInit();
-}
-
-/*!
- Create a driver instance with an already open connection handle.
-*/
-
-TQMYSTQLDriver::TQMYSTQLDriver( MYSQL * con, TQObject * parent, const char * name )
- : TQSqlDriver( parent, name ? name : TQMYSTQL_DRIVER_NAME )
-{
- init();
- if ( con ) {
- d->mysql = (MYSQL *) con;
- setOpen( TRUE );
- setOpenError( FALSE );
- if (qMySqlConnectionCount == 1)
- qMySqlInitHandledByUser = TRUE;
- } else {
- qServerInit();
- }
-}
-
-void TQMYSTQLDriver::init()
-{
- qSqlOpenExtDict()->insert( this, new TQMYSTQLOpenExtension(this) );
- d = new TQMYSTQLDriverPrivate();
- d->mysql = 0;
- qMySqlConnectionCount++;
-}
-
-TQMYSTQLDriver::~TQMYSTQLDriver()
-{
- qMySqlConnectionCount--;
- if (qMySqlConnectionCount == 0 && !qMySqlInitHandledByUser)
- qServerEnd();
-
- delete d;
- if ( !qSqlOpenExtDict()->isEmpty() ) {
- TQSqlOpenExtension *ext = qSqlOpenExtDict()->take( this );
- delete ext;
- }
-}
-
-bool TQMYSTQLDriver::hasFeature( DriverFeature f ) const
-{
- switch ( f ) {
- case Transactions:
-// CLIENT_TRANSACTION should be defined in all recent mysql client libs > 3.23.34
-#ifdef CLIENT_TRANSACTIONS
- if ( d->mysql ) {
- if ( ( d->mysql->server_capabilities & CLIENT_TRANSACTIONS ) == CLIENT_TRANSACTIONS )
- return TRUE;
- }
-#endif
- return FALSE;
- case QuerySize:
- return TRUE;
- case BLOB:
- return TRUE;
- case Unicode:
- return FALSE;
- default:
- return FALSE;
- }
-}
-
-bool TQMYSTQLDriver::open( const TQString&,
- const TQString&,
- const TQString&,
- const TQString&,
- int )
-{
- qWarning("TQMYSTQLDriver::open(): This version of open() is no longer supported." );
- return FALSE;
-}
-
-bool TQMYSTQLDriver::open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts )
-{
- if ( isOpen() )
- close();
-
- unsigned int optionFlags = 0;
-
- TQStringList raw = TQStringList::split( ';', connOpts );
- TQStringList opts;
- TQStringList::ConstIterator it;
-
- // extract the real options from the string
- for ( it = raw.begin(); it != raw.end(); ++it ) {
- TQString tmp( *it );
- int idx;
- if ( (idx = tmp.find( '=' )) != -1 ) {
- TQString val( tmp.mid( idx + 1 ) );
- val.simplifyWhiteSpace();
- if ( val == "TRUE" || val == "1" )
- opts << tmp.left( idx );
- else
- qWarning( "TQMYSTQLDriver::open: Illegal connect option value '%s'", tmp.latin1() );
- } else {
- opts << tmp;
- }
- }
-
- for ( it = opts.begin(); it != opts.end(); ++it ) {
- TQString opt( (*it).upper() );
- if ( opt == "CLIENT_COMPRESS" )
- optionFlags |= CLIENT_COMPRESS;
- else if ( opt == "CLIENT_FOUND_ROWS" )
- optionFlags |= CLIENT_FOUND_ROWS;
- else if ( opt == "CLIENT_IGNORE_SPACE" )
- optionFlags |= CLIENT_IGNORE_SPACE;
- else if ( opt == "CLIENT_INTERACTIVE" )
- optionFlags |= CLIENT_INTERACTIVE;
- else if ( opt == "CLIENT_NO_SCHEMA" )
- optionFlags |= CLIENT_NO_SCHEMA;
- else if ( opt == "CLIENT_ODBC" )
- optionFlags |= CLIENT_ODBC;
- else if ( opt == "CLIENT_SSL" )
- optionFlags |= CLIENT_SSL;
- else
- qWarning( "TQMYSTQLDriver::open: Unknown connect option '%s'", (*it).latin1() );
- }
-
- if ( (d->mysql = mysql_init((MYSQL*) 0)) &&
- mysql_real_connect( d->mysql,
- host,
- user,
- password,
- db.isNull() ? TQString("") : db,
- (port > -1) ? port : 0,
- NULL,
- optionFlags ) )
- {
- if ( !db.isEmpty() && mysql_select_db( d->mysql, db )) {
- setLastError( qMakeError("Unable open database '" + db + "'", TQSqlError::Connection, d ) );
- mysql_close( d->mysql );
- setOpenError( TRUE );
- return FALSE;
- }
- } else {
- setLastError( qMakeError( "Unable to connect", TQSqlError::Connection, d ) );
- mysql_close( d->mysql );
- setOpenError( TRUE );
- return FALSE;
- }
- setOpen( TRUE );
- setOpenError( FALSE );
- return TRUE;
-}
-
-void TQMYSTQLDriver::close()
-{
- if ( isOpen() ) {
- mysql_close( d->mysql );
- setOpen( FALSE );
- setOpenError( FALSE );
- }
-}
-
-TQSqlQuery TQMYSTQLDriver::createQuery() const
-{
- return TQSqlQuery( new TQMYSTQLResult( this ) );
-}
-
-TQStringList TQMYSTQLDriver::tables( const TQString& typeName ) const
-{
- TQStringList tl;
- if ( !isOpen() )
- return tl;
- if ( !typeName.isEmpty() && !(typeName.toInt() & (int)TQSql::Tables) )
- return tl;
-
- MYSTQL_RES* tableRes = mysql_list_tables( d->mysql, NULL );
- MYSTQL_ROW row;
- int i = 0;
- while ( tableRes && TRUE ) {
- mysql_data_seek( tableRes, i );
- row = mysql_fetch_row( tableRes );
- if ( !row )
- break;
- tl.append( TQString(row[0]) );
- i++;
- }
- mysql_free_result( tableRes );
- return tl;
-}
-
-TQSqlIndex TQMYSTQLDriver::primaryIndex( const TQString& tablename ) const
-{
- TQSqlIndex idx;
- if ( !isOpen() )
- return idx;
- TQSqlQuery i = createQuery();
- TQString stmt( "show index from %1;" );
- TQSqlRecord fil = record( tablename );
- i.exec( stmt.arg( tablename ) );
- while ( i.isActive() && i.next() ) {
- if ( i.value(2).toString() == "PRIMARY" ) {
- idx.append( *fil.field( i.value(4).toString() ) );
- idx.setCursorName( i.value(0).toString() );
- idx.setName( i.value(2).toString() );
- }
- }
- return idx;
-}
-
-TQSqlRecord TQMYSTQLDriver::record( const TQString& tablename ) const
-{
- TQSqlRecord fil;
- if ( !isOpen() )
- return fil;
- MYSTQL_RES* r = mysql_list_fields( d->mysql, tablename.local8Bit().data(), 0);
- if ( !r ) {
- return fil;
- }
- MYSTQL_FIELD* field;
- while ( (field = mysql_fetch_field( r ))) {
- TQSqlField f ( TQString( field->name ) , qDecodeMYSTQLType( (int)field->type, field->flags ) );
- fil.append ( f );
- }
- mysql_free_result( r );
- return fil;
-}
-
-TQSqlRecord TQMYSTQLDriver::record( const TQSqlQuery& query ) const
-{
- TQSqlRecord fil;
- if ( !isOpen() )
- return fil;
- if ( query.isActive() && query.isSelect() && query.driver() == this ) {
- TQMYSTQLResult* result = (TQMYSTQLResult*)query.result();
- TQMYSTQLResultPrivate* p = result->d;
- if ( !mysql_errno( p->mysql ) ) {
- for ( ;; ) {
- MYSTQL_FIELD* f = mysql_fetch_field( p->result );
- if ( f ) {
- TQSqlField fi( TQString((const char*)f->name), qDecodeMYSTQLType( f->type, f->flags ) );
- fil.append( fi );
- } else
- break;
- }
- }
- mysql_field_seek( p->result, 0 );
- }
- return fil;
-}
-
-TQSqlRecordInfo TQMYSTQLDriver::recordInfo( const TQString& tablename ) const
-{
- TQSqlRecordInfo info;
- if ( !isOpen() )
- return info;
- MYSTQL_RES* r = mysql_list_fields( d->mysql, tablename.local8Bit().data(), 0);
- if ( !r ) {
- return info;
- }
- MYSTQL_FIELD* field;
- while ( (field = mysql_fetch_field( r ))) {
- info.append ( TQSqlFieldInfo( TQString( field->name ),
- qDecodeMYSTQLType( (int)field->type, field->flags ),
- IS_NOT_NULL( field->flags ),
- (int)field->length,
- (int)field->decimals,
- TQString( field->def ),
- (int)field->type ) );
- }
- mysql_free_result( r );
- return info;
-}
-
-TQSqlRecordInfo TQMYSTQLDriver::recordInfo( const TQSqlQuery& query ) const
-{
- TQSqlRecordInfo info;
- if ( !isOpen() )
- return info;
- if ( query.isActive() && query.isSelect() && query.driver() == this ) {
- TQMYSTQLResult* result = (TQMYSTQLResult*)query.result();
- TQMYSTQLResultPrivate* p = result->d;
- if ( !mysql_errno( p->mysql ) ) {
- for ( ;; ) {
- MYSTQL_FIELD* field = mysql_fetch_field( p->result );
- if ( field ) {
- info.append ( TQSqlFieldInfo( TQString( field->name ),
- qDecodeMYSTQLType( (int)field->type, field->flags ),
- IS_NOT_NULL( field->flags ),
- (int)field->length,
- (int)field->decimals,
- TQVariant(),
- (int)field->type ) );
-
- } else
- break;
- }
- }
- mysql_field_seek( p->result, 0 );
- }
- return info;
-}
-
-MYSQL* TQMYSTQLDriver::mysql()
-{
- return d->mysql;
-}
-
-bool TQMYSTQLDriver::beginTransaction()
-{
-#ifndef CLIENT_TRANSACTIONS
- return FALSE;
-#endif
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQMYSTQLDriver::beginTransaction: Database not open" );
-#endif
- return FALSE;
- }
- if ( mysql_query( d->mysql, "BEGIN WORK" ) ) {
- setLastError( qMakeError("Unable to begin transaction", TQSqlError::Statement, d ) );
- return FALSE;
- }
- return TRUE;
-}
-
-bool TQMYSTQLDriver::commitTransaction()
-{
-#ifndef CLIENT_TRANSACTIONS
- return FALSE;
-#endif
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQMYSTQLDriver::commitTransaction: Database not open" );
-#endif
- return FALSE;
- }
- if ( mysql_query( d->mysql, "COMMIT" ) ) {
- setLastError( qMakeError("Unable to commit transaction", TQSqlError::Statement, d ) );
- return FALSE;
- }
- return TRUE;
-}
-
-bool TQMYSTQLDriver::rollbackTransaction()
-{
-#ifndef CLIENT_TRANSACTIONS
- return FALSE;
-#endif
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQMYSTQLDriver::rollbackTransaction: Database not open" );
-#endif
- return FALSE;
- }
- if ( mysql_query( d->mysql, "ROLLBACK" ) ) {
- setLastError( qMakeError("Unable to rollback transaction", TQSqlError::Statement, d ) );
- return FALSE;
- }
- return TRUE;
-}
-
-TQString TQMYSTQLDriver::formatValue( const TQSqlField* field, bool trimStrings ) const
-{
- TQString r;
- if ( field->isNull() ) {
- r = nullText();
- } else {
- switch( field->type() ) {
- case TQVariant::ByteArray: {
-
- const TQByteArray ba = field->value().toByteArray();
- // buffer has to be at least length*2+1 bytes
- char* buffer = new char[ ba.size() * 2 + 1 ];
- /*uint escapedSize =*/ mysql_escape_string( buffer, ba.data(), ba.size() );
- r.append("'").append(buffer).append("'");
- delete[] buffer;
- }
- break;
- case TQVariant::String:
- case TQVariant::CString: {
- // Escape '\' characters
- r = TQSqlDriver::formatValue( field );
- r.replace( "\\", "\\\\" );
- break;
- }
- default:
- r = TQSqlDriver::formatValue( field, trimStrings );
- }
- }
- return r;
-}
diff --git a/tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.h b/tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.h
deleted file mode 100644
index 385d900..0000000
--- a/tqtinterface/qt4/src/sql/drivers/mysql/tqsql_mysql.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Definition of MySQL driver classes
-**
-** Created : 001103
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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.
-**
-**********************************************************************/
-
-#ifndef TQSQL_MYSTQL_H
-#define TQSQL_MYSTQL_H
-
-#include <tqsqldriver.h>
-#include <tqsqlresult.h>
-#include <tqsqlfield.h>
-#include <tqsqlindex.h>
-
-#if defined (TQ_OS_WIN32)
-#include <tqt_windows.h>
-#endif
-
-#include <mysql.h>
-
-#ifdef TQT_PLUGIN
-#define TQ_EXPORT_STQLDRIVER_MYSQL
-#else
-#define TQ_EXPORT_STQLDRIVER_MYSQL TQ_EXPORT
-#endif
-
-class TQMYSTQLDriverPrivate;
-class TQMYSTQLResultPrivate;
-class TQMYSTQLDriver;
-class TQSqlRecordInfo;
-
-class TQMYSTQLResult : public TQSqlResult
-{
- friend class TQMYSTQLDriver;
-public:
- TQMYSTQLResult( const TQMYSTQLDriver* db );
- ~TQMYSTQLResult();
-
- MYSTQL_RES* result();
-protected:
- void cleanup();
- bool fetch( int i );
- bool fetchNext();
- bool fetchLast();
- bool fetchFirst();
- TQVariant data( int field );
- bool isNull( int field );
- bool reset ( const TQString& query );
- int size();
- int numRowsAffected();
-private:
- TQMYSTQLResultPrivate* d;
-};
-
-class TQ_EXPORT_STQLDRIVER_MYSQL TQMYSTQLDriver : public TQSqlDriver
-{
- friend class TQMYSTQLResult;
-public:
- TQMYSTQLDriver( TQObject * parent=0, const char * name=0 );
- TQMYSTQLDriver( MYSQL * con, TQObject * parent=0, const char * name=0 );
- ~TQMYSTQLDriver();
- bool hasFeature( DriverFeature f ) const;
- bool open( const TQString & db,
- const TQString & user = TQString::null,
- const TQString & password = TQString::null,
- const TQString & host = TQString::null,
- int port = -1 );
- void close();
- TQSqlQuery createQuery() const;
- TQStringList tables( const TQString& user ) const;
- TQSqlIndex primaryIndex( const TQString& tablename ) const;
- TQSqlRecord record( const TQString& tablename ) const;
- TQSqlRecord record( const TQSqlQuery& query ) const;
- TQSqlRecordInfo recordInfo( const TQString& tablename ) const;
- TQSqlRecordInfo recordInfo( const TQSqlQuery& query ) const;
- TQString formatValue( const TQSqlField* field,
- bool trimStrings ) const;
- MYSQL* mysql();
- // ### remove me for 4.0
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-
-protected:
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
-private:
- void init();
- TQMYSTQLDriverPrivate* d;
-};
-
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.cpp b/tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.cpp
deleted file mode 100644
index 8e75f90..0000000
--- a/tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.cpp
+++ /dev/null
@@ -1,2035 +0,0 @@
-/****************************************************************************
-**
-** Implementation of ODBC driver classes
-**
-** Created : 001103
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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 "tqsql_odbc.h"
-#include <tqsqlrecord.h>
-
-#if defined (TQ_OS_WIN32)
-#include <tqt_windows.h>
-#include <tqapplication.h>
-#endif
-#include <tqdatetime.h>
-#include <private/tqsqlextension_p.h>
-#include <private/tqinternal_p.h>
-#include <stdlib.h>
-
-// undefine this to prevent initial check of the ODBC driver
-#define ODBC_CHECK_DRIVER
-
-#if defined(TQ_ODBC_VERSION_2)
-//crude hack to get non-tqunicode capable driver managers to work
-# undef UNICODE
-# define STQLTCHAR STQLCHAR
-# define STQL_C_WCHAR STQL_C_CHAR
-#endif
-
-// newer platform SDKs use STQLLEN instead of STQLINTEGER
-#ifdef STQLLEN
-# define TQSTQLLEN STQLLEN
-#else
-# define TQSTQLLEN STQLINTEGER
-#endif
-
-#ifdef STQLULEN
-# define TQSQLULEN STQLULEN
-#else
-# define TQSQLULEN STQLUINTEGER
-#endif
-
-
-static const TQSTQLLEN COLNAMESIZE = 256;
-//Map TQt parameter types to ODBC types
-static const STQLSMALLINT qParamType[ 4 ] = { STQL_PARAM_INPUT, STQL_PARAM_INPUT, STQL_PARAM_OUTPUT, STQL_PARAM_INPUT_OUTPUT };
-
-class TQODBCPrivate
-{
-public:
- TQODBCPrivate()
- : hEnv(0), hDbc(0), hStmt(0), useSchema(FALSE)
- {
- sql_char_type = sql_varchar_type = sql_longvarchar_type = TQVariant::CString;
- tqunicode = FALSE;
- }
-
- STQLHANDLE hEnv;
- STQLHANDLE hDbc;
- STQLHANDLE hStmt;
-
- bool tqunicode;
- bool useSchema;
- TQVariant::Type sql_char_type;
- TQVariant::Type sql_varchar_type;
- TQVariant::Type sql_longvarchar_type;
-
- TQSqlRecordInfo rInf;
-
- bool checkDriver() const;
- void checkUnicode();
- void checkSchemaUsage();
- bool setConnectionOptions( const TQString& connOpts );
- void splitTableQualifier(const TQString &qualifier, TQString &catalog,
- TQString &schema, TQString &table);
-};
-
-class TQODBCPreparedExtension : public TQSqlExtension
-{
-public:
- TQODBCPreparedExtension( TQODBCResult * r )
- : result( r ) {}
-
- bool prepare( const TQString& query )
- {
- return result->prepare( query );
- }
-
- bool exec()
- {
- return result->exec();
- }
-
- TQODBCResult * result;
-};
-
-TQPtrDict<TQSqlOpenExtension> *qSqlOpenExtDict();
-
-class TQODBCOpenExtension : public TQSqlOpenExtension
-{
-public:
- TQODBCOpenExtension( TQODBCDriver *dri )
- : TQSqlOpenExtension(), driver(dri) {}
- ~TQODBCOpenExtension() {}
-
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-private:
- TQODBCDriver *driver;
-};
-
-bool TQODBCOpenExtension::open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts )
-{
- return driver->open( db, user, password, host, port, connOpts );
-}
-
-static TQString qWarnODBCHandle(int handleType, STQLHANDLE handle)
-{
- STQLINTEGER nativeCode_;
- STQLSMALLINT msgLen;
- STQLRETURN r = STQL_ERROR;
- STQLTCHAR state_[STQL_STQLSTATE_SIZE+1];
- STQLTCHAR description_[STQL_MAX_MESSAGE_LENGTH];
- r = STQLGetDiagRec( handleType,
- handle,
- 1,
- (STQLTCHAR*)state_,
- &nativeCode_,
- (STQLTCHAR*)description_,
- STQL_MAX_MESSAGE_LENGTH-1, /* in bytes, not in characters */
- &msgLen);
- if ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO )
-#ifdef UNICODE
- return TQString( (const TQChar*)description_, (uint)msgLen );
-#else
- return TQString::fromLocal8Bit( (const char*)description_ );
-#endif
- return TQString::null;
-}
-
-static TQString qODBCWarn( const TQODBCPrivate* odbc)
-{
- return ( qWarnODBCHandle( STQL_HANDLE_ENV, odbc->hEnv ) + " "
- + qWarnODBCHandle( STQL_HANDLE_DBC, odbc->hDbc ) + " "
- + qWarnODBCHandle( STQL_HANDLE_STMT, odbc->hStmt ) );
-}
-
-static void qSqlWarning( const TQString& message, const TQODBCPrivate* odbc )
-{
-#ifdef TQT_CHECK_RANGE
- qWarning( "%s\tError: %s", message.local8Bit().data(), qODBCWarn( odbc ).local8Bit().data() );
-#endif
-}
-
-static TQSqlError qMakeError( const TQString& err, int type, const TQODBCPrivate* p )
-{
- return TQSqlError( "TQODBC3: " + err, qODBCWarn(p), type );
-}
-
-static TQVariant::Type qDecodeODBCType( STQLSMALLINT sqltype, const TQODBCPrivate* p )
-{
- TQVariant::Type type = TQVariant::Invalid;
- switch ( sqltype ) {
- case STQL_DECIMAL:
- case STQL_NUMERIC:
- case STQL_REAL:
- case STQL_FLOAT:
- case STQL_DOUBLE:
- type = TQVariant::Double;
- break;
- case STQL_SMALLINT:
- case STQL_INTEGER:
- case STQL_BIT:
- case STQL_TINYINT:
- type = TQVariant::Int;
- break;
- case STQL_BIGINT:
- type = TQVariant::LongLong;
- break;
- case STQL_BINARY:
- case STQL_VARBINARY:
- case STQL_LONGVARBINARY:
- type = TQVariant::ByteArray;
- break;
- case STQL_DATE:
- case STQL_TYPE_DATE:
- type = TQVariant::Date;
- break;
- case STQL_TIME:
- case STQL_TYPE_TIME:
- type = TQVariant::Time;
- break;
- case STQL_TIMESTAMP:
- case STQL_TYPE_TIMESTAMP:
- type = TQVariant::DateTime;
- break;
-#ifndef TQ_ODBC_VERSION_2
- case STQL_WCHAR:
- case STQL_WVARCHAR:
- case STQL_WLONGVARCHAR:
- type = TQVariant::String;
- break;
-#endif
- case STQL_CHAR:
- type = p->sql_char_type;
- break;
- case STQL_VARCHAR:
- type = p->sql_varchar_type;
- break;
- case STQL_LONGVARCHAR:
- type = p->sql_longvarchar_type;
- break;
- default:
- type = TQVariant::CString;
- break;
- }
- return type;
-}
-
-static TQString qGetStringData( STQLHANDLE hStmt, int column, int colSize, bool& isNull, bool tqunicode = FALSE )
-{
- TQString fieldVal;
- STQLRETURN r = STQL_ERROR;
- TQSTQLLEN lengthIndicator = 0;
-
- if ( colSize <= 0 ) {
- colSize = 256;
- } else if ( colSize > 65536 ) { // limit buffer size to 64 KB
- colSize = 65536;
- } else {
- colSize++; // make sure there is room for more than the 0 termination
- if ( tqunicode ) {
- colSize *= 2; // a tiny bit faster, since it saves a STQLGetData() call
- }
- }
- char* buf = new char[ colSize ];
- while ( TRUE ) {
- r = STQLGetData( hStmt,
- column+1,
- tqunicode ? STQL_C_WCHAR : STQL_C_CHAR,
- (STQLPOINTER)buf,
- (TQSTQLLEN)colSize,
- &lengthIndicator );
- if ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) {
- if ( lengthIndicator == STQL_NULL_DATA || lengthIndicator == STQL_NO_TOTAL ) {
- fieldVal = TQString::null;
- isNull = TRUE;
- break;
- }
- // if STQL_SUCCESS_WITH_INFO is returned, indicating that
- // more data can be fetched, the length indicator does NOT
- // contain the number of bytes returned - it contains the
- // total number of bytes that CAN be fetched
- // colSize-1: remove 0 termination when there is more data to fetch
- int rSize = (r == STQL_SUCCESS_WITH_INFO) ? (tqunicode ? colSize-2 : colSize-1) : lengthIndicator;
- if ( tqunicode ) {
- fieldVal += TQString( (TQChar*) buf, rSize / 2 );
- } else {
- buf[ rSize ] = 0;
- fieldVal += buf;
- }
- if ( lengthIndicator < colSize ) {
- // workaround for Drivermanagers that don't return STQL_NO_DATA
- break;
- }
- } else if ( r == STQL_NO_DATA ) {
- break;
- } else {
-#ifdef TQT_CHECK_RANGE
- qWarning( "qGetStringData: Error while fetching data (%d)", r );
-#endif
- fieldVal = TQString::null;
- break;
- }
- }
- delete[] buf;
- return fieldVal;
-}
-
-static TQByteArray qGetBinaryData( STQLHANDLE hStmt, int column, TQSTQLLEN& lengthIndicator, bool& isNull )
-{
- TQByteArray fieldVal;
- STQLSMALLINT colNameLen;
- STQLSMALLINT colType;
- TQSQLULEN colSize;
- STQLSMALLINT colScale;
- STQLSMALLINT nullable;
- STQLRETURN r = STQL_ERROR;
-
- STQLTCHAR colName[COLNAMESIZE];
- r = STQLDescribeCol( hStmt,
- column+1,
- colName,
- COLNAMESIZE,
- &colNameLen,
- &colType,
- &colSize,
- &colScale,
- &nullable );
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qWarning( "qGetBinaryData: Unable to describe column %d", column );
-#endif
- // STQLDescribeCol may return 0 if size cannot be determined
- if (!colSize) {
- colSize = 256;
- }
- if ( colSize > 65536 ) { // read the field in 64 KB chunks
- colSize = 65536;
- }
- char * buf = new char[ colSize ];
- while ( TRUE ) {
- r = STQLGetData( hStmt,
- column+1,
- STQL_C_BINARY,
- (STQLPOINTER) buf,
- (TQSTQLLEN)colSize,
- &lengthIndicator );
- if ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) {
- if ( lengthIndicator == STQL_NULL_DATA ) {
- isNull = TRUE;
- break;
- } else {
- int rSize;
- r == STQL_SUCCESS ? rSize = lengthIndicator : rSize = colSize;
- if ( lengthIndicator == STQL_NO_TOTAL ) { // size cannot be determined
- rSize = colSize;
- }
- // NB! This is not a memleak - the mem will be deleted by TQByteArray when
- // no longer ref'd
- char * tmp = (char *) malloc( rSize + fieldVal.size() );
- if ( fieldVal.size() ) {
- memcpy( tmp, fieldVal.data(), fieldVal.size() );
- }
- memcpy( tmp + fieldVal.size(), buf, rSize );
- fieldVal = fieldVal.assign( tmp, fieldVal.size() + rSize );
-
- if ( r == STQL_SUCCESS ) { // the whole field was read in one chunk
- break;
- }
- }
- } else {
- break;
- }
- }
- delete [] buf;
- return fieldVal;
-}
-
-static int qGetIntData( STQLHANDLE hStmt, int column, bool& isNull )
-{
- TQSTQLLEN intbuf = 0;
- isNull = FALSE;
- TQSTQLLEN lengthIndicator = 0;
- STQLRETURN r = STQLGetData( hStmt,
- column+1,
- STQL_C_SLONG,
- (STQLPOINTER)&intbuf,
- (TQSTQLLEN)0,
- &lengthIndicator );
- if ( ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) || lengthIndicator == STQL_NULL_DATA ) {
- isNull = TRUE;
- return 0;
- }
- return (int)intbuf;
-}
-
-static double qGetDoubleData( STQLHANDLE hStmt, int column, bool& isNull )
-{
- STQLDOUBLE dblbuf;
- TQSTQLLEN lengthIndicator = 0;
- isNull = FALSE;
- STQLRETURN r = STQLGetData( hStmt,
- column+1,
- STQL_C_DOUBLE,
- (STQLPOINTER)&dblbuf,
- (TQSTQLLEN)0,
- &lengthIndicator );
- if ( ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) || lengthIndicator == STQL_NULL_DATA ) {
- isNull = TRUE;
- return 0.0;
- }
-
- return (double) dblbuf;
-}
-
-static STQLBIGINT qGetBigIntData( STQLHANDLE hStmt, int column, bool& isNull )
-{
- STQLBIGINT lngbuf = TQ_INT64_C( 0 );
- isNull = FALSE;
- TQSTQLLEN lengthIndicator = 0;
- STQLRETURN r = STQLGetData( hStmt,
- column+1,
- STQL_C_SBIGINT,
- (STQLPOINTER) &lngbuf,
- (TQSTQLLEN)0,
- &lengthIndicator );
- if ( ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) || lengthIndicator == STQL_NULL_DATA )
- isNull = TRUE;
-
- return lngbuf;
-}
-
-// creates a TQSqlFieldInfo from a valid hStmt generated
-// by STQLColumns. The hStmt has to point to a valid position.
-static TQSqlFieldInfo qMakeFieldInfo( const STQLHANDLE hStmt, const TQODBCPrivate* p )
-{
- bool isNull;
- TQString fname = qGetStringData( hStmt, 3, -1, isNull, p->tqunicode );
- int type = qGetIntData( hStmt, 4, isNull ); // column type
- int required = qGetIntData( hStmt, 10, isNull ); // nullable-flag
- // required can be STQL_NO_NULLS, STQL_NULLABLE or STQL_NULLABLE_UNKNOWN
- if ( required == STQL_NO_NULLS ) {
- required = 1;
- } else if ( required == STQL_NULLABLE ) {
- required = 0;
- } else {
- required = -1;
- }
- int size = qGetIntData( hStmt, 6, isNull ); // column size
- int prec = qGetIntData( hStmt, 8, isNull ); // precision
- return TQSqlFieldInfo( fname, qDecodeODBCType( type, p ), required, size, prec, TQVariant(), type );
-}
-
-static TQSqlFieldInfo qMakeFieldInfo( const TQODBCPrivate* p, int i )
-{
- STQLSMALLINT colNameLen;
- STQLSMALLINT colType;
- TQSQLULEN colSize;
- STQLSMALLINT colScale;
- STQLSMALLINT nullable;
- STQLRETURN r = STQL_ERROR;
- STQLTCHAR colName[ COLNAMESIZE ];
- r = STQLDescribeCol( p->hStmt,
- i+1,
- colName,
- (TQSQLULEN)COLNAMESIZE,
- &colNameLen,
- &colType,
- &colSize,
- &colScale,
- &nullable);
-
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( TQString("qMakeField: Unable to describe column %1").arg(i), p );
-#endif
- return TQSqlFieldInfo();
- }
-#ifdef UNICODE
- TQString qColName( (const TQChar*)colName, (uint)colNameLen );
-#else
- TQString qColName = TQString::fromLocal8Bit( (const char*)colName );
-#endif
- // nullable can be STQL_NO_NULLS, STQL_NULLABLE or STQL_NULLABLE_UNKNOWN
- int required = -1;
- if ( nullable == STQL_NO_NULLS ) {
- required = 1;
- } else if ( nullable == STQL_NULLABLE ) {
- required = 0;
- }
- TQVariant::Type type = qDecodeODBCType( colType, p );
- return TQSqlFieldInfo( qColName,
- type,
- required,
- (int)colSize == 0 ? -1 : (int)colSize,
- (int)colScale == 0 ? -1 : (int)colScale,
- TQVariant(),
- (int)colType );
-}
-
-bool TQODBCPrivate::setConnectionOptions( const TQString& connOpts )
-{
- // Set any connection attributes
- TQStringList raw = TQStringList::split( ';', connOpts );
- TQStringList opts;
- STQLRETURN r = STQL_SUCCESS;
- TQMap<TQString, TQString> connMap;
- for ( TQStringList::ConstIterator it = raw.begin(); it != raw.end(); ++it ) {
- TQString tmp( *it );
- int idx;
- if ( (idx = tmp.find( '=' )) != -1 )
- connMap[ tmp.left( idx ) ] = tmp.mid( idx + 1 ).simplifyWhiteSpace();
- else
- qWarning( "TQODBCDriver::open: Illegal connect option value '%s'", tmp.latin1() );
- }
- if ( connMap.count() ) {
- TQMap<TQString, TQString>::ConstIterator it;
- TQString opt, val;
- STQLUINTEGER v = 0;
- for ( it = connMap.begin(); it != connMap.end(); ++it ) {
- opt = it.key().upper();
- val = it.data().upper();
- r = STQL_SUCCESS;
- if ( opt == "STQL_ATTR_ACCESS_MODE" ) {
- if ( val == "STQL_MODE_READ_ONLY" ) {
- v = STQL_MODE_READ_ONLY;
- } else if ( val == "STQL_MODE_READ_WRITE" ) {
- v = STQL_MODE_READ_WRITE;
- } else {
- qWarning( TQString( "TQODBCDriver::open: Unknown option value '%1'" ).arg( *it ) );
- break;
- }
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_ACCESS_MODE, (STQLPOINTER) v, 0 );
- } else if ( opt == "STQL_ATTR_CONNECTION_TIMEOUT" ) {
- v = val.toUInt();
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_CONNECTION_TIMEOUT, (STQLPOINTER) v, 0 );
- } else if ( opt == "STQL_ATTR_LOGIN_TIMEOUT" ) {
- v = val.toUInt();
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_LOGIN_TIMEOUT, (STQLPOINTER) v, 0 );
- } else if ( opt == "STQL_ATTR_CURRENT_CATALOG" ) {
- val.ucs2(); // 0 terminate
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_CURRENT_CATALOG,
-#ifdef UNICODE
- (STQLWCHAR*) val.tqunicode(),
-#else
- (STQLCHAR*) val.latin1(),
-#endif
- STQL_NTS );
- } else if ( opt == "STQL_ATTR_METADATA_ID" ) {
- if ( val == "STQL_TRUE" ) {
- v = STQL_TRUE;
- } else if ( val == "STQL_FALSE" ) {
- v = STQL_FALSE;
- } else {
- qWarning( TQString( "TQODBCDriver::open: Unknown option value '%1'" ).arg( *it ) );
- break;
- }
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_METADATA_ID, (STQLPOINTER) v, 0 );
- } else if ( opt == "STQL_ATTR_PACKET_SIZE" ) {
- v = val.toUInt();
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_PACKET_SIZE, (STQLPOINTER) v, 0 );
- } else if ( opt == "STQL_ATTR_TRACEFILE" ) {
- val.ucs2(); // 0 terminate
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_TRACEFILE,
-#ifdef UNICODE
- (STQLWCHAR*) val.tqunicode(),
-#else
- (STQLCHAR*) val.latin1(),
-#endif
- STQL_NTS );
- } else if ( opt == "STQL_ATTR_TRACE" ) {
- if ( val == "STQL_OPT_TRACE_OFF" ) {
- v = STQL_OPT_TRACE_OFF;
- } else if ( val == "STQL_OPT_TRACE_ON" ) {
- v = STQL_OPT_TRACE_ON;
- } else {
- qWarning( TQString( "TQODBCDriver::open: Unknown option value '%1'" ).arg( *it ) );
- break;
- }
- r = STQLSetConnectAttr( hDbc, STQL_ATTR_TRACE, (STQLPOINTER) v, 0 );
- }
-#ifdef TQT_CHECK_RANGE
- else {
- qWarning( TQString("TQODBCDriver::open: Unknown connection attribute '%1'").arg( opt ) );
- }
-#endif
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( TQString("TQODBCDriver::open: Unable to set connection attribute '%1'").arg( opt ), this );
-#endif
- return FALSE;
- }
- }
- }
- return TRUE;
-}
-
-void TQODBCPrivate::splitTableQualifier(const TQString & qualifier, TQString &catalog,
- TQString &schema, TQString &table)
-{
- if (!useSchema) {
- table = qualifier;
- return;
- }
- TQStringList l = TQStringList::split( ".", qualifier, TRUE );
- if ( l.count() > 3 )
- return; // can't possibly be a valid table qualifier
- int i = 0, n = l.count();
- if ( n == 1 ) {
- table = qualifier;
- } else {
- for ( TQStringList::Iterator it = l.begin(); it != l.end(); ++it ) {
- if ( n == 3 ) {
- if ( i == 0 ) {
- catalog = *it;
- } else if ( i == 1 ) {
- schema = *it;
- } else if ( i == 2 ) {
- table = *it;
- }
- } else if ( n == 2 ) {
- if ( i == 0 ) {
- schema = *it;
- } else if ( i == 1 ) {
- table = *it;
- }
- }
- i++;
- }
- }
-}
-
-////////////////////////////////////////////////////////////////////////////
-
-TQODBCResult::TQODBCResult( const TQODBCDriver * db, TQODBCPrivate* p )
-: TQSqlResult(db)
-{
- d = new TQODBCPrivate();
- (*d) = (*p);
- setExtension( new TQODBCPreparedExtension( this ) );
-}
-
-TQODBCResult::~TQODBCResult()
-{
- if ( d->hStmt && driver()->isOpen() ) {
- STQLRETURN r = STQLFreeHandle( STQL_HANDLE_STMT, d->hStmt );
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver: Unable to free statement handle " + TQString::number(r), d );
-#endif
- }
-
- delete d;
-}
-
-bool TQODBCResult::reset ( const TQString& query )
-{
- setActive( FALSE );
- setAt( TQSql::BeforeFirst );
- STQLRETURN r;
-
- d->rInf.clear();
- // Always reallocate the statement handle - the statement attributes
- // are not reset if STQLFreeStmt() is called which causes some problems.
- if ( d->hStmt ) {
- r = STQLFreeHandle( STQL_HANDLE_STMT, d->hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::reset: Unable to free statement handle", d );
-#endif
- return FALSE;
- }
- }
- r = STQLAllocHandle( STQL_HANDLE_STMT,
- d->hDbc,
- &d->hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::reset: Unable to allocate statement handle", d );
-#endif
- return FALSE;
- }
-
- if ( isForwardOnly() ) {
- r = STQLSetStmtAttr( d->hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_FORWARD_ONLY,
- STQL_IS_UINTEGER );
- } else {
- r = STQLSetStmtAttr( d->hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_STATIC,
- STQL_IS_UINTEGER );
- }
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::reset: Unable to set 'STQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration", d );
-#endif
- return FALSE;
- }
-
-#ifdef UNICODE
- r = STQLExecDirect( d->hStmt,
- (STQLWCHAR*) query.tqunicode(),
- (STQLINTEGER) query.length() );
-#else
- TQCString query8 = query.local8Bit();
- r = STQLExecDirect( d->hStmt,
- (STQLCHAR*) query8.data(),
- (STQLINTEGER) query8.length() );
-#endif
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
- setLastError( qMakeError( "Unable to execute statement", TQSqlError::Statement, d ) );
- return FALSE;
- }
- STQLSMALLINT count;
- r = STQLNumResultCols( d->hStmt, &count );
- if ( count ) {
- setSelect( TRUE );
- for ( int i = 0; i < count; ++i ) {
- d->rInf.append( qMakeFieldInfo( d, i ) );
- }
- } else {
- setSelect( FALSE );
- }
- setActive( TRUE );
- return TRUE;
-}
-
-bool TQODBCResult::fetch(int i)
-{
- if ( isForwardOnly() && i < at() )
- return FALSE;
- if ( i == at() )
- return TRUE;
- fieldCache.clear();
- nullCache.clear();
- int actualIdx = i + 1;
- if ( actualIdx <= 0 ) {
- setAt( TQSql::BeforeFirst );
- return FALSE;
- }
- STQLRETURN r;
- if ( isForwardOnly() ) {
- bool ok = TRUE;
- while ( ok && i > at() )
- ok = fetchNext();
- return ok;
- } else {
- r = STQLFetchScroll( d->hStmt,
- STQL_FETCH_ABSOLUTE,
- actualIdx );
- }
- if ( r != STQL_SUCCESS ){
- return FALSE;
- }
- setAt( i );
- return TRUE;
-}
-
-bool TQODBCResult::fetchNext()
-{
- STQLRETURN r;
- fieldCache.clear();
- nullCache.clear();
- r = STQLFetchScroll( d->hStmt,
- STQL_FETCH_NEXT,
- 0 );
- if ( r != STQL_SUCCESS )
- return FALSE;
- setAt( at() + 1 );
- return TRUE;
-}
-
-bool TQODBCResult::fetchFirst()
-{
- if ( isForwardOnly() && at() != TQSql::BeforeFirst )
- return FALSE;
- STQLRETURN r;
- fieldCache.clear();
- nullCache.clear();
- if ( isForwardOnly() ) {
- return fetchNext();
- }
- r = STQLFetchScroll( d->hStmt,
- STQL_FETCH_FIRST,
- 0 );
- if ( r != STQL_SUCCESS )
- return FALSE;
- setAt( 0 );
- return TRUE;
-}
-
-bool TQODBCResult::fetchPrior()
-{
- if ( isForwardOnly() )
- return FALSE;
- STQLRETURN r;
- fieldCache.clear();
- nullCache.clear();
- r = STQLFetchScroll( d->hStmt,
- STQL_FETCH_PRIOR,
- 0 );
- if ( r != STQL_SUCCESS )
- return FALSE;
- setAt( at() - 1 );
- return TRUE;
-}
-
-bool TQODBCResult::fetchLast()
-{
- STQLRETURN r;
- fieldCache.clear();
- nullCache.clear();
-
- if ( isForwardOnly() ) {
- // cannot seek to last row in forwardOnly mode, so we have to use brute force
- int i = at();
- if ( i == TQSql::AfterLast )
- return FALSE;
- if ( i == TQSql::BeforeFirst )
- i = 0;
- while ( fetchNext() )
- ++i;
- setAt( i );
- return TRUE;
- }
-
- r = STQLFetchScroll( d->hStmt,
- STQL_FETCH_LAST,
- 0 );
- if ( r != STQL_SUCCESS ) {
- return FALSE;
- }
- STQLINTEGER currRow;
- r = STQLGetStmtAttr( d->hStmt,
- STQL_ROW_NUMBER,
- &currRow,
- STQL_IS_INTEGER,
- 0 );
- if ( r != STQL_SUCCESS )
- return FALSE;
- setAt( currRow-1 );
- return TRUE;
-}
-
-TQVariant TQODBCResult::data( int field )
-{
- if ( field >= (int) d->rInf.count() ) {
- qWarning( "TQODBCResult::data: column %d out of range", field );
- return TQVariant();
- }
- if ( fieldCache.contains( field ) )
- return fieldCache[ field ];
- STQLRETURN r(0);
- TQSTQLLEN lengthIndicator = 0;
- bool isNull = FALSE;
- int current = fieldCache.count();
- for ( ; current < (field + 1); ++current ) {
- const TQSqlFieldInfo info = d->rInf[ current ];
- switch ( info.type() ) {
- case TQVariant::LongLong:
- fieldCache[ current ] = TQVariant( (TQ_LLONG) qGetBigIntData( d->hStmt, current, isNull ) );
- nullCache[ current ] = isNull;
- break;
- case TQVariant::Int:
- fieldCache[ current ] = TQVariant( qGetIntData( d->hStmt, current, isNull ) );
- nullCache[ current ] = isNull;
- break;
- case TQVariant::Date:
- DATE_STRUCT dbuf;
- r = STQLGetData( d->hStmt,
- current+1,
- STQL_C_DATE,
- (STQLPOINTER)&dbuf,
- (TQSTQLLEN)0,
- &lengthIndicator );
- if ( ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) && ( lengthIndicator != STQL_NULL_DATA ) ) {
- fieldCache[ current ] = TQVariant( TQDate( dbuf.year, dbuf.month, dbuf.day ) );
- nullCache[ current ] = FALSE;
- } else {
- fieldCache[ current ] = TQVariant( TQDate() );
- nullCache[ current ] = TRUE;
- }
- break;
- case TQVariant::Time:
- TIME_STRUCT tbuf;
- r = STQLGetData( d->hStmt,
- current+1,
- STQL_C_TIME,
- (STQLPOINTER)&tbuf,
- (TQSTQLLEN)0,
- &lengthIndicator );
- if ( ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) && ( lengthIndicator != STQL_NULL_DATA ) ) {
- fieldCache[ current ] = TQVariant( TQTime( tbuf.hour, tbuf.minute, tbuf.second ) );
- nullCache[ current ] = FALSE;
- } else {
- fieldCache[ current ] = TQVariant( TQTime() );
- nullCache[ current ] = TRUE;
- }
- break;
- case TQVariant::DateTime:
- TIMESTAMP_STRUCT dtbuf;
- r = STQLGetData( d->hStmt,
- current+1,
- STQL_C_TIMESTAMP,
- (STQLPOINTER)&dtbuf,
- (TQSTQLLEN)0,
- &lengthIndicator );
- if ( ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) && ( lengthIndicator != STQL_NULL_DATA ) ) {
- fieldCache[ current ] = TQVariant( TQDateTime( TQDate( dtbuf.year, dtbuf.month, dtbuf.day ), TQTime( dtbuf.hour, dtbuf.minute, dtbuf.second, dtbuf.fraction / 1000000 ) ) );
- nullCache[ current ] = FALSE;
- } else {
- fieldCache[ current ] = TQVariant( TQDateTime() );
- nullCache[ current ] = TRUE;
- }
- break;
- case TQVariant::ByteArray: {
- isNull = FALSE;
- TQByteArray val = qGetBinaryData( d->hStmt, current, lengthIndicator, isNull );
- fieldCache[ current ] = TQVariant( val );
- nullCache[ current ] = isNull;
- break; }
- case TQVariant::String:
- isNull = FALSE;
- fieldCache[ current ] = TQVariant( qGetStringData( d->hStmt, current,
- info.length(), isNull, TRUE ) );
- nullCache[ current ] = isNull;
- break;
- case TQVariant::Double:
- if ( info.typeID() == STQL_DECIMAL || info.typeID() == STQL_NUMERIC )
- // bind Double values as string to prevent loss of precision
- fieldCache[ current ] = TQVariant( qGetStringData( d->hStmt, current,
- info.length() + 1, isNull, FALSE ) ); // length + 1 for the comma
- else
- fieldCache[ current ] = TQVariant( qGetDoubleData( d->hStmt, current, isNull ) );
- nullCache[ current ] = isNull;
- break;
- case TQVariant::CString:
- default:
- isNull = FALSE;
- fieldCache[ current ] = TQVariant( qGetStringData( d->hStmt, current,
- info.length(), isNull, FALSE ) );
- nullCache[ current ] = isNull;
- break;
- }
- }
- return fieldCache[ --current ];
-}
-
-bool TQODBCResult::isNull( int field )
-{
- if ( !fieldCache.contains( field ) ) {
- // since there is no good way to find out whether the value is NULL
- // without fetching the field we'll fetch it here.
- // (data() also sets the NULL flag)
- data( field );
- }
- return nullCache[ field ];
-}
-
-int TQODBCResult::size()
-{
- return -1;
-}
-
-int TQODBCResult::numRowsAffected()
-{
- TQSTQLLEN affectedRowCount(0);
- STQLRETURN r = STQLRowCount( d->hStmt, &affectedRowCount );
- if ( r == STQL_SUCCESS )
- return affectedRowCount;
-#ifdef TQT_CHECK_RANGE
- else
- qSqlWarning( "TQODBCResult::numRowsAffected: Unable to count affected rows", d );
-#endif
- return -1;
-}
-
-bool TQODBCResult::prepare( const TQString& query )
-{
- setActive( FALSE );
- setAt( TQSql::BeforeFirst );
- STQLRETURN r;
-
- d->rInf.clear();
- if ( d->hStmt ) {
- r = STQLFreeHandle( STQL_HANDLE_STMT, d->hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::prepare: Unable to close statement", d );
-#endif
- return FALSE;
- }
- }
- r = STQLAllocHandle( STQL_HANDLE_STMT,
- d->hDbc,
- &d->hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::prepare: Unable to allocate statement handle", d );
-#endif
- return FALSE;
- }
-
- if ( isForwardOnly() ) {
- r = STQLSetStmtAttr( d->hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_FORWARD_ONLY,
- STQL_IS_UINTEGER );
- } else {
- r = STQLSetStmtAttr( d->hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_STATIC,
- STQL_IS_UINTEGER );
- }
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::prepare: Unable to set 'STQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration", d );
-#endif
- return FALSE;
- }
-
-#ifdef UNICODE
- r = STQLPrepare( d->hStmt,
- (STQLWCHAR*) query.tqunicode(),
- (STQLINTEGER) query.length() );
-#else
- TQCString query8 = query.local8Bit();
- r = STQLPrepare( d->hStmt,
- (STQLCHAR*) query8.data(),
- (STQLINTEGER) query8.length() );
-#endif
-
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::prepare: Unable to prepare statement", d );
-#endif
- return FALSE;
- }
- return TRUE;
-}
-
-bool TQODBCResult::exec()
-{
- STQLRETURN r;
- TQPtrList<TQVirtualDestructor> tmpStorage; // holds temporary ptrs. which will be deleted on fu exit
- tmpStorage.setAutoDelete( TRUE );
-
- setActive( FALSE );
- setAt( TQSql::BeforeFirst );
- d->rInf.clear();
-
- if ( !d->hStmt ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCResult::exec: No statement handle available", d );
-#endif
- return FALSE;
- } else {
- r = STQLFreeStmt( d->hStmt, STQL_CLOSE );
- if ( r != STQL_SUCCESS ) {
- qSqlWarning( "TQODBCResult::exec: Unable to close statement handle", d );
- return FALSE;
- }
- }
-
- // bind parameters - only positional binding allowed
- if ( extension()->index.count() > 0 ) {
- TQMap<int, TQString>::Iterator it;
- int para = 1;
- TQVariant val;
- for ( it = extension()->index.begin(); it != extension()->index.end(); ++it ) {
- val = extension()->values[ it.data() ].value;
- TQSTQLLEN *ind = new TQSTQLLEN( STQL_NTS );
- tmpStorage.append( qAutoDeleter(ind) );
- if ( val.isNull() ) {
- *ind = STQL_NULL_DATA;
- }
- switch ( val.type() ) {
- case TQVariant::Date: {
- DATE_STRUCT * dt = new DATE_STRUCT;
- tmpStorage.append( qAutoDeleter(dt) );
- TQDate qdt = val.toDate();
- dt->year = qdt.year();
- dt->month = qdt.month();
- dt->day = qdt.day();
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_DATE,
- STQL_DATE,
- 0,
- 0,
- (void *) dt,
- (TQSTQLLEN)0,
- *ind == STQL_NULL_DATA ? ind : NULL );
- break; }
- case TQVariant::Time: {
- TIME_STRUCT * dt = new TIME_STRUCT;
- tmpStorage.append( qAutoDeleter(dt) );
- TQTime qdt = val.toTime();
- dt->hour = qdt.hour();
- dt->minute = qdt.minute();
- dt->second = qdt.second();
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_TIME,
- STQL_TIME,
- 0,
- 0,
- (void *) dt,
- (TQSTQLLEN)0,
- *ind == STQL_NULL_DATA ? ind : NULL );
- break; }
- case TQVariant::DateTime: {
- TIMESTAMP_STRUCT * dt = new TIMESTAMP_STRUCT;
- tmpStorage.append( qAutoDeleter(dt) );
- TQDateTime qdt = val.toDateTime();
- dt->year = qdt.date().year();
- dt->month = qdt.date().month();
- dt->day = qdt.date().day();
- dt->hour = qdt.time().hour();
- dt->minute = qdt.time().minute();
- dt->second = qdt.time().second();
- dt->fraction = 0;
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_TIMESTAMP,
- STQL_TIMESTAMP,
- 0,
- 0,
- (void *) dt,
- (TQSTQLLEN)0,
- *ind == STQL_NULL_DATA ? ind : NULL );
- break; }
- case TQVariant::Int: {
- int * v = new int( val.toInt() );
- tmpStorage.append( qAutoDeleter(v) );
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_SLONG,
- STQL_INTEGER,
- 0,
- 0,
- (void *) v,
- (TQSTQLLEN)0,
- *ind == STQL_NULL_DATA ? ind : NULL );
- break; }
- case TQVariant::Double: {
- double * v = new double( val.toDouble() );
- tmpStorage.append( qAutoDeleter(v) );
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_DOUBLE,
- STQL_DOUBLE,
- 0,
- 0,
- (void *) v,
- (TQSTQLLEN)0,
- *ind == STQL_NULL_DATA ? ind : NULL );
- break; }
- case TQVariant::ByteArray: {
- if ( *ind != STQL_NULL_DATA ) {
- *ind = val.asByteArray().size();
- }
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_BINARY,
- STQL_LONGVARBINARY,
- val.asByteArray().size(),
- 0,
- (void *) val.asByteArray().data(),
- (TQSTQLLEN)val.asByteArray().size(),
- ind );
- break; }
-#ifndef TQ_ODBC_VERSION_2
- case TQVariant::String:
- if ( d->tqunicode ) {
- TQString * str = new TQString( val.asString() );
- str->ucs2();
- int len = str->length()*2;
- tmpStorage.append( qAutoDeleter(str) );
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_WCHAR,
- len > 8000 ? STQL_WLONGVARCHAR : STQL_WVARCHAR,
- len > 8000 ? len : 0,
- 0,
- (void *) str->tqunicode(),
- (TQSTQLLEN) len,
- ind );
- break;
- }
-#endif
- // fall through
- default: {
- TQCString * str = new TQCString( val.asString().local8Bit() );
- tmpStorage.append( qAutoDeleter(str) );
- r = STQLBindParameter( d->hStmt,
- para,
- qParamType[ (int)extension()->values[ it.data() ].typ ],
- STQL_C_CHAR,
- str->length() > 4000 ? STQL_LONGVARCHAR : STQL_VARCHAR,
- str->length() + 1,
- 0,
- (void *) str->data(),
- (TQSTQLLEN)(str->length() + 1),
- ind );
- break; }
- }
- para++;
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQODBCResult::exec: unable to bind variable: %s", qODBCWarn( d ).local8Bit().data() );
-#endif
- setLastError( qMakeError( "Unable to bind variable", TQSqlError::Statement, d ) );
- return FALSE;
- }
- }
- }
- r = STQLExecute( d->hStmt );
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQODBCResult::exec: Unable to execute statement: %s", qODBCWarn( d ).local8Bit().data() );
-#endif
- setLastError( qMakeError( "Unable to execute statement", TQSqlError::Statement, d ) );
- return FALSE;
- }
- STQLSMALLINT count;
- r = STQLNumResultCols( d->hStmt, &count );
- if ( count ) {
- setSelect( TRUE );
- for ( int i = 0; i < count; ++i ) {
- d->rInf.append( qMakeFieldInfo( d, i ) );
- }
- } else {
- setSelect( FALSE );
- }
- setActive( TRUE );
-
- //get out parameters
- if ( extension()->index.count() > 0 ) {
- TQMap<int, TQString>::Iterator it;
- for ( it = extension()->index.begin(); it != extension()->index.end(); ++it ) {
-
- STQLINTEGER* indPtr = qAutoDeleterData( (TQAutoDeleter<STQLINTEGER>*)tmpStorage.getFirst() );
- if ( !indPtr )
- return FALSE;
- bool isNull = (*indPtr == STQL_NULL_DATA);
- tmpStorage.removeFirst();
-
- TQVariant::Type type = extension()->values[ it.data() ].value.type();
- if ( isNull ) {
- TQVariant v;
- v.cast(type);
- extension()->values[ it.data() ].value = v;
- if (type != TQVariant::ByteArray)
- tmpStorage.removeFirst();
- continue;
- }
-
- switch (type) {
- case TQVariant::Date: {
- DATE_STRUCT * ds = qAutoDeleterData( (TQAutoDeleter<DATE_STRUCT>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( TQDate( ds->year, ds->month, ds->day ) );
- break; }
- case TQVariant::Time: {
- TIME_STRUCT * dt = qAutoDeleterData( (TQAutoDeleter<TIME_STRUCT>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( TQTime( dt->hour, dt->minute, dt->second ) );
- break; }
- case TQVariant::DateTime: {
- TIMESTAMP_STRUCT * dt = qAutoDeleterData( (TQAutoDeleter<TIMESTAMP_STRUCT>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( TQDateTime( TQDate( dt->year, dt->month, dt->day ),
- TQTime( dt->hour, dt->minute, dt->second ) ) );
- break; }
- case TQVariant::Int: {
- int * v = qAutoDeleterData( (TQAutoDeleter<int>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( *v );
- break; }
- case TQVariant::Double: {
- double * v = qAutoDeleterData( (TQAutoDeleter<double>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( *v );
- break; }
- case TQVariant::ByteArray:
- break;
- case TQVariant::String:
- if ( d->tqunicode ) {
- TQString * str = qAutoDeleterData( (TQAutoDeleter<TQString>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( *str );
- break;
- }
- // fall through
- default: {
- TQCString * str = qAutoDeleterData( (TQAutoDeleter<TQCString>*)tmpStorage.getFirst() );
- extension()->values[ it.data() ].value = TQVariant( *str );
- break; }
- }
- if (type != TQVariant::ByteArray)
- tmpStorage.removeFirst();
- }
- }
-
- return TRUE;
-}
-
-////////////////////////////////////////
-
-
-TQODBCDriver::TQODBCDriver( TQObject * parent, const char * name )
- : TQSqlDriver(parent,name ? name : "TQODBC")
-{
- init();
-}
-
-TQODBCDriver::TQODBCDriver( STQLHANDLE env, STQLHANDLE con, TQObject * parent, const char * name )
- : TQSqlDriver(parent,name ? name : "TQODBC")
-{
- init();
- d->hEnv = env;
- d->hDbc = con;
- if ( env && con ) {
- setOpen( TRUE );
- setOpenError( FALSE );
- }
-}
-
-void TQODBCDriver::init()
-{
- qSqlOpenExtDict()->insert( this, new TQODBCOpenExtension(this) );
- d = new TQODBCPrivate();
-}
-
-TQODBCDriver::~TQODBCDriver()
-{
- cleanup();
- delete d;
- if ( !qSqlOpenExtDict()->isEmpty() ) {
- TQSqlOpenExtension *ext = qSqlOpenExtDict()->take( this );
- delete ext;
- }
-}
-
-bool TQODBCDriver::hasFeature( DriverFeature f ) const
-{
- switch ( f ) {
- case Transactions: {
- if ( !d->hDbc )
- return FALSE;
- STQLUSMALLINT txn;
- STQLSMALLINT t;
- int r = STQLGetInfo( d->hDbc,
- (STQLUSMALLINT)STQL_TXN_CAPABLE,
- &txn,
- sizeof(txn),
- &t);
- if ( r != STQL_SUCCESS || txn == STQL_TC_NONE )
- return FALSE;
- else
- return TRUE;
- }
- case QuerySize:
- return FALSE;
- case BLOB:
- return TRUE;
- case Unicode:
- return d->tqunicode;
- case PreparedQueries:
- return TRUE;
- case PositionalPlaceholders:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-bool TQODBCDriver::open( const TQString&,
- const TQString&,
- const TQString&,
- const TQString&,
- int )
-{
- qWarning("TQODBCDriver::open(): This version of open() is no longer supported." );
- return FALSE;
-}
-
-bool TQODBCDriver::open( const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString &,
- int,
- const TQString& connOpts )
-{
- if ( isOpen() )
- close();
- STQLRETURN r;
- r = STQLAllocHandle( STQL_HANDLE_ENV,
- STQL_NULL_HANDLE,
- &d->hEnv);
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCDriver::open: Unable to allocate environment", d );
-#endif
- setOpenError( TRUE );
- return FALSE;
- }
- r = STQLSetEnvAttr( d->hEnv,
- STQL_ATTR_ODBC_VERSION,
- (STQLPOINTER)STQL_OV_ODBC2,
- STQL_IS_UINTEGER );
- r = STQLAllocHandle( STQL_HANDLE_DBC,
- d->hEnv,
- &d->hDbc);
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCDriver::open: Unable to allocate connection", d );
-#endif
- setOpenError( TRUE );
- return FALSE;
- }
-
- if ( !d->setConnectionOptions( connOpts ) )
- return FALSE;
-
- // Create the connection string
- TQString connTQStr;
- // support the "DRIVER={SQL SERVER};SERVER=blah" syntax
- if ( db.contains(".dsn") )
- connTQStr = "FILEDSN=" + db;
- else if ( db.contains( "DRIVER" ) || db.contains( "SERVER" ) )
- connTQStr = db;
- else
- connTQStr = "DSN=" + db;
- connTQStr += ";UID=" + user + ";PWD=" + password;
- STQLSMALLINT cb;
- STQLTCHAR connOut[1024];
- r = STQLDriverConnect( d->hDbc,
- NULL,
-#ifdef UNICODE
- (STQLWCHAR*)connTQStr.tqunicode(),
-#else
- (STQLCHAR*)connTQStr.latin1(),
-#endif
- (STQLSMALLINT)connTQStr.length(),
- connOut,
- 1024,
- &cb,
- STQL_DRIVER_NOPROMPT );
- if ( r != STQL_SUCCESS && r != STQL_SUCCESS_WITH_INFO ) {
- setLastError( qMakeError( "Unable to connect", TQSqlError::Connection, d ) );
- setOpenError( TRUE );
- return FALSE;
- }
-
- if ( !d->checkDriver() ) {
- setLastError( qMakeError( "Unable to connect - Driver doesn't support all needed functionality", TQSqlError::Connection, d ) );
- setOpenError( TRUE );
- return FALSE;
- }
-
- d->checkUnicode();
- d->checkSchemaUsage();
-
- setOpen( TRUE );
- setOpenError( FALSE );
- return TRUE;
-}
-
-void TQODBCDriver::close()
-{
- cleanup();
- setOpen( FALSE );
- setOpenError( FALSE );
-}
-
-void TQODBCDriver::cleanup()
-{
- STQLRETURN r;
- if ( !d )
- return;
-
- if( d->hDbc ) {
- // Open statements/descriptors handles are automatically cleaned up by STQLDisconnect
- if ( isOpen() ) {
- r = STQLDisconnect( d->hDbc );
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver::disconnect: Unable to disconnect datasource", d );
-#endif
- }
-
- r = STQLFreeHandle( STQL_HANDLE_DBC, d->hDbc );
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver::cleanup: Unable to free connection handle", d );
-#endif
- d->hDbc = 0;
- }
-
- if ( d->hEnv ) {
- r = STQLFreeHandle( STQL_HANDLE_ENV, d->hEnv );
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver::cleanup: Unable to free environment handle", d );
-#endif
- d->hEnv = 0;
- }
-}
-
-// checks whether the server can return char, varchar and longvarchar
-// as two byte tqunicode characters
-void TQODBCPrivate::checkUnicode()
-{
-#if defined(TQ_WS_WIN)
- if ( !qt_wintqunicode ) {
- tqunicode = FALSE;
- return;
- }
-#endif
- STQLRETURN r;
- STQLUINTEGER fFunc;
-
- tqunicode = FALSE;
- r = STQLGetInfo( hDbc,
- STQL_CONVERT_CHAR,
- (STQLPOINTER)&fFunc,
- sizeof(fFunc),
- NULL );
- if ( ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) && ( fFunc & STQL_CVT_WCHAR ) ) {
- sql_char_type = TQVariant::String;
- tqunicode = TRUE;
- }
-
- r = STQLGetInfo( hDbc,
- STQL_CONVERT_VARCHAR,
- (STQLPOINTER)&fFunc,
- sizeof(fFunc),
- NULL );
- if ( ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) && ( fFunc & STQL_CVT_WVARCHAR ) ) {
- sql_varchar_type = TQVariant::String;
- tqunicode = TRUE;
- }
-
- r = STQLGetInfo( hDbc,
- STQL_CONVERT_LONGVARCHAR,
- (STQLPOINTER)&fFunc,
- sizeof(fFunc),
- NULL );
- if ( ( r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO ) && ( fFunc & STQL_CVT_WLONGVARCHAR ) ) {
- sql_longvarchar_type = TQVariant::String;
- tqunicode = TRUE;
- }
-}
-
-bool TQODBCPrivate::checkDriver() const
-{
-#ifdef ODBC_CHECK_DRIVER
- // do not query for STQL_API_STQLFETCHSCROLL because it can't be used at this time
- static const STQLUSMALLINT reqFunc[] = {
- STQL_API_STQLDESCRIBECOL, STQL_API_STQLGETDATA, STQL_API_STQLCOLUMNS,
- STQL_API_STQLGETSTMTATTR, STQL_API_STQLGETDIAGREC, STQL_API_STQLEXECDIRECT,
- STQL_API_STQLGETINFO, STQL_API_STQLTABLES, 0
- };
-
- // these functions are optional
- static const STQLUSMALLINT optFunc[] = {
- STQL_API_STQLNUMRESULTCOLS, STQL_API_STQLROWCOUNT, 0
- };
-
- STQLRETURN r;
- STQLUSMALLINT sup;
-
-
- int i;
- // check the required functions
- for ( i = 0; reqFunc[ i ] != 0; ++i ) {
-
- r = STQLGetFunctions( hDbc, reqFunc[ i ], &sup );
-
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS ) {
- qSqlWarning( "TQODBCDriver::checkDriver: Cannot get list of supported functions", this );
- return FALSE;
- }
-#endif
- if ( sup == STQL_FALSE ) {
-#ifdef TQT_CHECK_RANGE
- qWarning ( "TQODBCDriver::open: Warning - Driver doesn't support all needed functionality (%d). "
- "Please look at the TQt SQL Module Driver documentation for more information.", reqFunc[ i ] );
-#endif
- return FALSE;
- }
- }
-
- // these functions are optional and just generate a warning
- for ( i = 0; optFunc[ i ] != 0; ++i ) {
-
- r = STQLGetFunctions( hDbc, optFunc[ i ], &sup );
-
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS ) {
- qSqlWarning( "TQODBCDriver::checkDriver: Cannot get list of supported functions", this );
- return FALSE;
- }
-#endif
- if ( sup == STQL_FALSE ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQODBCDriver::checkDriver: Warning - Driver doesn't support some non-critical functions (%d)", optFunc[ i ] );
-#endif
- return TRUE;
- }
- }
-#endif //ODBC_CHECK_DRIVER
-
- return TRUE;
-}
-
-void TQODBCPrivate::checkSchemaUsage()
-{
- STQLRETURN r;
- STQLUINTEGER val;
-
- r = STQLGetInfo(hDbc,
- STQL_SCHEMA_USAGE,
- (STQLPOINTER) &val,
- sizeof(val),
- NULL);
- if (r == STQL_SUCCESS || r == STQL_SUCCESS_WITH_INFO)
- useSchema = (val != 0);
-}
-
-TQSqlQuery TQODBCDriver::createQuery() const
-{
- return TQSqlQuery( new TQODBCResult( this, d ) );
-}
-
-bool TQODBCDriver::beginTransaction()
-{
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning(" TQODBCDriver::beginTransaction: Database not open" );
-#endif
- return FALSE;
- }
- STQLUINTEGER ac(STQL_AUTOCOMMIT_OFF);
- STQLRETURN r = STQLSetConnectAttr( d->hDbc,
- STQL_ATTR_AUTOCOMMIT,
- (STQLPOINTER)ac,
- sizeof(ac) );
- if ( r != STQL_SUCCESS ) {
- setLastError( qMakeError( "Unable to disable autocommit", TQSqlError::Transaction, d ) );
- return FALSE;
- }
- return TRUE;
-}
-
-bool TQODBCDriver::commitTransaction()
-{
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning(" TQODBCDriver::commitTransaction: Database not open" );
-#endif
- return FALSE;
- }
- STQLRETURN r = STQLEndTran( STQL_HANDLE_DBC,
- d->hDbc,
- STQL_COMMIT );
- if ( r != STQL_SUCCESS ) {
- setLastError( qMakeError("Unable to commit transaction", TQSqlError::Transaction, d ) );
- return FALSE;
- }
- return endTrans();
-}
-
-bool TQODBCDriver::rollbackTransaction()
-{
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning(" TQODBCDriver::rollbackTransaction: Database not open" );
-#endif
- return FALSE;
- }
- STQLRETURN r = STQLEndTran( STQL_HANDLE_DBC,
- d->hDbc,
- STQL_ROLLBACK );
- if ( r != STQL_SUCCESS ) {
- setLastError( qMakeError( "Unable to rollback transaction", TQSqlError::Transaction, d ) );
- return FALSE;
- }
- return endTrans();
-}
-
-bool TQODBCDriver::endTrans()
-{
- STQLUINTEGER ac(STQL_AUTOCOMMIT_ON);
- STQLRETURN r = STQLSetConnectAttr( d->hDbc,
- STQL_ATTR_AUTOCOMMIT,
- (STQLPOINTER)ac,
- sizeof(ac));
- if ( r != STQL_SUCCESS ) {
- setLastError( qMakeError( "Unable to enable autocommit", TQSqlError::Transaction, d ) );
- return FALSE;
- }
- return TRUE;
-}
-
-TQStringList TQODBCDriver::tables( const TQString& typeName ) const
-{
- TQStringList tl;
- if ( !isOpen() )
- return tl;
- int type = typeName.toInt();
- STQLHANDLE hStmt;
-
- STQLRETURN r = STQLAllocHandle( STQL_HANDLE_STMT,
- d->hDbc,
- &hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCDriver::tables: Unable to allocate handle", d );
-#endif
- return tl;
- }
- r = STQLSetStmtAttr( hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_FORWARD_ONLY,
- STQL_IS_UINTEGER );
- TQString tableType;
- if ( typeName.isEmpty() || ((type & (int)TQSql::Tables) == (int)TQSql::Tables) )
- tableType += "TABLE,";
- if ( (type & (int)TQSql::Views) == (int)TQSql::Views )
- tableType += "VIEW,";
- if ( (type & (int)TQSql::SystemTables) == (int)TQSql::SystemTables )
- tableType += "SYSTEM TABLE,";
- if ( tableType.isEmpty() )
- return tl;
- tableType.truncate( tableType.length() - 1 );
-
- r = STQLTables( hStmt,
- NULL,
- 0,
- NULL,
- 0,
- NULL,
- 0,
-#ifdef UNICODE
- (STQLWCHAR*)tableType.tqunicode(),
-#else
- (STQLCHAR*)tableType.latin1(),
-#endif
- tableType.length() /* characters, not bytes */ );
-
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver::tables Unable to execute table list", d );
-#endif
- r = STQLFetchScroll( hStmt,
- STQL_FETCH_NEXT,
- 0);
- while ( r == STQL_SUCCESS ) {
- bool isNull;
- TQString fieldVal = qGetStringData( hStmt, 2, -1, isNull, d->tqunicode );
- tl.append( fieldVal );
- r = STQLFetchScroll( hStmt,
- STQL_FETCH_NEXT,
- 0);
- }
-
- r = STQLFreeHandle( STQL_HANDLE_STMT, hStmt );
- if ( r!= STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver: Unable to free statement handle" + TQString::number(r), d );
- return tl;
-}
-
-TQSqlIndex TQODBCDriver::primaryIndex( const TQString& tablename ) const
-{
- TQSqlIndex index( tablename );
- if ( !isOpen() )
- return index;
- bool usingSpecialColumns = FALSE;
- TQSqlRecord rec = record( tablename );
-
- STQLHANDLE hStmt;
- STQLRETURN r = STQLAllocHandle( STQL_HANDLE_STMT,
- d->hDbc,
- &hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCDriver::primaryIndex: Unable to list primary key", d );
-#endif
- return index;
- }
- TQString catalog, schema, table;
- d->splitTableQualifier( tablename, catalog, schema, table );
- r = STQLSetStmtAttr( hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_FORWARD_ONLY,
- STQL_IS_UINTEGER );
- r = STQLPrimaryKeys( hStmt,
-#ifdef UNICODE
- catalog.length() == 0 ? NULL : (STQLWCHAR*)catalog.tqunicode(),
-#else
- catalog.length() == 0 ? NULL : (STQLCHAR*)catalog.latin1(),
-#endif
- catalog.length(),
-#ifdef UNICODE
- schema.length() == 0 ? NULL : (STQLWCHAR*)schema.tqunicode(),
-#else
- schema.length() == 0 ? NULL : (STQLCHAR*)schema.latin1(),
-#endif
- schema.length(),
-#ifdef UNICODE
- (STQLWCHAR*)table.tqunicode(),
-#else
- (STQLCHAR*)table.latin1(),
-#endif
- table.length() /* in characters, not in bytes */);
-
- // if the STQLPrimaryKeys() call does not succeed (e.g the driver
- // does not support it) - try an alternative method to get hold of
- // the primary index (e.g MS Access and FoxPro)
- if ( r != STQL_SUCCESS ) {
- r = STQLSpecialColumns( hStmt,
- STQL_BEST_ROWID,
-#ifdef UNICODE
- catalog.length() == 0 ? NULL : (STQLWCHAR*)catalog.tqunicode(),
-#else
- catalog.length() == 0 ? NULL : (STQLCHAR*)catalog.latin1(),
-#endif
- catalog.length(),
-#ifdef UNICODE
- schema.length() == 0 ? NULL : (STQLWCHAR*)schema.tqunicode(),
-#else
- schema.length() == 0 ? NULL : (STQLCHAR*)schema.latin1(),
-#endif
- schema.length(),
-#ifdef UNICODE
- (STQLWCHAR*)table.tqunicode(),
-#else
- (STQLCHAR*)table.latin1(),
-#endif
-
- table.length(),
- STQL_SCOPE_CURROW,
- STQL_NULLABLE );
-
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCDriver::primaryIndex: Unable to execute primary key list", d );
-#endif
- } else {
- usingSpecialColumns = TRUE;
- }
- }
- r = STQLFetchScroll( hStmt,
- STQL_FETCH_NEXT,
- 0 );
- bool isNull;
- int fakeId = 0;
- TQString cName, idxName;
- // Store all fields in a StringList because some drivers can't detail fields in this FETCH loop
- while ( r == STQL_SUCCESS ) {
- if ( usingSpecialColumns ) {
- cName = qGetStringData( hStmt, 1, -1, isNull, d->tqunicode ); // column name
- idxName = TQString::number( fakeId++ ); // invent a fake index name
- } else {
- cName = qGetStringData( hStmt, 3, -1, isNull, d->tqunicode ); // column name
- idxName = qGetStringData( hStmt, 5, -1, isNull, d->tqunicode ); // pk index name
- }
- TQSqlField *fld = rec.field(cName);
- if (fld)
- index.append(*fld);
- index.setName( idxName );
- r = STQLFetchScroll( hStmt,
- STQL_FETCH_NEXT,
- 0 );
- }
- r = STQLFreeHandle( STQL_HANDLE_STMT, hStmt );
- if ( r!= STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver: Unable to free statement handle" + TQString::number(r), d );
- return index;
-}
-
-TQSqlRecord TQODBCDriver::record( const TQString& tablename ) const
-{
- return recordInfo( tablename ).toRecord();
-}
-
-TQSqlRecord TQODBCDriver::record( const TQSqlQuery& query ) const
-{
- return recordInfo( query ).toRecord();
-}
-
-TQSqlRecordInfo TQODBCDriver::recordInfo( const TQString& tablename ) const
-{
- TQSqlRecordInfo fil;
- if ( !isOpen() )
- return fil;
-
- STQLHANDLE hStmt;
- TQString catalog, schema, table;
- d->splitTableQualifier( tablename, catalog, schema, table );
- STQLRETURN r = STQLAllocHandle( STQL_HANDLE_STMT,
- d->hDbc,
- &hStmt );
- if ( r != STQL_SUCCESS ) {
-#ifdef TQT_CHECK_RANGE
- qSqlWarning( "TQODBCDriver::record: Unable to allocate handle", d );
-#endif
- return fil;
- }
- r = STQLSetStmtAttr( hStmt,
- STQL_ATTR_CURSOR_TYPE,
- (STQLPOINTER)STQL_CURSOR_FORWARD_ONLY,
- STQL_IS_UINTEGER );
- r = STQLColumns( hStmt,
-#ifdef UNICODE
- catalog.length() == 0 ? NULL : (STQLWCHAR*)catalog.tqunicode(),
-#else
- catalog.length() == 0 ? NULL : (STQLCHAR*)catalog.latin1(),
-#endif
- catalog.length(),
-#ifdef UNICODE
- schema.length() == 0 ? NULL : (STQLWCHAR*)schema.tqunicode(),
-#else
- schema.length() == 0 ? NULL : (STQLCHAR*)schema.latin1(),
-#endif
- schema.length(),
-#ifdef UNICODE
- (STQLWCHAR*)table.tqunicode(),
-#else
- (STQLCHAR*)table.latin1(),
-#endif
- table.length(),
- NULL,
- 0 );
-#ifdef TQT_CHECK_RANGE
- if ( r != STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver::record: Unable to execute column list", d );
-#endif
- r = STQLFetchScroll( hStmt,
- STQL_FETCH_NEXT,
- 0);
- // Store all fields in a StringList because some drivers can't detail fields in this FETCH loop
- while ( r == STQL_SUCCESS ) {
-
- fil.append( qMakeFieldInfo( hStmt, d ) );
-
- r = STQLFetchScroll( hStmt,
- STQL_FETCH_NEXT,
- 0);
- }
-
- r = STQLFreeHandle( STQL_HANDLE_STMT, hStmt );
- if ( r!= STQL_SUCCESS )
- qSqlWarning( "TQODBCDriver: Unable to free statement handle " + TQString::number(r), d );
-
- return fil;
-}
-
-TQSqlRecordInfo TQODBCDriver::recordInfo( const TQSqlQuery& query ) const
-{
- TQSqlRecordInfo fil;
- if ( !isOpen() )
- return fil;
- if ( query.isActive() && query.driver() == this ) {
- TQODBCResult* result = (TQODBCResult*)query.result();
- fil = result->d->rInf;
- }
- return fil;
-}
-
-STQLHANDLE TQODBCDriver::environment()
-{
- return d->hEnv;
-}
-
-STQLHANDLE TQODBCDriver::connection()
-{
- return d->hDbc;
-}
-
-TQString TQODBCDriver::formatValue( const TQSqlField* field,
- bool trimStrings ) const
-{
- TQString r;
- if ( field->isNull() ) {
- r = nullText();
- } else if ( field->type() == TQVariant::DateTime ) {
- // Use an escape sequence for the datetime fields
- if ( field->value().toDateTime().isValid() ){
- TQDate dt = field->value().toDateTime().date();
- TQTime tm = field->value().toDateTime().time();
- // Dateformat has to be "yyyy-MM-dd hh:mm:ss", with leading zeroes if month or day < 10
- r = "{ ts '" +
- TQString::number(dt.year()) + "-" +
- TQString::number(dt.month()).rightJustify( 2, '0', TRUE ) + "-" +
- TQString::number(dt.day()).rightJustify( 2, '0', TRUE ) + " " +
- tm.toString() +
- "' }";
- } else
- r = nullText();
- } else if ( field->type() == TQVariant::ByteArray ) {
- TQByteArray ba = field->value().toByteArray();
- TQString res;
- static const char hexchars[] = "0123456789abcdef";
- for ( uint i = 0; i < ba.size(); ++i ) {
- uchar s = (uchar) ba[(int)i];
- res += hexchars[s >> 4];
- res += hexchars[s & 0x0f];
- }
- r = "0x" + res;
- } else {
- r = TQSqlDriver::formatValue( field, trimStrings );
- }
- return r;
-}
diff --git a/tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.h b/tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.h
deleted file mode 100644
index cb09743..0000000
--- a/tqtinterface/qt4/src/sql/drivers/odbc/tqsql_odbc.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/****************************************************************************
-**
-** Definition of ODBC driver classes
-**
-** Created : 001103
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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.
-**
-**********************************************************************/
-
-#ifndef TQSQL_ODBC_H
-#define TQSQL_ODBC_H
-
-#include <tqmap.h>
-#include <tqstring.h>
-#include <tqsqldriver.h>
-#include <tqsqlfield.h>
-#include <tqsqlresult.h>
-#include <tqsqlindex.h>
-
-#if defined (TQ_OS_WIN32)
-#include <tqt_windows.h>
-#endif
-
-#if defined (TQ_OS_MAC)
-// assume we use iodbc on MAC
-// comment next line out if you use a
-// tqunicode compatible manager
-# define TQ_ODBC_VERSION_2
-#endif
-
-#ifdef TQT_PLUGIN
-#define TQ_EXPORT_STQLDRIVER_ODBC
-#else
-#define TQ_EXPORT_STQLDRIVER_ODBC TQ_EXPORT
-#endif
-
-#ifdef TQ_OS_UNIX
-#define HAVE_LONG_LONG 1 // force UnixODBC NOT to fall back to a struct for BIGINTs
-#endif
-
-#if defined(TQ_CC_BOR)
-// workaround for Borland to make sure that STQLBIGINT is defined
-# define _MSC_VER 900
-#endif
-#include <sql.h>
-#if defined(TQ_CC_BOR)
-# undef _MSC_VER
-#endif
-
-#ifndef TQ_ODBC_VERSION_2
-#include <sqlucode.h>
-#endif
-
-#include <sqlext.h>
-
-class TQODBCPrivate;
-class TQODBCDriver;
-class TQSqlRecordInfo;
-
-class TQODBCResult : public TQSqlResult
-{
- friend class TQODBCDriver;
-public:
- TQODBCResult( const TQODBCDriver * db, TQODBCPrivate* p );
- ~TQODBCResult();
-
- STQLHANDLE statement();
- bool prepare( const TQString& query );
- bool exec();
-
-protected:
- bool fetchNext();
- bool fetchFirst();
- bool fetchLast();
- bool fetchPrior();
- bool fetch(int i);
- bool reset ( const TQString& query );
- TQVariant data( int field );
- bool isNull( int field );
- int size();
- int numRowsAffected();
-private:
- TQODBCPrivate* d;
- typedef TQMap<int,TQVariant> FieldCache;
- FieldCache fieldCache;
- typedef TQMap<int,bool> NullCache;
- NullCache nullCache;
-};
-
-class TQ_EXPORT_STQLDRIVER_ODBC TQODBCDriver : public TQSqlDriver
-{
-public:
- TQODBCDriver( TQObject * parent=0, const char * name=0 );
- TQODBCDriver( STQLHANDLE env, STQLHANDLE con, TQObject * parent=0, const char * name=0 );
- ~TQODBCDriver();
- bool hasFeature( DriverFeature f ) const;
- bool open( const TQString & db,
- const TQString & user = TQString::null,
- const TQString & password = TQString::null,
- const TQString & host = TQString::null,
- int port = -1 );
- void close();
- TQSqlQuery createQuery() const;
- TQStringList tables( const TQString& user ) const;
- TQSqlRecord record( const TQString& tablename ) const;
- TQSqlRecord record( const TQSqlQuery& query ) const;
- TQSqlRecordInfo recordInfo( const TQString& tablename ) const;
- TQSqlRecordInfo recordInfo( const TQSqlQuery& query ) const;
- TQSqlIndex primaryIndex( const TQString& tablename ) const;
- STQLHANDLE environment();
- STQLHANDLE connection();
-
- TQString formatValue( const TQSqlField* field,
- bool trimStrings ) const;
- // ### remove me for 4.0
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-
-protected:
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
-private:
- void init();
- bool endTrans();
- void cleanup();
- TQODBCPrivate* d;
-};
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.cpp b/tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.cpp
deleted file mode 100644
index 7809749..0000000
--- a/tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.cpp
+++ /dev/null
@@ -1,1117 +0,0 @@
-/****************************************************************************
-**
-** Implementation of PostgreSQL driver classes
-**
-** Created : 001103
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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 "tqsql_psql.h"
-#include <private/tqsqlextension_p.h>
-
-#include <math.h>
-
-#include <tqpointarray.h>
-#include <tqsqlrecord.h>
-#include <tqregexp.h>
-#include <tqdatetime.h>
-// PostgreSQL header <utils/elog.h> included by <postgres.h> redefines DEBUG.
-#if defined(DEBUG)
-# undef DEBUG
-#endif
-#include <postgres.h>
-#include <libpq/libpq-fs.h>
-// PostgreSQL header <catalog/pg_type.h> redefines errno erroneously.
-#if defined(errno)
-# undef errno
-#endif
-#define errno qt_psql_errno
-#include <catalog/pg_type.h>
-#undef errno
-#ifdef open
-# undef open
-#endif
-
-TQPtrDict<TQSqlDriverExtension> *qSqlDriverExtDict();
-TQPtrDict<TQSqlOpenExtension> *qSqlOpenExtDict();
-
-class TQPSTQLPrivate
-{
-public:
- TQPSTQLPrivate():connection(0), result(0), isUtf8(FALSE) {}
- PGconn *connection;
- PGresult *result;
- bool isUtf8;
-};
-
-class TQPSTQLDriverExtension : public TQSqlDriverExtension
-{
-public:
- TQPSTQLDriverExtension( TQPSTQLDriver *dri )
- : TQSqlDriverExtension(), driver(dri) { }
- ~TQPSTQLDriverExtension() {}
-
- bool isOpen() const;
-private:
- TQPSTQLDriver *driver;
-};
-
-bool TQPSTQLDriverExtension::isOpen() const
-{
- return PQstatus( driver->connection() ) == CONNECTION_OK;
-}
-
-class TQPSTQLOpenExtension : public TQSqlOpenExtension
-{
-public:
- TQPSTQLOpenExtension( TQPSTQLDriver *dri )
- : TQSqlOpenExtension(), driver(dri) { }
- ~TQPSTQLOpenExtension() {}
-
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-private:
- TQPSTQLDriver *driver;
-};
-
-bool TQPSTQLOpenExtension::open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts )
-{
- return driver->open( db, user, password, host, port, connOpts );
-}
-
-static TQSqlError qMakeError( const TQString& err, int type, const TQPSTQLPrivate* p )
-{
- const char *s = PQerrorMessage(p->connection);
- TQString msg = p->isUtf8 ? TQString::fromUtf8(s) : TQString::fromLocal8Bit(s);
- return TQSqlError("TQPSQL: " + err, msg, type);
-}
-
-static TQVariant::Type qDecodePSTQLType( int t )
-{
- TQVariant::Type type = TQVariant::Invalid;
- switch ( t ) {
- case BOOLOID :
- type = TQVariant::Bool;
- break;
- case INT8OID :
- type = TQVariant::LongLong;
- break;
- case INT2OID :
- // case INT2VECTOROID : // 7.x
- case INT4OID :
- type = TQVariant::Int;
- break;
- case NUMERICOID :
- case FLOAT4OID :
- case FLOAT8OID :
- type = TQVariant::Double;
- break;
- case ABSTIMEOID :
- case RELTIMEOID :
- case DATEOID :
- type = TQVariant::Date;
- break;
- case TIMEOID :
-#ifdef TIMETZOID // 7.x
- case TIMETZOID :
-#endif
- type = TQVariant::Time;
- break;
- case TIMESTAMPOID :
-#ifdef DATETIMEOID
- // Postgres 6.x datetime workaround.
- // DATETIMEOID == TIMESTAMPOID (only the names have changed)
- case DATETIMEOID :
-#endif
-#ifdef TIMESTAMPTZOID
- // Postgres 7.2 workaround
- // TIMESTAMPTZOID == TIMESTAMPOID == DATETIMEOID
- case TIMESTAMPTZOID :
-#endif
- type = TQVariant::DateTime;
- break;
- // case ZPBITOID : // 7.x
- // case VARBITOID : // 7.x
- case OIDOID :
- case BYTEAOID :
- type = TQVariant::ByteArray;
- break;
- case REGPROCOID :
- case TIDOID :
- case XIDOID :
- case CIDOID :
- // case OIDVECTOROID : // 7.x
- case UNKNOWNOID :
- // case TINTERVALOID : // 7.x
- type = TQVariant::Invalid;
- break;
- default:
- case CHAROID :
- case BPCHAROID :
- // case LZTEXTOID : // 7.x
- case VARCHAROID :
- case TEXTOID :
- case NAMEOID :
- case CASHOID :
- case INETOID :
- case CIDROID :
- case CIRCLEOID :
- type = TQVariant::String;
- break;
- }
- return type;
-}
-
-TQPSTQLResult::TQPSTQLResult( const TQPSTQLDriver* db, const TQPSTQLPrivate* p )
-: TQSqlResult( db ),
- currentSize( 0 )
-{
- d = new TQPSTQLPrivate();
- (*d) = (*p);
-}
-
-TQPSTQLResult::~TQPSTQLResult()
-{
- cleanup();
- delete d;
-}
-
-PGresult* TQPSTQLResult::result()
-{
- return d->result;
-}
-
-void TQPSTQLResult::cleanup()
-{
- if ( d->result )
- PQclear( d->result );
- d->result = 0;
- setAt( -1 );
- currentSize = 0;
- setActive( FALSE );
-}
-
-bool TQPSTQLResult::fetch( int i )
-{
- if ( !isActive() )
- return FALSE;
- if ( i < 0 )
- return FALSE;
- if ( i >= currentSize )
- return FALSE;
- if ( at() == i )
- return TRUE;
- setAt( i );
- return TRUE;
-}
-
-bool TQPSTQLResult::fetchFirst()
-{
- return fetch( 0 );
-}
-
-bool TQPSTQLResult::fetchLast()
-{
- return fetch( PQntuples( d->result ) - 1 );
-}
-
-// some Postgres conversions
-static TQPoint pointFromString( const TQString& s)
-{
- // format '(x,y)'
- int pivot = s.find( ',' );
- if ( pivot != -1 ) {
- int x = s.mid( 1, pivot-1 ).toInt();
- int y = s.mid( pivot+1, s.length()-pivot-2 ).toInt();
- return TQPoint( x, y ) ;
- } else
- return TQPoint();
-}
-
-TQVariant TQPSTQLResult::data( int i )
-{
- if ( i >= PQnfields( d->result ) ) {
- qWarning( "TQPSTQLResult::data: column %d out of range", i );
- return TQVariant();
- }
- int ptype = PQftype( d->result, i );
- TQVariant::Type type = qDecodePSTQLType( ptype );
- const TQString val = ( d->isUtf8 && ptype != BYTEAOID ) ?
- TQString::fromUtf8( PQgetvalue( d->result, at(), i ) ) :
- TQString::fromLocal8Bit( PQgetvalue( d->result, at(), i ) );
- if ( PQgetisnull( d->result, at(), i ) ) {
- TQVariant v;
- v.cast( type );
- return v;
- }
- switch ( type ) {
- case TQVariant::Bool:
- {
- TQVariant b ( (bool)(val == "t"), 0 );
- return ( b );
- }
- case TQVariant::String:
- return TQVariant( val );
- case TQVariant::LongLong:
- if ( val[0] == '-' )
- return TQVariant( val.toLongLong() );
- else
- return TQVariant( val.toULongLong() );
- case TQVariant::Int:
- return TQVariant( val.toInt() );
- case TQVariant::Double:
- if ( ptype == NUMERICOID )
- return TQVariant( val );
- return TQVariant( val.toDouble() );
- case TQVariant::Date:
- if ( val.isEmpty() ) {
- return TQVariant( TQDate() );
- } else {
- return TQVariant( TQDate::fromString( val, TQt::ISODate ) );
- }
- case TQVariant::Time:
- if ( val.isEmpty() )
- return TQVariant( TQTime() );
- if ( val.at( val.length() - 3 ) == '+' )
- // strip the timezone
- return TQVariant( TQTime::fromString( val.left( val.length() - 3 ), TQt::ISODate ) );
- return TQVariant( TQTime::fromString( val, TQt::ISODate ) );
- case TQVariant::DateTime: {
- if ( val.length() < 10 )
- return TQVariant( TQDateTime() );
- // remove the timezone
- TQString dtval = val;
- if ( dtval.at( dtval.length() - 3 ) == '+' )
- dtval.truncate( dtval.length() - 3 );
- // milliseconds are sometimes returned with 2 digits only
- if ( dtval.at( dtval.length() - 3 ).isPunct() )
- dtval += '0';
- if ( dtval.isEmpty() )
- return TQVariant( TQDateTime() );
- else
- return TQVariant( TQDateTime::fromString( dtval, TQt::ISODate ) );
- }
- case TQVariant::Point:
- return TQVariant( pointFromString( val ) );
- case TQVariant::Rect: // format '(x,y),(x',y')'
- {
- int pivot = val.find( "),(" );
- if ( pivot != -1 )
- return TQVariant( TQRect( pointFromString( val.mid(pivot+2,val.length()) ), pointFromString( val.mid(0,pivot+1) ) ) );
- return TQVariant( TQRect() );
- }
- case TQVariant::PointArray: // format '((x,y),(x1,y1),...,(xn,yn))'
- {
- TQRegExp pointPattern("\\([0-9-]*,[0-9-]*\\)");
- int points = val.contains( pointPattern );
- TQPointArray parray( points );
- int idx = 1;
- for ( int i = 0; i < points; i++ ){
- int start = val.find( pointPattern, idx );
- int end = -1;
- if ( start != -1 ) {
- end = val.find( ')', start+1 );
- if ( end != -1 ) {
- parray.setPoint( i, pointFromString( val.mid(idx, end-idx+1) ) );
- }
- else
- parray.setPoint( i, TQPoint() );
- } else {
- parray.setPoint( i, TQPoint() );
- break;
- }
- idx = end+2;
- }
- return TQVariant( parray );
- }
- case TQVariant::ByteArray: {
- if ( ptype == BYTEAOID ) {
- uint i = 0;
- int index = 0;
- uint len = val.length();
- static const TQChar backslash( '\\' );
- TQByteArray ba( (int)len );
- while ( i < len ) {
- if ( val.at( i ) == backslash ) {
- if ( val.at( i + 1 ).isDigit() ) {
- ba[ index++ ] = (char)(val.mid( i + 1, 3 ).toInt( 0, 8 ));
- i += 4;
- } else {
- ba[ index++ ] = val.at( i + 1 );
- i += 2;
- }
- } else {
- ba[ index++ ] = val.at( i++ ).tqunicode();
- }
- }
- ba.resize( index );
- return TQVariant( ba );
- }
-
- TQByteArray ba;
- ((TQSqlDriver*)driver())->beginTransaction();
- Oid oid = val.toInt();
- int fd = lo_open( d->connection, oid, INV_READ );
-#ifdef TQT_CHECK_RANGE
- if ( fd < 0) {
- qWarning( "TQPSTQLResult::data: unable to open large object for read" );
- ((TQSqlDriver*)driver())->commitTransaction();
- return TQVariant( ba );
- }
-#endif
- int size = 0;
- int retval = lo_lseek( d->connection, fd, 0L, SEEK_END );
- if ( retval >= 0 ) {
- size = lo_tell( d->connection, fd );
- lo_lseek( d->connection, fd, 0L, SEEK_SET );
- }
- if ( size == 0 ) {
- lo_close( d->connection, fd );
- ((TQSqlDriver*)driver())->commitTransaction();
- return TQVariant( ba );
- }
- char * buf = new char[ size ];
-
-#ifdef TQ_OS_WIN32
- // ### For some reason lo_read() fails if we try to read more than
- // ### 32760 bytes
- char * p = buf;
- int nread = 0;
-
- while( size < nread ){
- retval = lo_read( d->connection, fd, p, 32760 );
- nread += retval;
- p += retval;
- }
-#else
- retval = lo_read( d->connection, fd, buf, size );
-#endif
-
- if (retval < 0) {
- qWarning( "TQPSTQLResult::data: unable to read large object" );
- } else {
- ba.duplicate( buf, size );
- }
- delete [] buf;
- lo_close( d->connection, fd );
- ((TQSqlDriver*)driver())->commitTransaction();
- return TQVariant( ba );
- }
- default:
- case TQVariant::Invalid:
-#ifdef TQT_CHECK_RANGE
- qWarning("TQPSTQLResult::data: unknown data type");
-#endif
- ;
- }
- return TQVariant();
-}
-
-bool TQPSTQLResult::isNull( int field )
-{
- PQgetvalue( d->result, at(), field );
- return PQgetisnull( d->result, at(), field );
-}
-
-bool TQPSTQLResult::reset ( const TQString& query )
-{
- cleanup();
- if ( !driver() )
- return FALSE;
- if ( !driver()->isOpen() || driver()->isOpenError() )
- return FALSE;
- setActive( FALSE );
- setAt( TQSql::BeforeFirst );
- if ( d->result )
- PQclear( d->result );
- if ( d->isUtf8 ) {
- d->result = PQexec( d->connection, query.utf8().data() );
- } else {
- d->result = PQexec( d->connection, query.local8Bit().data() );
- }
- int status = PQresultqStatus( d->result );
- if ( status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK ) {
- if ( status == PGRES_TUPLES_OK ) {
- setSelect( TRUE );
- currentSize = PQntuples( d->result );
- } else {
- setSelect( FALSE );
- currentSize = -1;
- }
- setActive( TRUE );
- return TRUE;
- }
- setLastError( qMakeError( "Unable to create query", TQSqlError::Statement, d ) );
- return FALSE;
-}
-
-int TQPSTQLResult::size()
-{
- return currentSize;
-}
-
-int TQPSTQLResult::numRowsAffected()
-{
- return TQString( PQcmdTuples( d->result ) ).toInt();
-}
-
-///////////////////////////////////////////////////////////////////
-
-static bool setEncodingUtf8( PGconn* connection )
-{
- PGresult* result = PQexec( connection, "SET CLIENT_ENCODING TO 'UNICODE'" );
- int status = PQresultqStatus( result );
- PQclear( result );
- return status == PGRES_COMMAND_OK;
-}
-
-static void setDatestyle( PGconn* connection )
-{
- PGresult* result = PQexec( connection, "SET DATESTYLE TO 'ISO'" );
-#ifdef TQT_CHECK_RANGE
- int status = PQresultqStatus( result );
- if ( status != PGRES_COMMAND_OK )
- qWarning( "%s", PQerrorMessage( connection ) );
-#endif
- PQclear( result );
-}
-
-static TQPSTQLDriver::Protocol getPSTQLVersion( PGconn* connection )
-{
- PGresult* result = PQexec( connection, "select version()" );
- int status = PQresultqStatus( result );
- if ( status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK ) {
- TQString val( PQgetvalue( result, 0, 0 ) );
- PQclear( result );
- TQRegExp rx( "(\\d+)\\.(\\d+)" );
- rx.setMinimal ( TRUE ); // enforce non-greedy RegExp
- if ( rx.search( val ) != -1 ) {
- int vMaj = rx.cap( 1 ).toInt();
- int vMin = rx.cap( 2 ).toInt();
- if ( vMaj < 6 ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "This version of PostgreSQL is not supported and may not work." );
-#endif
- return TQPSTQLDriver::Version6;
- }
- if ( vMaj == 6 ) {
- return TQPSTQLDriver::Version6;
- } else if ( vMaj == 7 ) {
- if ( vMin < 1 )
- return TQPSTQLDriver::Version7;
- else if ( vMin < 3 )
- return TQPSTQLDriver::Version71;
- }
- return TQPSTQLDriver::Version73;
- }
- } else {
-#ifdef TQT_CHECK_RANGE
- qWarning( "This version of PostgreSQL is not supported and may not work." );
-#endif
- }
-
- return TQPSTQLDriver::Version6;
-}
-
-TQPSTQLDriver::TQPSTQLDriver( TQObject * parent, const char * name )
- : TQSqlDriver(parent,name ? name : "TQPSQL"), pro( TQPSTQLDriver::Version6 )
-{
- init();
-}
-
-TQPSTQLDriver::TQPSTQLDriver( PGconn * conn, TQObject * parent, const char * name )
- : TQSqlDriver(parent,name ? name : "TQPSQL"), pro( TQPSTQLDriver::Version6 )
-{
- init();
- d->connection = conn;
- if ( conn ) {
- pro = getPSTQLVersion( d->connection );
- setOpen( TRUE );
- setOpenError( FALSE );
- }
-}
-
-void TQPSTQLDriver::init()
-{
- qSqlDriverExtDict()->insert( this, new TQPSTQLDriverExtension(this) );
- qSqlOpenExtDict()->insert( this, new TQPSTQLOpenExtension(this) );
-
- d = new TQPSTQLPrivate();
-}
-
-TQPSTQLDriver::~TQPSTQLDriver()
-{
- if ( d->connection )
- PQfinish( d->connection );
- delete d;
- if ( !qSqlDriverExtDict()->isEmpty() ) {
- TQSqlDriverExtension *ext = qSqlDriverExtDict()->take( this );
- delete ext;
- }
- if ( !qSqlOpenExtDict()->isEmpty() ) {
- TQSqlOpenExtension *ext = qSqlOpenExtDict()->take( this );
- delete ext;
- }
-}
-
-PGconn* TQPSTQLDriver::connection()
-{
- return d->connection;
-}
-
-
-bool TQPSTQLDriver::hasFeature( DriverFeature f ) const
-{
- switch ( f ) {
- case Transactions:
- return TRUE;
- case QuerySize:
- return TRUE;
- case BLOB:
- return pro >= TQPSTQLDriver::Version71;
- case Unicode:
- return d->isUtf8;
- default:
- return FALSE;
- }
-}
-
-bool TQPSTQLDriver::open( const TQString&,
- const TQString&,
- const TQString&,
- const TQString&,
- int )
-{
- qWarning("TQPSTQLDriver::open(): This version of open() is no longer supported." );
- return FALSE;
-}
-
-bool TQPSTQLDriver::open( const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString & host,
- int port,
- const TQString& connOpts )
-{
- if ( isOpen() )
- close();
- TQString connectString;
- if ( host.length() )
- connectString.append( "host=" ).append( host );
- if ( db.length() )
- connectString.append( " dbname=" ).append( db );
- if ( user.length() )
- connectString.append( " user=" ).append( user );
- if ( password.length() )
- connectString.append( " password=" ).append( password );
- if ( port > -1 )
- connectString.append( " port=" ).append( TQString::number( port ) );
-
- // add any connect options - the server will handle error detection
- if ( !connOpts.isEmpty() )
- connectString += " " + TQStringList::split( ';', connOpts ).join( " " );
-
- d->connection = PQconnectdb( connectString.local8Bit().data() );
- if ( PQstatus( d->connection ) == CONNECTION_BAD ) {
- setLastError( qMakeError("Unable to connect", TQSqlError::Connection, d ) );
- setOpenError( TRUE );
- return FALSE;
- }
-
- pro = getPSTQLVersion( d->connection );
- d->isUtf8 = setEncodingUtf8( d->connection );
- setDatestyle( d->connection );
-
- setOpen( TRUE );
- setOpenError( FALSE );
- return TRUE;
-}
-
-void TQPSTQLDriver::close()
-{
- if ( isOpen() ) {
- if (d->connection)
- PQfinish( d->connection );
- d->connection = 0;
- setOpen( FALSE );
- setOpenError( FALSE );
- }
-}
-
-TQSqlQuery TQPSTQLDriver::createQuery() const
-{
- return TQSqlQuery( new TQPSTQLResult( this, d ) );
-}
-
-bool TQPSTQLDriver::beginTransaction()
-{
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQPSTQLDriver::beginTransaction: Database not open" );
-#endif
- return FALSE;
- }
- PGresult* res = PQexec( d->connection, "BEGIN" );
- if ( !res || PQresultqStatus( res ) != PGRES_COMMAND_OK ) {
- PQclear( res );
- setLastError( qMakeError( "Could not begin transaction", TQSqlError::Transaction, d ) );
- return FALSE;
- }
- PQclear( res );
- return TRUE;
-}
-
-bool TQPSTQLDriver::commitTransaction()
-{
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQPSTQLDriver::commitTransaction: Database not open" );
-#endif
- return FALSE;
- }
- PGresult* res = PQexec( d->connection, "COMMIT" );
- if ( !res || PQresultqStatus( res ) != PGRES_COMMAND_OK ) {
- PQclear( res );
- setLastError( qMakeError( "Could not commit transaction", TQSqlError::Transaction, d ) );
- return FALSE;
- }
- PQclear( res );
- return TRUE;
-}
-
-bool TQPSTQLDriver::rollbackTransaction()
-{
- if ( !isOpen() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQPSTQLDriver::rollbackTransaction: Database not open" );
-#endif
- return FALSE;
- }
- PGresult* res = PQexec( d->connection, "ROLLBACK" );
- if ( !res || PQresultqStatus( res ) != PGRES_COMMAND_OK ) {
- setLastError( qMakeError( "Could not rollback transaction", TQSqlError::Transaction, d ) );
- PQclear( res );
- return FALSE;
- }
- PQclear( res );
- return TRUE;
-}
-
-TQStringList TQPSTQLDriver::tables( const TQString& typeName ) const
-{
- TQStringList tl;
- if ( !isOpen() )
- return tl;
- int type = typeName.toInt();
- TQSqlQuery t = createQuery();
- t.setForwardOnly( TRUE );
-
- if ( typeName.isEmpty() || ((type & (int)TQSql::Tables) == (int)TQSql::Tables) ) {
-
- TQString query("select relname from pg_class where (relkind = 'r') "
- "and (relname !~ '^Inv') "
- "and (relname !~ '^pg_') ");
- if (pro >= TQPSTQLDriver::Version73)
- query.append("and (relnamespace not in "
- "(select oid from pg_namespace where nspname = 'information_schema')) "
- "and pg_table_is_visible(pg_class.oid) ");
- t.exec(query);
- while ( t.next() )
- tl.append( t.value(0).toString() );
- }
- if ( (type & (int)TQSql::Views) == (int)TQSql::Views ) {
- TQString query("select relname from pg_class where ( relkind = 'v' ) "
- "and ( relname !~ '^Inv' ) "
- "and ( relname !~ '^pg_' ) ");
- if (pro >= TQPSTQLDriver::Version73)
- query.append("and (relnamespace not in "
- "(select oid from pg_namespace where nspname = 'information_schema')) "
- "and pg_table_is_visible(pg_class.oid) ");
- t.exec(query);
- while ( t.next() )
- tl.append( t.value(0).toString() );
- }
- if ( (type & (int)TQSql::SystemTables) == (int)TQSql::SystemTables ) {
- TQString query( "select relname from pg_class where ( relkind = 'r' ) "
- "and ( relname like 'pg_%' ) " );
- if (pro >= TQPSTQLDriver::Version73)
- query.append( "and pg_table_is_visible(pg_class.oid) " );
- t.exec(query);
- while ( t.next() )
- tl.append( t.value(0).toString() );
- }
-
- return tl;
-}
-
-TQSqlIndex TQPSTQLDriver::primaryIndex( const TQString& tablename ) const
-{
- TQSqlIndex idx( tablename );
- if ( !isOpen() )
- return idx;
- TQSqlQuery i = createQuery();
- TQString stmt;
-
- switch( pro ) {
- case TQPSTQLDriver::Version6:
- stmt = "select pg_att1.attname, int(pg_att1.atttypid), pg_att2.attnum, pg_cl.relname "
- "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
- "where lower(pg_cl.relname) = '%1_pkey' ";
- break;
- case TQPSTQLDriver::Version7:
- case TQPSTQLDriver::Version71:
- stmt = "select pg_att1.attname, pg_att1.atttypid::int, pg_cl.relname "
- "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
- "where lower(pg_cl.relname) = '%1_pkey' ";
- break;
- case TQPSTQLDriver::Version73:
- stmt = "select pg_att1.attname, pg_att1.atttypid::int, pg_cl.relname "
- "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
- "where lower(pg_cl.relname) = '%1_pkey' "
- "and pg_table_is_visible(pg_cl.oid) "
- "and pg_att1.attisdropped = false ";
- break;
- }
- stmt += "and pg_cl.oid = pg_ind.indexrelid "
- "and pg_att2.attrelid = pg_ind.indexrelid "
- "and pg_att1.attrelid = pg_ind.indrelid "
- "and pg_att1.attnum = pg_ind.indkey[pg_att2.attnum-1] "
- "order by pg_att2.attnum";
-
- i.exec( stmt.arg( tablename.lower() ) );
- while ( i.isActive() && i.next() ) {
- TQSqlField f( i.value(0).toString(), qDecodePSTQLType( i.value(1).toInt() ) );
- idx.append( f );
- idx.setName( i.value(2).toString() );
- }
- return idx;
-}
-
-TQSqlRecord TQPSTQLDriver::record( const TQString& tablename ) const
-{
- TQSqlRecord fil;
- if ( !isOpen() )
- return fil;
- TQString stmt;
- switch( pro ) {
- case TQPSTQLDriver::Version6:
- stmt = "select pg_attribute.attname, int(pg_attribute.atttypid) "
- "from pg_class, pg_attribute "
- "where lower(pg_class.relname) = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid ";
- break;
- case TQPSTQLDriver::Version7:
- case TQPSTQLDriver::Version71:
- stmt = "select pg_attribute.attname, pg_attribute.atttypid::int "
- "from pg_class, pg_attribute "
- "where lower(pg_class.relname) = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid ";
- break;
- case TQPSTQLDriver::Version73:
- stmt = "select pg_attribute.attname, pg_attribute.atttypid::int "
- "from pg_class, pg_attribute "
- "where lower(pg_class.relname) = '%1' "
- "and pg_table_is_visible(pg_class.oid) "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attisdropped = false "
- "and pg_attribute.attrelid = pg_class.oid ";
- break;
- }
-
- TQSqlQuery fi = createQuery();
- fi.exec( stmt.arg( tablename.lower() ) );
- while ( fi.next() ) {
- TQSqlField f( fi.value(0).toString(), qDecodePSTQLType( fi.value(1).toInt() ) );
- fil.append( f );
- }
- return fil;
-}
-
-TQSqlRecord TQPSTQLDriver::record( const TQSqlQuery& query ) const
-{
- TQSqlRecord fil;
- if ( !isOpen() )
- return fil;
- if ( query.isActive() && query.driver() == this ) {
- TQPSTQLResult* result = (TQPSTQLResult*)query.result();
- int count = PQnfields( result->d->result );
- for ( int i = 0; i < count; ++i ) {
- TQString name = PQfname( result->d->result, i );
- TQVariant::Type type = qDecodePSTQLType( PQftype( result->d->result, i ) );
- TQSqlField rf( name, type );
- fil.append( rf );
- }
- }
- return fil;
-}
-
-TQSqlRecordInfo TQPSTQLDriver::recordInfo( const TQString& tablename ) const
-{
- TQSqlRecordInfo info;
- if ( !isOpen() )
- return info;
-
- TQString stmt;
- switch( pro ) {
- case TQPSTQLDriver::Version6:
- stmt = "select pg_attribute.attname, int(pg_attribute.atttypid), pg_attribute.attnotnull, "
- "pg_attribute.attlen, pg_attribute.atttypmod, int(pg_attribute.attrelid), pg_attribute.attnum "
- "from pg_class, pg_attribute "
- "where lower(pg_class.relname) = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid ";
- break;
- case TQPSTQLDriver::Version7:
- stmt = "select pg_attribute.attname, pg_attribute.atttypid::int, pg_attribute.attnotnull, "
- "pg_attribute.attlen, pg_attribute.atttypmod, pg_attribute.attrelid::int, pg_attribute.attnum "
- "from pg_class, pg_attribute "
- "where lower(pg_class.relname) = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid ";
- break;
- case TQPSTQLDriver::Version71:
- stmt = "select pg_attribute.attname, pg_attribute.atttypid::int, pg_attribute.attnotnull, "
- "pg_attribute.attlen, pg_attribute.atttypmod, pg_attrdef.adsrc "
- "from pg_class, pg_attribute "
- "left join pg_attrdef on (pg_attrdef.adrelid = pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
- "where lower(pg_class.relname) = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid "
- "order by pg_attribute.attnum ";
- break;
- case TQPSTQLDriver::Version73:
- stmt = "select pg_attribute.attname, pg_attribute.atttypid::int, pg_attribute.attnotnull, "
- "pg_attribute.attlen, pg_attribute.atttypmod, pg_attrdef.adsrc "
- "from pg_class, pg_attribute "
- "left join pg_attrdef on (pg_attrdef.adrelid = pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
- "where lower(pg_class.relname) = '%1' "
- "and pg_table_is_visible(pg_class.oid) "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid "
- "and pg_attribute.attisdropped = false "
- "order by pg_attribute.attnum ";
- break;
- }
-
- TQSqlQuery query = createQuery();
- query.exec( stmt.arg( tablename.lower() ) );
- if ( pro >= TQPSTQLDriver::Version71 ) {
- while ( query.next() ) {
- int len = query.value( 3 ).toInt();
- int precision = query.value( 4 ).toInt();
- // swap length and precision if length == -1
- if ( len == -1 && precision > -1 ) {
- len = precision - 4;
- precision = -1;
- }
- TQString defVal = query.value( 5 ).toString();
- if ( !defVal.isEmpty() && defVal.startsWith( "'" ) )
- defVal = defVal.mid( 1, defVal.length() - 2 );
- info.append( TQSqlFieldInfo( query.value( 0 ).toString(),
- qDecodePSTQLType( query.value( 1 ).toInt() ),
- query.value( 2 ).toBool(),
- len,
- precision,
- defVal,
- query.value( 1 ).toInt() ) );
- }
- } else {
- // Postgres < 7.1 cannot handle outer joins
- while ( query.next() ) {
- TQString defVal;
- TQString stmt2 = "select pg_attrdef.adsrc from pg_attrdef where "
- "pg_attrdef.adrelid = %1 and pg_attrdef.adnum = %2 ";
- TQSqlQuery query2 = createQuery();
- query2.exec( stmt2.arg( query.value( 5 ).toInt() ).arg( query.value( 6 ).toInt() ) );
- if ( query2.isActive() && query2.next() )
- defVal = query2.value( 0 ).toString();
- if ( !defVal.isEmpty() && defVal.startsWith( "'" ) )
- defVal = defVal.mid( 1, defVal.length() - 2 );
- int len = query.value( 3 ).toInt();
- int precision = query.value( 4 ).toInt();
- // swap length and precision if length == -1
- if ( len == -1 && precision > -1 ) {
- len = precision - 4;
- precision = -1;
- }
- info.append( TQSqlFieldInfo( query.value( 0 ).toString(),
- qDecodePSTQLType( query.value( 1 ).toInt() ),
- query.value( 2 ).toBool(),
- len,
- precision,
- defVal,
- query.value( 1 ).toInt() ) );
- }
- }
-
- return info;
-}
-
-TQSqlRecordInfo TQPSTQLDriver::recordInfo( const TQSqlQuery& query ) const
-{
- TQSqlRecordInfo info;
- if ( !isOpen() )
- return info;
- if ( query.isActive() && query.driver() == this ) {
- TQPSTQLResult* result = (TQPSTQLResult*)query.result();
- int count = PQnfields( result->d->result );
- for ( int i = 0; i < count; ++i ) {
- TQString name = PQfname( result->d->result, i );
- int len = PQfsize( result->d->result, i );
- int precision = PQfmod( result->d->result, i );
- // swap length and precision if length == -1
- if ( len == -1 && precision > -1 ) {
- len = precision - 4;
- precision = -1;
- }
- info.append( TQSqlFieldInfo( name,
- qDecodePSTQLType( PQftype( result->d->result, i ) ),
- -1,
- len,
- precision,
- TQVariant(),
- PQftype( result->d->result, i ) ) );
- }
- }
- return info;
-}
-
-TQString TQPSTQLDriver::formatValue( const TQSqlField* field,
- bool ) const
-{
- TQString r;
- if ( field->isNull() ) {
- r = nullText();
- } else {
- switch ( field->type() ) {
- case TQVariant::DateTime:
- if ( field->value().toDateTime().isValid() ) {
- TQDate dt = field->value().toDateTime().date();
- TQTime tm = field->value().toDateTime().time();
- // msecs need to be right aligned otherwise psql
- // interpretes them wrong
- r = "'" + TQString::number( dt.year() ) + "-" +
- TQString::number( dt.month() ) + "-" +
- TQString::number( dt.day() ) + " " +
- tm.toString() + "." +
- TQString::number( tm.msec() ).rightJustify( 3, '0' ) + "'";
- } else {
- r = nullText();
- }
- break;
- case TQVariant::Time:
- if ( field->value().toTime().isValid() ) {
- r = field->value().toTime().toString( TQt::ISODate );
- } else {
- r = nullText();
- }
- case TQVariant::String:
- case TQVariant::CString: {
- switch ( field->value().type() ) {
- case TQVariant::Rect: {
- TQRect rec = field->value().toRect();
- // upper right corner then lower left according to psql docs
- r = "'(" + TQString::number( rec.right() ) +
- "," + TQString::number( rec.bottom() ) +
- "),(" + TQString::number( rec.left() ) +
- "," + TQString::number( rec.top() ) + ")'";
- break;
- }
- case TQVariant::Point: {
- TQPoint p = field->value().toPoint();
- r = "'(" + TQString::number( p.x() ) +
- "," + TQString::number( p.y() ) + ")'";
- break;
- }
- case TQVariant::PointArray: {
- TQPointArray pa = field->value().toPointArray();
- r = "' ";
- for ( int i = 0; i < (int)pa.size(); ++i ) {
- r += "(" + TQString::number( pa[i].x() ) +
- "," + TQString::number( pa[i].y() ) + "),";
- }
- r.truncate( r.length() - 1 );
- r += "'";
- break;
- }
- default:
- // Escape '\' characters
- r = TQSqlDriver::formatValue( field );
- r.replace( "\\", "\\\\" );
- break;
- }
- break;
- }
- case TQVariant::Bool:
- if ( field->value().toBool() )
- r = "TRUE";
- else
- r = "FALSE";
- break;
- case TQVariant::ByteArray: {
- TQByteArray ba = field->value().asByteArray();
- TQString res;
- r = "'";
- unsigned char uc;
- for ( int i = 0; i < (int)ba.size(); ++i ) {
- uc = (unsigned char) ba[ i ];
- if ( uc > 40 && uc < 92 ) {
- r += uc;
- } else {
- r += "\\\\";
- r += TQString::number( (unsigned char) ba[ i ], 8 ).rightJustify( 3, '0', TRUE );
- }
- }
- r += "'";
- break;
- }
- default:
- r = TQSqlDriver::formatValue( field );
- break;
- }
- }
- return r;
-}
diff --git a/tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.h b/tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.h
deleted file mode 100644
index 6afbc96..0000000
--- a/tqtinterface/qt4/src/sql/drivers/psql/tqsql_psql.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Definition of PostgreSQL driver classes
-**
-** Created : 001103
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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.
-**
-**********************************************************************/
-
-#ifndef TQSQL_PSTQL_H
-#define TQSQL_PSTQL_H
-
-#include <tqsqlresult.h>
-#include <tqsqlfield.h>
-#include <tqsqldriver.h>
-#include <libpq-fe.h>
-
-#ifdef TQT_PLUGIN
-#define TQ_EXPORT_STQLDRIVER_PSQL
-#else
-#define TQ_EXPORT_STQLDRIVER_PSQL TQ_EXPORT
-#endif
-
-class TQPSTQLPrivate;
-class TQPSTQLDriver;
-class TQSqlRecordInfo;
-
-class TQPSTQLResult : public TQSqlResult
-{
- friend class TQPSTQLDriver;
-public:
- TQPSTQLResult( const TQPSTQLDriver* db, const TQPSTQLPrivate* p );
- ~TQPSTQLResult();
- PGresult* result();
-protected:
- void cleanup();
- bool fetch( int i );
- bool fetchFirst();
- bool fetchLast();
- TQVariant data( int i );
- bool isNull( int field );
- bool reset ( const TQString& query );
- int size();
- int numRowsAffected();
-private:
- int currentSize;
- TQPSTQLPrivate* d;
-};
-
-class TQ_EXPORT_STQLDRIVER_PSQL TQPSTQLDriver : public TQSqlDriver
-{
-public:
- enum Protocol {
- Version6 = 6,
- Version7 = 7,
- Version71 = 8,
- Version73 = 9
- };
-
- TQPSTQLDriver( TQObject * parent=0, const char * name=0 );
- TQPSTQLDriver( PGconn * conn, TQObject * parent=0, const char * name=0 );
- ~TQPSTQLDriver();
- bool hasFeature( DriverFeature f ) const;
- bool open( const TQString & db,
- const TQString & user = TQString::null,
- const TQString & password = TQString::null,
- const TQString & host = TQString::null,
- int port = -1 );
- void close();
- TQSqlQuery createQuery() const;
- TQStringList tables( const TQString& user ) const;
- TQSqlIndex primaryIndex( const TQString& tablename ) const;
- TQSqlRecord record( const TQString& tablename ) const;
- TQSqlRecord record( const TQSqlQuery& query ) const;
- TQSqlRecordInfo recordInfo( const TQString& tablename ) const;
- TQSqlRecordInfo recordInfo( const TQSqlQuery& query ) const;
-
- Protocol protocol() const { return pro; }
- PGconn* connection();
- TQString formatValue( const TQSqlField* field,
- bool trimStrings ) const;
-
- // ### remove me for 4.0
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-protected:
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
-private:
- void init();
- Protocol pro;
- TQPSTQLPrivate* d;
-};
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.cpp b/tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.cpp
deleted file mode 100644
index bf330e3..0000000
--- a/tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.cpp
+++ /dev/null
@@ -1,513 +0,0 @@
-/****************************************************************************
-**
-** Implementation of STQLite driver classes.
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the sql module of the TQt GUI Toolkit.
-** EDITIONS: FREE, ENTERPRISE
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-****************************************************************************/
-
-#include "tqsql_sqlite.h"
-
-#include <tqdatetime.h>
-#include <tqregexp.h>
-#include <tqfile.h>
-
-#if (TQT_VERSION-0 < 0x030000)
-# include <tqvector.h>
-# if !defined TQ_WS_WIN32
-# include <unistd.h>
-# endif
-# include "../../../3rdparty/libraries/sqlite/sqlite.h"
-#else
-# include <tqptrvector.h>
-# if !defined TQ_WS_WIN32
-# include <unistd.h>
-# endif
-# include <sqlite.h>
-#endif
-
-typedef struct sqlite_vm sqlite_vm;
-
-#define TQSQLITE_DRIVER_NAME "TQSQLITE"
-
-static TQSqlVariant::Type nameToType(const TQString& typeName)
-{
- TQString tName = typeName.upper();
- if (tName.startsWith("INT"))
- return TQSqlVariant::Int;
- if (tName.startsWith("FLOAT") || tName.startsWith("NUMERIC"))
- return TQSqlVariant::Double;
- if (tName.startsWith("BOOL"))
- return TQSqlVariant::Bool;
- // STQLite is typeless - consider everything else as string
- return TQSqlVariant::String;
-}
-
-class TQSTQLiteDriverPrivate
-{
-public:
- TQSTQLiteDriverPrivate();
- sqlite *access;
- bool utf8;
-};
-
-TQSTQLiteDriverPrivate::TQSTQLiteDriverPrivate() : access(0)
-{
- utf8 = (qstrcmp(sqlite_encoding, "UTF-8") == 0);
-}
-
-class TQSTQLiteResultPrivate
-{
-public:
- TQSTQLiteResultPrivate(TQSTQLiteResult *res);
- void cleanup();
- bool fetchNext(TQtSqlCachedResult::RowCache *row);
- bool isSelect();
- // initializes the recordInfo and the cache
- void init(const char **cnames, int numCols, TQtSqlCachedResult::RowCache **row = 0);
- void finalize();
-
- TQSTQLiteResult* q;
- sqlite *access;
-
- // and we have too keep our own struct for the data (sqlite works via
- // callback.
- const char *currentTail;
- sqlite_vm *currentMachine;
-
- uint skippedtqStatus: 1; // the status of the fetchNext() that's skipped
- TQtSqlCachedResult::RowCache *skipRow;
-
- uint utf8: 1;
- TQSqlRecordInfo rInf;
-};
-
-static const uint initial_cache_size = 128;
-
-TQSTQLiteResultPrivate::TQSTQLiteResultPrivate(TQSTQLiteResult* res) : q(res), access(0), currentTail(0),
- currentMachine(0), skippedtqStatus(FALSE), skipRow(0), utf8(FALSE)
-{
-}
-
-void TQSTQLiteResultPrivate::cleanup()
-{
- finalize();
- rInf.clear();
- currentTail = 0;
- currentMachine = 0;
- skippedtqStatus = FALSE;
- delete skipRow;
- skipRow = 0;
- q->setAt(TQSql::BeforeFirst);
- q->setActive(FALSE);
- q->cleanup();
-}
-
-void TQSTQLiteResultPrivate::finalize()
-{
- if (!currentMachine)
- return;
-
- char* err = 0;
- int res = sqlite_finalize(currentMachine, &err);
- if (err) {
- q->setLastError(TQSqlError("Unable to fetch results", err, TQSqlError::Statement, res));
- sqlite_freemem(err);
- }
- currentMachine = 0;
-}
-
-// called on first fetch
-void TQSTQLiteResultPrivate::init(const char **cnames, int numCols, TQtSqlCachedResult::RowCache **row)
-{
- if (!cnames)
- return;
-
- rInf.clear();
- if (numCols <= 0)
- return;
-
- for (int i = 0; i < numCols; ++i) {
- const char* lastDot = strrchr(cnames[i], '.');
- const char* fieldName = lastDot ? lastDot + 1 : cnames[i];
- rInf.append(TQSqlFieldInfo(fieldName, nameToType(cnames[i+numCols])));
- }
- // skip the first fetch
- if (row && !*row) {
- *row = new TQtSqlCachedResult::RowCache(numCols);
- skipRow = *row;
- }
-}
-
-bool TQSTQLiteResultPrivate::fetchNext(TQtSqlCachedResult::RowCache* row)
-{
- // may be caching.
- const char **fvals;
- const char **cnames;
- int colNum;
- int res;
- int i;
-
- if (skipRow) {
- // already fetched
- if (row)
- *row = *skipRow;
- delete skipRow;
- skipRow = 0;
- return skippedtqStatus;
- }
-
- if (!currentMachine)
- return FALSE;
-
- // keep trying while busy, wish I could implement this better.
- while ((res = sqlite_step(currentMachine, &colNum, &fvals, &cnames)) == STQLITE_BUSY) {
- // sleep instead requesting result again immidiately.
-#if defined TQ_WS_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- }
-
- switch(res) {
- case STQLITE_ROW:
- // check to see if should fill out columns
- if (rInf.isEmpty())
- // must be first call.
- init(cnames, colNum, &row);
- if (!fvals)
- return FALSE;
- if (!row)
- return TRUE;
- for (i = 0; i < colNum; ++i)
- (*row)[i] = utf8 ? TQString::fromUtf8(fvals[i]) : TQString(fvals[i]);
- return TRUE;
- case STQLITE_DONE:
- if (rInf.isEmpty())
- // must be first call.
- init(cnames, colNum);
- q->setAt(TQSql::AfterLast);
- return FALSE;
- case STQLITE_ERROR:
- case STQLITE_MISUSE:
- default:
- // something wrong, don't get col info, but still return false
- finalize(); // finalize to get the error message.
- q->setAt(TQSql::AfterLast);
- return FALSE;
- }
- return FALSE;
-}
-
-TQSTQLiteResult::TQSTQLiteResult(const TQSTQLiteDriver* db)
-: TQtSqlCachedResult(db)
-{
- d = new TQSTQLiteResultPrivate(this);
- d->access = db->d->access;
- d->utf8 = db->d->utf8;
-}
-
-TQSTQLiteResult::~TQSTQLiteResult()
-{
- d->cleanup();
- delete d;
-}
-
-/*
- Execute \a query.
-*/
-bool TQSTQLiteResult::reset (const TQString& query)
-{
- // this is where we build a query.
- if (!driver())
- return FALSE;
- if (!driver()-> isOpen() || driver()->isOpenError())
- return FALSE;
-
- d->cleanup();
-
- // Um, ok. callback based so.... pass private static function for this.
- setSelect(FALSE);
- char *err = 0;
- int res = sqlite_compile(d->access,
- d->utf8 ? (const char*)query.utf8().data() : query.ascii(),
- &(d->currentTail),
- &(d->currentMachine),
- &err);
- if (res != STQLITE_OK || err) {
- setLastError(TQSqlError("Unable to execute statement", err, TQSqlError::Statement, res));
- sqlite_freemem(err);
- }
- //if (*d->currentTail != '\000' then there is more sql to eval
- if (!d->currentMachine) {
- setActive(FALSE);
- return FALSE;
- }
- // we have to fetch one row to find out about
- // the structure of the result set
- d->skippedtqStatus = d->fetchNext(0);
- setSelect(!d->rInf.isEmpty());
- if (isSelect())
- init(d->rInf.count());
- setActive(TRUE);
- return TRUE;
-}
-
-bool TQSTQLiteResult::gotoNext(TQtSqlCachedResult::RowCache* row)
-{
- return d->fetchNext(row);
-}
-
-int TQSTQLiteResult::size()
-{
- return -1;
-}
-
-int TQSTQLiteResult::numRowsAffected()
-{
- return sqlite_changes(d->access);
-}
-
-/////////////////////////////////////////////////////////
-
-TQSTQLiteDriver::TQSTQLiteDriver(TQObject * parent, const char * name)
- : TQSqlDriver(parent, name ? name : TQSQLITE_DRIVER_NAME)
-{
- d = new TQSTQLiteDriverPrivate();
-}
-
-TQSTQLiteDriver::TQSTQLiteDriver(sqlite *connection, TQObject *parent, const char *name)
- : TQSqlDriver(parent, name ? name : TQSQLITE_DRIVER_NAME)
-{
- d = new TQSTQLiteDriverPrivate();
- d->access = connection;
- setOpen(TRUE);
- setOpenError(FALSE);
-}
-
-
-TQSTQLiteDriver::~TQSTQLiteDriver()
-{
- delete d;
-}
-
-bool TQSTQLiteDriver::hasFeature(DriverFeature f) const
-{
- switch (f) {
- case Transactions:
- return TRUE;
-#if (TQT_VERSION-0 >= 0x030000)
- case Unicode:
- return d->utf8;
-#endif
-// case BLOB:
- default:
- return FALSE;
- }
-}
-
-/*
- STQLite dbs have no user name, passwords, hosts or ports.
- just file names.
-*/
-bool TQSTQLiteDriver::open(const TQString & db, const TQString &, const TQString &, const TQString &, int, const TQString &)
-{
- if (isOpen())
- close();
-
- if (db.isEmpty())
- return FALSE;
-
- char* err = 0;
- d->access = sqlite_open(TQFile::encodeName(db), 0, &err);
- if (err) {
- setLastError(TQSqlError("Error to open database", err, TQSqlError::Connection));
- sqlite_freemem(err);
- err = 0;
- }
-
- if (d->access) {
- setOpen(TRUE);
- setOpenError(FALSE);
- return TRUE;
- }
- setOpenError(TRUE);
- return FALSE;
-}
-
-void TQSTQLiteDriver::close()
-{
- if (isOpen()) {
- sqlite_close(d->access);
- d->access = 0;
- setOpen(FALSE);
- setOpenError(FALSE);
- }
-}
-
-TQSqlQuery TQSTQLiteDriver::createQuery() const
-{
- return TQSqlQuery(new TQSTQLiteResult(this));
-}
-
-bool TQSTQLiteDriver::beginTransaction()
-{
- if (!isOpen() || isOpenError())
- return FALSE;
-
- char* err;
- int res = sqlite_exec(d->access, "BEGIN", 0, this, &err);
-
- if (res == STQLITE_OK)
- return TRUE;
-
- setLastError(TQSqlError("Unable to begin transaction", err, TQSqlError::Transaction, res));
- sqlite_freemem(err);
- return FALSE;
-}
-
-bool TQSTQLiteDriver::commitTransaction()
-{
- if (!isOpen() || isOpenError())
- return FALSE;
-
- char* err;
- int res = sqlite_exec(d->access, "COMMIT", 0, this, &err);
-
- if (res == STQLITE_OK)
- return TRUE;
-
- setLastError(TQSqlError("Unable to commit transaction", err, TQSqlError::Transaction, res));
- sqlite_freemem(err);
- return FALSE;
-}
-
-bool TQSTQLiteDriver::rollbackTransaction()
-{
- if (!isOpen() || isOpenError())
- return FALSE;
-
- char* err;
- int res = sqlite_exec(d->access, "ROLLBACK", 0, this, &err);
-
- if (res == STQLITE_OK)
- return TRUE;
-
- setLastError(TQSqlError("Unable to rollback Transaction", err, TQSqlError::Transaction, res));
- sqlite_freemem(err);
- return FALSE;
-}
-
-TQStringList TQSTQLiteDriver::tables(const TQString &typeName) const
-{
- TQStringList res;
- if (!isOpen())
- return res;
- int type = typeName.toInt();
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
-#if (TQT_VERSION-0 >= 0x030000)
- if ((type & (int)TQSql::Tables) && (type & (int)TQSql::Views))
- q.exec("SELECT name FROM sqlite_master WHERE type='table' OR type='view'");
- else if (typeName.isEmpty() || (type & (int)TQSql::Tables))
- q.exec("SELECT name FROM sqlite_master WHERE type='table'");
- else if (type & (int)TQSql::Views)
- q.exec("SELECT name FROM sqlite_master WHERE type='view'");
-#else
- q.exec("SELECT name FROM sqlite_master WHERE type='table' OR type='view'");
-#endif
-
-
- if (q.isActive()) {
- while(q.next())
- res.append(q.value(0).toString());
- }
-
-#if (TQT_VERSION-0 >= 0x030000)
- if (type & (int)TQSql::SystemTables) {
- // there are no internal tables beside this one:
- res.append("sqlite_master");
- }
-#endif
-
- return res;
-}
-
-TQSqlIndex TQSTQLiteDriver::primaryIndex(const TQString &tblname) const
-{
- TQSqlRecordInfo rec(recordInfo(tblname)); // expensive :(
-
- if (!isOpen())
- return TQSqlIndex();
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
- // finrst find a UNITQUE INDEX
- q.exec("PRAGMA index_list('" + tblname + "');");
- TQString indexname;
- while(q.next()) {
- if (q.value(2).toInt()==1) {
- indexname = q.value(1).toString();
- break;
- }
- }
- if (indexname.isEmpty())
- return TQSqlIndex();
-
- q.exec("PRAGMA index_info('" + indexname + "');");
-
- TQSqlIndex index(tblname, indexname);
- while(q.next()) {
- TQString name = q.value(2).toString();
- TQSqlVariant::Type type = TQSqlVariant::Invalid;
- if (rec.contains(name))
- type = rec.find(name).type();
- index.append(TQSqlField(name, type));
- }
- return index;
-}
-
-TQSqlRecordInfo TQSTQLiteDriver::recordInfo(const TQString &tbl) const
-{
- if (!isOpen())
- return TQSqlRecordInfo();
-
- TQSqlQuery q = createQuery();
- q.setForwardOnly(TRUE);
- q.exec("SELECT * FROM " + tbl + " LIMIT 1");
- return recordInfo(q);
-}
-
-TQSqlRecord TQSTQLiteDriver::record(const TQString &tblname) const
-{
- if (!isOpen())
- return TQSqlRecord();
-
- return recordInfo(tblname).toRecord();
-}
-
-TQSqlRecord TQSTQLiteDriver::record(const TQSqlQuery& query) const
-{
- if (query.isActive() && query.driver() == this) {
- TQSTQLiteResult* result = (TQSTQLiteResult*)query.result();
- return result->d->rInf.toRecord();
- }
- return TQSqlRecord();
-}
-
-TQSqlRecordInfo TQSTQLiteDriver::recordInfo(const TQSqlQuery& query) const
-{
- if (query.isActive() && query.driver() == this) {
- TQSTQLiteResult* result = (TQSTQLiteResult*)query.result();
- return result->d->rInf;
- }
- return TQSqlRecordInfo();
-}
diff --git a/tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.h b/tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.h
deleted file mode 100644
index 6100089..0000000
--- a/tqtinterface/qt4/src/sql/drivers/sqlite/tqsql_sqlite.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Definition of STQLite driver classes.
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the sql module of the TQt GUI Toolkit.
-** EDITIONS: FREE, ENTERPRISE
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-****************************************************************************/
-
-#ifndef TQSQL_STQLITE_H
-#define TQSQL_STQLITE_H
-
-#include <tqsqldriver.h>
-#include <tqsqlresult.h>
-#include <tqsqlrecord.h>
-#include <tqsqlindex.h>
-#include "../cache/tqsqlcachedresult.h"
-
-#if (TQT_VERSION-0 >= 0x030000)
-typedef TQVariant TQSqlVariant;
-#endif
-
-#if defined (TQ_OS_WIN32)
-# include <tqt_windows.h>
-#endif
-
-class TQSTQLiteDriverPrivate;
-class TQSTQLiteResultPrivate;
-class TQSTQLiteDriver;
-struct sqlite;
-
-class TQSTQLiteResult : public TQtSqlCachedResult
-{
- friend class TQSTQLiteDriver;
- friend class TQSTQLiteResultPrivate;
-public:
- TQSTQLiteResult(const TQSTQLiteDriver* db);
- ~TQSTQLiteResult();
-
-protected:
- bool gotoNext(TQtSqlCachedResult::RowCache* row);
- bool reset (const TQString& query);
- int size();
- int numRowsAffected();
-
-private:
- TQSTQLiteResultPrivate* d;
-};
-
-class TQSTQLiteDriver : public TQSqlDriver
-{
- friend class TQSTQLiteResult;
-public:
- TQSTQLiteDriver(TQObject *parent = 0, const char *name = 0);
- TQSTQLiteDriver(sqlite *connection, TQObject *parent = 0, const char *name = 0);
- ~TQSTQLiteDriver();
- bool hasFeature(DriverFeature f) const;
- bool open(const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString & host,
- int port,
- const TQString & connOpts);
- bool open( const TQString & db,
- const TQString & user,
- const TQString & password,
- const TQString & host,
- int port ) { return open (db, user, password, host, port, TQString()); }
- void close();
- TQSqlQuery createQuery() const;
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
- TQStringList tables(const TQString& user) const;
-
- TQSqlRecord record(const TQString& tablename) const;
- TQSqlRecordInfo recordInfo(const TQString& tablename) const;
- TQSqlIndex primaryIndex(const TQString &table) const;
- TQSqlRecord record(const TQSqlQuery& query) const;
- TQSqlRecordInfo recordInfo(const TQSqlQuery& query) const;
-
-private:
- TQSTQLiteDriverPrivate* d;
-};
-#endif
diff --git a/tqtinterface/qt4/src/sql/qt_sql.pri b/tqtinterface/qt4/src/sql/qt_sql.pri
deleted file mode 100644
index 732c674..0000000
--- a/tqtinterface/qt4/src/sql/qt_sql.pri
+++ /dev/null
@@ -1,254 +0,0 @@
-# Qt sql module
-
-sql {
-
- !table {
- message(table must be enabled for sql support)
- REQUIRES += table
- }
-
- SQL_P = sql
- HEADERS += $$SQL_H/tqsql.h \
- $$SQL_H/tqsqlquery.h \
- $$SQL_H/tqsqldatabase.h \
- $$SQL_H/tqsqlfield.h \
- $$SQL_H/tqsqlrecord.h \
- $$SQL_H/tqsqlcursor.h \
- $$SQL_H/tqsqlform.h \
- $$SQL_H/tqeditorfactory.h \
- $$SQL_H/tqsqleditorfactory.h \
- $$SQL_H/tqsqldriver.h \
- $$SQL_P/tqsqldriverinterface_p.h \
- $$SQL_P/tqsqlextension_p.h \
- $$SQL_H/tqsqldriverplugin.h \
- $$SQL_H/tqsqlerror.h \
- $$SQL_H/tqsqlresult.h \
- $$SQL_H/tqsqlindex.h \
- $$SQL_H/tqsqlpropertymap.h \
- $$SQL_P/tqsqlmanager_p.h \
- $$SQL_H/tqdatatable.h \
- $$SQL_H/tqdataview.h \
- $$SQL_H/tqdatabrowser.h \
- $$SQL_H/tqsqlselectcursor.h
-
- SOURCES += $$SQL_CPP/tqsqlquery.cpp \
- $$SQL_CPP/tqsqldatabase.cpp \
- $$SQL_CPP/tqsqlfield.cpp \
- $$SQL_CPP/tqsqlrecord.cpp \
- $$SQL_CPP/tqsqlform.cpp \
- $$SQL_CPP/tqsqlcursor.cpp \
- $$SQL_CPP/tqeditorfactory.cpp \
- $$SQL_CPP/tqsqleditorfactory.cpp \
- $$SQL_CPP/tqsqldriver.cpp \
- $$SQL_CPP/tqsqlextension_p.cpp \
- $$SQL_CPP/tqsqldriverplugin.cpp \
- $$SQL_CPP/tqsqlerror.cpp \
- $$SQL_CPP/tqsqlresult.cpp \
- $$SQL_CPP/tqsqlindex.cpp \
- $$SQL_CPP/tqsqlpropertymap.cpp \
- $$SQL_CPP/tqsqlmanager_p.cpp \
- $$SQL_CPP/tqdatatable.cpp \
- $$SQL_CPP/tqdataview.cpp \
- $$SQL_CPP/tqdatabrowser.cpp \
- $$SQL_CPP/tqsqlselectcursor.cpp \
- $$SQL_CPP/drivers/cache/tqsqlcachedresult.cpp
-
- contains(sql-drivers, all ) {
- sql-driver += psql mysql odbc oci tds db2 sqlite ibase
- }
-
- contains(sql-drivers, psql) {
- HEADERS += $$SQL_CPP/drivers/psql/tqsql_psql.h
- SOURCES += $$SQL_CPP/drivers/psql/tqsql_psql.cpp
- DEFINES += TQT_SQL_POSTGRES
- unix {
- !contains( LIBS, .*pq.* ) {
- LIBS *= -lpq
- }
- }
- win32 {
- !contains( LIBS, .*libpq.* ) {
- LIBS *= libpqdll.lib
- }
-# win32-msvc: {
-# LIBS *= delayimp.lib
-# QMAKE_LFLAGS += /DELAYLOAD:libpqdll.dll
-# }
-# win32-borland: {
-# QMAKE_LFLAGS += /dlibpqdll.dll
-# }
- }
- }
-
- contains(sql-drivers, mysql) {
- HEADERS += $$SQL_CPP/drivers/mysql/tqsql_mysql.h
- SOURCES += $$SQL_CPP/drivers/mysql/tqsql_mysql.cpp
- DEFINES += TQT_SQL_MYSQL
- unix {
- !contains( LIBS, .*mysql.* ) {
- LIBS *= -lmysqlclient
- }
- }
- win32 {
- !contains( LIBS, .*mysql.* ) {
- LIBS *= libmysql.lib
- }
-# win32-msvc: {
-# LIBS *= delayimp.lib
-# QMAKE_LFLAGS += /DELAYLOAD:libmysql.dll
-# }
-# win32-borland: {
-# QMAKE_LFLAGS += /dlibmysql.dll
-# }
- }
- }
-
- contains(sql-drivers, odbc) {
- HEADERS += $$SQL_CPP/drivers/odbc/tqsql_odbc.h
- SOURCES += $$SQL_CPP/drivers/odbc/tqsql_odbc.cpp
- DEFINES += TQT_SQL_ODBC
-
- mac {
- !contains( LIBS, .*odbc.* ) {
- LIBS *= -liodbc
- }
- }
-
- unix {
- !contains( LIBS, .*odbc.* ) {
- LIBS *= -lodbc
- }
- }
-
- win32 {
- !win32-borland:LIBS *= odbc32.lib
- win32-borland:LIBS *= $(BCB)/lib/PSDK/odbc32.lib
- }
-
- }
-
- contains(sql-drivers, oci) {
- HEADERS += $$SQL_CPP/drivers/oci/tqsql_oci.h
- SOURCES += $$SQL_CPP/drivers/oci/tqsql_oci.cpp
- DEFINES += TQT_SQL_OCI
- unix {
- !contains( LIBS, .*clnts.* ) {
- LIBS += -lclntsh -lwtc8
- }
- }
- win32 {
- LIBS += oci.lib
-# win32-msvc: {
-# LIBS *= delayimp.lib
-# QMAKE_LFLAGS += /DELAYLOAD:oci.dll
-# }
-# win32-borland: {
-# QMAKE_LFLAGS += /doci.dll
-# }
- }
- }
-
- contains(sql-drivers, tds) {
- HEADERS += $$SQL_CPP/drivers/tds/tqsql_tds.h \
- $$SQL_CPP/drivers/shared/tqsql_result.h
- SOURCES += $$SQL_CPP/drivers/tds/tqsql_tds.cpp \
- $$SQL_CPP/drivers/shared/tqsql_result.cpp
- DEFINES += TQT_SQL_TDS
- unix {
- LIBS += -L$SYBASE/lib -lsybdb
- }
- win32 {
- !win32-borland:LIBS += NTWDBLIB.LIB
- win32-borland:LIBS += $(BCB)/lib/PSDK/NTWDBLIB.LIB
-# win32-msvc: {
-# LIBS *= delayimp.lib
-# QMAKE_LFLAGS += /DELAYLOAD:ntwdblib.dll
-# }
-# win32-borland: {
-# QMAKE_LFLAGS += /dntwdblib.dll
-# }
- }
- }
-
- contains(sql-drivers, db2) {
- HEADERS += $$SQL_CPP/drivers/db2/tqsql_db2.h
- SOURCES += $$SQL_CPP/drivers/db2/tqsql_db2.cpp
- DEFINES += TQT_SQL_DB2
- unix {
- LIBS += -ldb2
- }
- win32 {
- !win32-borland:LIBS += db2cli.lib
-# win32-borland:LIBS += $(BCB)/lib/PSDK/db2cli.lib
- }
- }
-
- contains(sql-drivers, ibase) {
- HEADERS += $$SQL_CPP/drivers/ibase/tqsql_ibase.h
- SOURCES += $$SQL_CPP/drivers/ibase/tqsql_ibase.cpp
- DEFINES += TQT_SQL_IBASE
- unix {
- LIBS *= -lfbclient
- }
- win32 {
- !win32-borland:LIBS *= gds32_ms.lib
- win32-borland:LIBS += gds32.lib
- }
- }
-
- contains(sql-drivers, sqlite) {
- !contains( LIBS, .*sqlite.* ) {
-
- INCLUDEPATH += $$SQL_CPP/../3rdparty/sqlite/
-
- HEADERS += $$SQL_CPP/../3rdparty/sqlite/btree.h \
- $$SQL_CPP/../3rdparty/sqlite/config.h \
- $$SQL_CPP/../3rdparty/sqlite/hash.h \
- $$SQL_CPP/../3rdparty/sqlite/opcodes.h \
- $$SQL_CPP/../3rdparty/sqlite/os.h \
- $$SQL_CPP/../3rdparty/sqlite/pager.h \
- $$SQL_CPP/../3rdparty/sqlite/parse.h \
- $$SQL_CPP/../3rdparty/sqlite/sqlite.h \
- $$SQL_CPP/../3rdparty/sqlite/sqliteInt.h \
- $$SQL_CPP/../3rdparty/sqlite/vdbe.h \
- $$SQL_CPP/../3rdparty/sqlite/vdbeInt.h
-
- SOURCES += $$SQL_CPP/../3rdparty/sqlite/attach.c \
- $$SQL_CPP/../3rdparty/sqlite/auth.c \
- $$SQL_CPP/../3rdparty/sqlite/btree.c \
- $$SQL_CPP/../3rdparty/sqlite/btree_rb.c \
- $$SQL_CPP/../3rdparty/sqlite/build.c \
- $$SQL_CPP/../3rdparty/sqlite/copy.c \
- $$SQL_CPP/../3rdparty/sqlite/date.c \
- $$SQL_CPP/../3rdparty/sqlite/delete.c \
- $$SQL_CPP/../3rdparty/sqlite/expr.c \
- $$SQL_CPP/../3rdparty/sqlite/func.c \
- $$SQL_CPP/../3rdparty/sqlite/hash.c \
- $$SQL_CPP/../3rdparty/sqlite/insert.c \
- $$SQL_CPP/../3rdparty/sqlite/main.c \
- $$SQL_CPP/../3rdparty/sqlite/opcodes.c \
- $$SQL_CPP/../3rdparty/sqlite/os.c \
- $$SQL_CPP/../3rdparty/sqlite/pager.c \
- $$SQL_CPP/../3rdparty/sqlite/parse.c \
- $$SQL_CPP/../3rdparty/sqlite/pragma.c \
- $$SQL_CPP/../3rdparty/sqlite/printf.c \
- $$SQL_CPP/../3rdparty/sqlite/random.c \
- $$SQL_CPP/../3rdparty/sqlite/select.c \
- $$SQL_CPP/../3rdparty/sqlite/shell.c \
- $$SQL_CPP/../3rdparty/sqlite/table.c \
- $$SQL_CPP/../3rdparty/sqlite/tokenize.c \
- $$SQL_CPP/../3rdparty/sqlite/trigger.c \
- $$SQL_CPP/../3rdparty/sqlite/update.c \
- $$SQL_CPP/../3rdparty/sqlite/util.c \
- $$SQL_CPP/../3rdparty/sqlite/vacuum.c \
- $$SQL_CPP/../3rdparty/sqlite/vdbe.c \
- $$SQL_CPP/../3rdparty/sqlite/vdbeaux.c \
- $$SQL_CPP/../3rdparty/sqlite/where.c
- }
-
- HEADERS += $$SQL_CPP/drivers/sqlite/tqsql_sqlite.h
- SOURCES += $$SQL_CPP/drivers/sqlite/tqsql_sqlite.cpp
- DEFINES += TQT_SQL_SQLITE
- }
-}
-
diff --git a/tqtinterface/qt4/src/sql/tqdatabrowser.cpp b/tqtinterface/qt4/src/sql/tqdatabrowser.cpp
deleted file mode 100644
index df5d15b..0000000
--- a/tqtinterface/qt4/src/sql/tqdatabrowser.cpp
+++ /dev/null
@@ -1,1284 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQDataBrowser class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqdatabrowser.h"
-
-#ifndef TQT_NO_STQL_VIEW_WIDGETS
-
-#include "tqsqlform.h"
-#include "tqsqlmanager_p.h"
-#include "tqsqlresult.h"
-
-class TQDataBrowserPrivate
-{
-public:
- TQDataBrowserPrivate() : boundaryCheck( TRUE ), readOnly( FALSE ) {}
- TQSqlCursorManager cur;
- TQSqlFormManager frm;
- TQDataManager dat;
- bool boundaryCheck;
- bool readOnly;
-};
-
-/*!
- \class TQDataBrowser tqdatabrowser.h
- \brief The TQDataBrowser class provides data manipulation and
- navigation for data entry forms.
-
- \ingroup database
- \mainclass
- \module sql
-
- A high-level API is provided for navigating through data records
- in a cursor, for inserting, updating and deleting records, and for
- refreshing data in the display.
-
- If you want a read-only form to present database data use
- TQDataView; if you want a table-based presentation of your data use
- TQDataTable.
-
- A TQDataBrowser is used to associate a dataset with a form in much
- the same way as a TQDataTable associates a dataset with a table.
- Once the data browser has been constructed it can be associated
- with a dataset with setSqlCursor(), and with a form with
- setForm(). Boundary checking, sorting and filtering can be set
- with setBoundaryChecking(), setSort() and setFilter(),
- respectively.
-
- The insertCurrent() function reads the fields from the default
- form into the default cursor and performs the insert. The
- updateCurrent() and deleteCurrent() functions perform similarly to
- update and delete the current record respectively.
-
- The user can be asked to confirm all edits with setConfirmEdits().
- For more precise control use setConfirmInsert(),
- setConfirmUpdate(), setConfirmDelete() and setConfirmCancels().
- Use setAutoEdit() to control the behaviour of the form when the
- user edits a record and then navigates.
-
- The record set is navigated using first(), next(), prev(), last()
- and seek(). The form's display is updated with refresh(). When
- navigation takes place the firstRecordAvailable(),
- lastRecordAvailable(), nextRecordAvailable() and
- prevRecordAvailable() Q_SIGNALS are emitted. When the cursor record
- is changed due to navigation the cursorChanged() signal is
- emitted.
-
- If you want finer control of the insert, update and delete
- processes then you can use the lower level functions to perform
- these operations as described below.
-
- The form is populated with data from the database with
- readFields(). If the user is allowed to edit, (see setReadOnly()),
- write the form's data back to the cursor's edit buffer with
- writeFields(). You can clear the values in the form with
- clearValues(). Editing is performed as follows:
- \list
- \i \e insert When the data browser enters insertion mode it emits the
- primeInsert() signal which you can connect to, for example to
- pre-populate fields. Call writeFields() to write the user's edits to
- the cursor's edit buffer then call insert() to insert the record
- into the database. The beforeInsert() signal is emitted just before
- the cursor's edit buffer is inserted into the database; connect to
- this for example, to populate fields such as an auto-generated
- primary key.
- \i \e update For updates the primeUpdate() signal is emitted when
- the data browser enters update mode. After calling writeFields()
- call update() to update the record and connect to the beforeUpdate()
- signal to manipulate the user's data before the update takes place.
- \i \e delete For deletion the primeDelete() signal is emitted when
- the data browser enters deletion mode. After calling writeFields()
- call del() to delete the record and connect to the beforeDelete()
- signal, for example to record an audit of the deleted record.
- \endlist
-
-*/
-
-/*!
- \enum TQDataBrowser::Boundary
-
- This enum describes where the data browser is positioned.
-
- \value Unknown the boundary cannot be determined (usually because
- there is no default cursor, or the default cursor is not active).
-
- \value None the browser is not positioned on a boundary, but it is
- positioned on a record somewhere in the middle.
-
- \value BeforeBeginning the browser is positioned before the
- first available record.
-
- \value Beginning the browser is positioned at the first record.
-
- \value End the browser is positioned at the last
- record.
-
- \value AfterEnd the browser is positioned after the last
- available record.
-*/
-
-/*!
- Constructs a data browser which is a child of \a parent, with the
- name \a name and widget flags set to \a fl.
-*/
-
-TQDataBrowser::TQDataBrowser( TQWidget *parent, const char *name, WFlags fl )
- : TQWidget( parent, name, fl )
-{
- d = new TQDataBrowserPrivate();
- d->dat.setMode( TQSql::Update );
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQDataBrowser::~TQDataBrowser()
-{
- delete d;
-}
-
-
-/*!
- Returns an enum indicating the boundary status of the browser.
-
- This is achieved by moving the default cursor and checking the
- position, however the current default form values will not be
- altered. After checking for the boundary, the cursor is moved back
- to its former position. See \l TQDataBrowser::Boundary.
-
- \sa Boundary
-*/
-
-TQDataBrowser::Boundary TQDataBrowser::boundary()
-{
- TQSqlCursor* cur = d->cur.cursor();
- if ( !cur || !cur->isActive() )
- return Unknown;
- if ( !cur->isValid() ) {
- if ( cur->at() == TQSql::BeforeFirst )
- return BeforeBeginning;
- if ( cur->at() == TQSql::AfterLast )
- return AfterEnd;
- return Unknown;
- }
- if ( cur->at() == 0 )
- return Beginning;
- int currentAt = cur->at();
-
- Boundary b = None;
- if ( !cur->prev() )
- b = Beginning;
- else
- cur->seek( currentAt );
- if ( b == None && !cur->next() )
- b = End;
- cur->seek( currentAt );
- return b;
-}
-
-
-/*!
- \property TQDataBrowser::boundaryChecking
- \brief whether boundary checking is active
-
- When boundary checking is active (the default), Q_SIGNALS are
- emitted indicating the current position of the default cursor.
-
- \sa boundary()
-*/
-
-void TQDataBrowser::setBoundaryChecking( bool active )
-{
- d->boundaryCheck = active;
-}
-
-bool TQDataBrowser::boundaryChecking() const
-{
- return d->boundaryCheck;
-}
-
-/*!
- \property TQDataBrowser::sort
- \brief the data browser's sort
-
- The data browser's sort affects the order in which records are
- viewed in the browser. Call refresh() to apply the new sort.
-
- When retrieving the sort property, a string list is returned in
- the form 'fieldname order', e.g. 'id ASC', 'surname DESC'.
-
- There is no default sort.
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = myDataBrowser.sort();
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-*/
-
-void TQDataBrowser::setSort( const TQStringList& sort )
-{
- d->cur.setSort( sort );
-}
-
-/*!
- \overload
-
- Sets the data browser's sort to the TQSqlIndex \a sort. To apply
- the new sort, use refresh().
-
-*/
-void TQDataBrowser::setSort( const TQSqlIndex& sort )
-{
- d->cur.setSort( sort );
-}
-
-TQStringList TQDataBrowser::sort() const
-{
- return d->cur.sort();
-}
-
-
-/*!
- \property TQDataBrowser::filter
- \brief the data browser's filter
-
- The filter applies to the data shown in the browser. Call
- refresh() to apply the new filter. A filter is a string containing
- a SQL WHERE clause without the WHERE keyword, e.g. "id>1000",
- "name LIKE 'A%'", etc.
-
- There is no default filter.
-
- \sa sort()
-*/
-
-void TQDataBrowser::setFilter( const TQString& filter )
-{
- d->cur.setFilter( filter );
-}
-
-
-TQString TQDataBrowser::filter() const
-{
- return d->cur.filter();
-}
-
-
-/*!
- Sets the default cursor used by the data browser to \a cursor. If
- \a autoDelete is TRUE (the default is FALSE), the data browser
- takes ownership of the \a cursor pointer, which will be deleted
- when the browser is destroyed, or when setSqlCursor() is called
- again. To activate the \a cursor use refresh(). The cursor's edit
- buffer is used in the default form to browse and edit records.
-
- \sa sqlCursor() form() setForm()
-*/
-
-void TQDataBrowser::setSqlCursor( TQSqlCursor* cursor, bool autoDelete )
-{
- if ( !cursor )
- return;
- d->cur.setCursor( cursor, autoDelete );
- d->frm.setRecord( cursor->editBuffer() );
- if ( cursor->isReadOnly() )
- setReadOnly( TRUE );
-}
-
-
-/*!
- Returns the default cursor used for navigation, or 0 if there is
- no default cursor.
-
- \sa setSqlCursor()
-*/
-
-TQSqlCursor* TQDataBrowser::sqlCursor() const
-{
- return d->cur.cursor();
-}
-
-
-/*!
- Sets the browser's default form to \a form. The cursor and all
- navigation and data manipulation functions that the browser
- provides become available to the \a form.
-*/
-
-void TQDataBrowser::setForm( TQSqlForm* form )
-{
- d->frm.setForm( form );
-}
-
-
-/*!
- Returns the data browser's default form or 0 if no form has been
- set.
-*/
-
-TQSqlForm* TQDataBrowser::form()
-{
- return d->frm.form();
-}
-
-/*!
- \property TQDataBrowser::readOnly
- \brief whether the browser is read-only
-
- The default is FALSE, i.e. data can be edited. If the data browser
- is read-only, no database edits will be allowed.
-*/
-
-void TQDataBrowser::setReadOnly( bool active )
-{
- d->readOnly = active;
-}
-
-bool TQDataBrowser::isReadOnly() const
-{
- return d->readOnly;
-}
-
-void TQDataBrowser::setConfirmEdits( bool confirm )
-{
- d->dat.setConfirmEdits( confirm );
-}
-
-/*!
- \property TQDataBrowser::confirmInsert
- \brief whether the data browser confirms insertions
-
- If this property is TRUE, the browser confirms insertions,
- otherwise insertions happen immediately.
-
- \sa confirmCancels() confirmEdits() confirmUpdate() confirmDelete() confirmEdit()
-*/
-
-void TQDataBrowser::setConfirmInsert( bool confirm )
-{
- d->dat.setConfirmInsert( confirm );
-}
-
-/*!
- \property TQDataBrowser::confirmUpdate
- \brief whether the browser confirms updates
-
- If this property is TRUE, the browser confirms updates, otherwise
- updates happen immediately.
-
- \sa confirmCancels() confirmEdits() confirmInsert() confirmDelete() confirmEdit()
-*/
-
-void TQDataBrowser::setConfirmUpdate( bool confirm )
-{
- d->dat.setConfirmUpdate( confirm );
-}
-
-/*!
- \property TQDataBrowser::confirmDelete
- \brief whether the browser confirms deletions
-
- If this property is TRUE, the browser confirms deletions,
- otherwise deletions happen immediately.
-
- \sa confirmCancels() confirmEdits() confirmUpdate() confirmInsert() confirmEdit()
-*/
-
-void TQDataBrowser::setConfirmDelete( bool confirm )
-{
- d->dat.setConfirmDelete( confirm );
-}
-
-/*!
- \property TQDataBrowser::confirmEdits
- \brief whether the browser confirms edits
-
- If this property is TRUE, the browser confirms all edit operations
- (insertions, updates and deletions), otherwise all edit operations
- happen immediately. Confirmation is achieved by presenting the
- user with a message box -- this behavior can be changed by
- reimplementing the confirmEdit() function,
-
- \sa confirmEdit() confirmCancels() confirmInsert() confirmUpdate() confirmDelete()
-*/
-
-bool TQDataBrowser::confirmEdits() const
-{
- return ( d->dat.confirmEdits() );
-}
-
-bool TQDataBrowser::confirmInsert() const
-{
- return ( d->dat.confirmInsert() );
-}
-
-bool TQDataBrowser::confirmUpdate() const
-{
- return ( d->dat.confirmUpdate() );
-}
-
-bool TQDataBrowser::confirmDelete() const
-{
- return ( d->dat.confirmDelete() );
-}
-
-/*!
- \property TQDataBrowser::confirmCancels
- \brief whether the browser confirms cancel operations
-
- If this property is TRUE, all cancels must be confirmed by the
- user through a message box (this behavior can be changed by
- overriding the confirmCancel() function), otherwise all cancels
- occur immediately. The default is FALSE.
-
- \sa confirmEdits() confirmCancel()
-*/
-
-void TQDataBrowser::setConfirmCancels( bool confirm )
-{
- d->dat.setConfirmCancels( confirm );
-}
-
-bool TQDataBrowser::confirmCancels() const
-{
- return d->dat.confirmCancels();
-}
-
-/*!
- \property TQDataBrowser::autoEdit
- \brief whether the browser automatically applies edits
-
- The default value for this property is TRUE. When the user begins
- an insertion or an update on a form there are two possible
- outcomes when they navigate to another record:
-
- \list
- \i the insert or update is is performed -- this occurs if autoEdit is TRUE
- \i the insert or update is discarded -- this occurs if autoEdit is FALSE
- \endlist
-*/
-
-void TQDataBrowser::setAutoEdit( bool autoEdit )
-{
- d->dat.setAutoEdit( autoEdit );
-}
-
-bool TQDataBrowser::autoEdit() const
-{
- return d->dat.autoEdit();
-}
-
-/*!
- \fn void TQDataBrowser::firstRecordAvailable( bool available )
-
- This signal is emitted whenever the position of the cursor
- changes. The \a available parameter indicates whether or not the
- first record in the default cursor is available.
-*/
-
-/*!
- \fn void TQDataBrowser::lastRecordAvailable( bool available )
-
- This signal is emitted whenever the position of the cursor
- changes. The \a available parameter indicates whether or not the
- last record in the default cursor is available.
-*/
-
-/*!
- \fn void TQDataBrowser::nextRecordAvailable( bool available )
-
- This signal is emitted whenever the position of the cursor
- changes. The \a available parameter indicates whether or not the
- next record in the default cursor is available.
-*/
-
-
-/*!
- \fn void TQDataBrowser::prevRecordAvailable( bool available )
-
- This signal is emitted whenever the position of the cursor
- changes. The \a available parameter indicates whether or not the
- previous record in the default cursor is available.
-*/
-
-
-/*!
- \fn void TQDataBrowser::currentChanged( const TQSqlRecord* record )
-
- This signal is emitted whenever the current cursor position
- changes. The \a record parameter points to the contents of the
- current cursor's record.
-*/
-
-
-/*!
- \fn void TQDataBrowser::primeInsert( TQSqlRecord* buf )
-
- This signal is emitted when the data browser enters insertion
- mode. The \a buf parameter points to the record buffer that is to
- be inserted. Connect to this signal to, for example, prime the
- record buffer with default data values, auto-numbered fields etc.
- (Note that TQSqlCursor::primeInsert() is \e not called on the
- default cursor, as this would corrupt values in the form.)
-
- \sa insert()
-*/
-
-
-/*!
- \fn void TQDataBrowser::primeUpdate( TQSqlRecord* buf )
-
- This signal is emitted when the data browser enters update mode.
- Note that during navigation (first(), last(), next(), prev()),
- each record that is shown in the default form is primed for
- update. The \a buf parameter points to the record buffer being
- updated. (Note that TQSqlCursor::primeUpdate() is \e not called on
- the default cursor, as this would corrupt values in the form.)
- Connect to this signal in order to, for example, keep track of
- which records have been updated, perhaps for auditing purposes.
-
- \sa update()
-*/
-
-/*!
- \fn void TQDataBrowser::primeDelete( TQSqlRecord* buf )
-
- This signal is emitted when the data browser enters deletion mode.
- The \a buf parameter points to the record buffer being deleted.
- (Note that TQSqlCursor::primeDelete() is \e not called on the
- default cursor, as this would corrupt values in the form.)
- Connect to this signal in order to, for example, save a copy of
- the deleted record for auditing purposes.
-
- \sa del()
-*/
-
-
-/*!
- \fn void TQDataBrowser::cursorChanged( TQSqlCursor::Mode mode )
-
- This signal is emitted whenever the cursor record was changed due
- to navigation. The \a mode parameter is the edit that just took
- place, e.g. Insert, Update or Delete. See \l TQSqlCursor::Mode.
-*/
-
-
-/*!
- Refreshes the data browser's data using the default cursor. The
- browser's current filter and sort are applied if they have been
- set.
-
- \sa setFilter() setSort()
-*/
-
-void TQDataBrowser::refresh()
-{
- d->cur.refresh();
-}
-
-
-/*!
- Performs an insert operation on the data browser's cursor. If
- there is no default cursor or no default form, nothing happens.
-
- If auto-editing is on (see setAutoEdit()), the following happens:
-
- \list
- \i If the browser is already actively inserting a record,
- the current form's data is inserted into the database.
- \i If the browser is not inserting a record, but the current record
- was changed by the user, the record is updated in the database with
- the current form's data (i.e. with the changes).
- \endlist
-
- If there is an error handling any of the above auto-edit actions,
- handleError() is called and no insert or update is performed.
-
- If no error occurred, or auto-editing is not enabled, the data browser
- begins actively inserting a record into the database by performing the
- following actions:
-
- \list
- \i The default cursor is primed for insert using TQSqlCursor::primeInsert().
- \i The primeInsert() signal is emitted.
- \i The form is updated with the values in the default cursor's.
- edit buffer so that the user can fill in the values to be inserted.
- \endlist
-
-*/
-
-void TQDataBrowser::insert()
-{
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return;
- bool doIns = TRUE;
- TQSql::Confirm conf = TQSql::Yes;
- switch ( d->dat.mode() ) {
- case TQSql::Insert:
- if ( autoEdit() ) {
- if ( confirmInsert() )
- conf = confirmEdit( TQSql::Insert );
- switch ( conf ) {
- case TQSql::Yes:
- insertCurrent();
- break;
- case TQSql::No:
- break;
- case TQSql::Cancel:
- doIns = FALSE;
- break;
- }
- }
- break;
- default:
- if ( autoEdit() && currentEdited() ) {
- if ( confirmUpdate() )
- conf = confirmEdit( TQSql::Update );
- switch ( conf ) {
- case TQSql::Yes:
- updateCurrent();
- break;
- case TQSql::No:
- break;
- case TQSql::Cancel:
- doIns = FALSE;
- break;
- }
- }
- break;
- }
- if ( doIns ) {
- d->dat.setMode( TQSql::Insert );
- sqlCursor()->primeInsert();
- emit primeInsert( d->frm.record() );
- readFields();
- }
-}
-
-
-/*!
- Performs an update operation on the data browser's cursor.
-
- If there is no default cursor or no default form, nothing happens.
- Otherwise, the following happens:
-
- If the data browser is actively inserting a record (see insert()),
- that record is inserted into the database using insertCurrent().
- Otherwise, the database is updated with the current form's data
- using updateCurrent(). If there is an error handling either
- action, handleError() is called.
-*/
-
-void TQDataBrowser::update()
-{
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return;
- TQSql::Confirm conf = TQSql::Yes;
- switch ( d->dat.mode() ){
- case TQSql::Insert:
- if ( confirmInsert() )
- conf = confirmEdit( TQSql::Insert );
- switch ( conf ) {
- case TQSql::Yes:
- if ( insertCurrent() )
- d->dat.setMode( TQSql::Update );
- break;
- case TQSql::No:
- d->dat.setMode( TQSql::Update );
- cur->editBuffer( TRUE );
- readFields();
- break;
- case TQSql::Cancel:
- break;
- }
- break;
- default:
- d->dat.setMode( TQSql::Update );
- if ( confirmUpdate() )
- conf = confirmEdit( TQSql::Update );
- switch ( conf ) {
- case TQSql::Yes:
- updateCurrent();
- break;
- case TQSql::No:
- case TQSql::Cancel:
- break;
- }
- break;
- }
-}
-
-
-/*!
- Performs a delete operation on the data browser's cursor. If there
- is no default cursor or no default form, nothing happens.
-
- Otherwise, the following happens:
-
- The current form's record is deleted from the database, providing
- that the data browser is not in insert mode. If the data browser
- is actively inserting a record (see insert()), the insert action
- is canceled, and the browser navigates to the last valid record
- that was current. If there is an error, handleError() is called.
-*/
-
-void TQDataBrowser::del()
-{
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return;
- TQSql::Confirm conf = TQSql::Yes;
- switch ( d->dat.mode() ){
- case TQSql::Insert:
- if ( confirmCancels() )
- conf = confirmCancel( TQSql::Insert );
- if ( conf == TQSql::Yes ) {
- cur->editBuffer( TRUE ); /* restore from cursor */
- readFields();
- d->dat.setMode( TQSql::Update );
- } else
- d->dat.setMode( TQSql::Insert );
- break;
- default:
- if ( confirmDelete() )
- conf = confirmEdit( TQSql::Delete );
- switch ( conf ) {
- case TQSql::Yes:
- emit primeDelete( buf );
- deleteCurrent();
- break;
- case TQSql::No:
- case TQSql::Cancel:
- break;
- }
- d->dat.setMode( TQSql::Update );
- break;
- }
-}
-
-/*!
- Moves the default cursor to the record specified by the index \a i
- and refreshes the default form to display this record. If there is
- no default form or no default cursor, nothing happens. If \a
- relative is TRUE (the default is FALSE), the cursor is moved
- relative to its current position. If the data browser successfully
- navigated to the desired record, the default cursor is primed for
- update and the primeUpdate() signal is emitted.
-
- If the browser is already positioned on the desired record nothing
- happens.
-*/
-
-bool TQDataBrowser::seek( int i, bool relative )
-{
- int b = 0;
- TQSqlCursor* cur = d->cur.cursor();
- if ( !cur )
- return FALSE;
- if ( preNav() )
- b = cur->seek( i, relative );
- postNav( b );
- return b;
-}
-
-/*!
- Moves the default cursor to the first record and refreshes the
- default form to display this record. If there is no default form
- or no default cursor, nothing happens. If the data browser
- successfully navigated to the first record, the default cursor is
- primed for update and the primeUpdate() signal is emitted.
-
- If the browser is already positioned on the first record nothing
- happens.
-
-*/
-
-void TQDataBrowser::first()
-{
- nav( &TQSqlCursor::first );
-}
-
-
-/*!
- Moves the default cursor to the last record and refreshes the
- default form to display this record. If there is no default form
- or no default cursor, nothing happens. If the data browser
- successfully navigated to the last record, the default cursor is
- primed for update and the primeUpdate() signal is emitted.
-
- If the browser is already positioned on the last record nothing
- happens.
-*/
-
-void TQDataBrowser::last()
-{
- nav( &TQSqlCursor::last );
-}
-
-
-/*!
- Moves the default cursor to the next record and refreshes the
- default form to display this record. If there is no default form
- or no default cursor, nothing happens. If the data browser
- successfully navigated to the next record, the default cursor is
- primed for update and the primeUpdate() signal is emitted.
-
- If the browser is positioned on the last record nothing happens.
-*/
-
-void TQDataBrowser::next()
-{
- nav( &TQSqlCursor::next );
-}
-
-
-/*!
- Moves the default cursor to the previous record and refreshes the
- default form to display this record. If there is no default form
- or no default cursor, nothing happens. If the data browser
- successfully navigated to the previous record, the default cursor
- is primed for update and the primeUpdate() signal is emitted.
-
- If the browser is positioned on the first record nothing happens.
-*/
-
-void TQDataBrowser::prev()
-{
- nav( &TQSqlCursor::prev );
-}
-
-/*!
- Reads the fields from the default cursor's edit buffer and
- displays them in the form. If there is no default cursor or no
- default form, nothing happens.
-*/
-
-void TQDataBrowser::readFields()
-{
- d->frm.readFields();
-}
-
-
-/*!
- Writes the form's data to the default cursor's edit buffer. If
- there is no default cursor or no default form, nothing happens.
-*/
-
-void TQDataBrowser::writeFields()
-{
- d->frm.writeFields();
-}
-
-
-/*!
- Clears all the values in the form.
-
- All the edit buffer field values are set to their 'zero state',
- e.g. 0 for numeric fields and "" for string fields. Then the
- widgets are updated using the property map. For example, a
- combobox that is property-mapped to integers would scroll to the
- first item. See the \l TQSqlPropertyMap constructor for the default
- mappings of widgets to properties.
-*/
-
-void TQDataBrowser::clearValues()
-{
- d->frm.clearValues();
-}
-
-/*!
- Reads the fields from the default form into the default cursor and
- performs an insert on the default cursor. If there is no default
- form or no default cursor, nothing happens. If an error occurred
- during the insert into the database, handleError() is called and
- FALSE is returned. If the insert was successfull, the cursor is
- refreshed and relocated to the newly inserted record, the
- cursorChanged() signal is emitted, and TRUE is returned.
-
- \sa cursorChanged() sqlCursor() form() handleError()
-*/
-
-bool TQDataBrowser::insertCurrent()
-{
- if ( isReadOnly() )
- return FALSE;
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return FALSE;
- writeFields();
- emit beforeInsert( buf );
- int ar = cur->insert();
- if ( !ar || !cur->isActive() ) {
- handleError( cur->lastError() );
- refresh();
- updateBoundary();
- } else {
- refresh();
- d->cur.findBuffer( cur->primaryIndex() );
- updateBoundary();
- cursorChanged( TQSqlCursor::Insert );
- return TRUE;
- }
- return FALSE;
-}
-
-
-/*!
- Reads the fields from the default form into the default cursor and
- performs an update on the default cursor. If there is no default
- form or no default cursor, nothing happens. If an error occurred
- during the update on the database, handleError() is called and
- FALSE is returned. If the update was successfull, the cursor is
- refreshed and relocated to the updated record, the cursorChanged()
- signal is emitted, and TRUE is returned.
-
- \sa cursor() form() handleError()
-*/
-
-bool TQDataBrowser::updateCurrent()
-{
- if ( isReadOnly() )
- return FALSE;
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return FALSE;
- writeFields();
- emit beforeUpdate( buf );
- int ar = cur->update();
- if ( !ar || !cur->isActive() ) {
- handleError( cur->lastError() );
- refresh();
- updateBoundary();
- } else {
- refresh();
- d->cur.findBuffer( cur->primaryIndex() );
- updateBoundary();
- cur->editBuffer( TRUE );
- cursorChanged( TQSqlCursor::Update );
- readFields();
- return TRUE;
- }
- return FALSE;
-}
-
-
-/*!
- Performs a delete on the default cursor using the values from the
- default form and updates the default form. If there is no default
- form or no default cursor, nothing happens. If the deletion was
- successful, the cursor is repositioned to the nearest record and
- TRUE is returned. The nearest record is the next record if there
- is one otherwise the previous record if there is one. If an error
- occurred during the deletion from the database, handleError() is
- called and FALSE is returned.
-
- \sa cursor() form() handleError()
-*/
-
-bool TQDataBrowser::deleteCurrent()
-{
- if ( isReadOnly() )
- return FALSE;
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return FALSE;
- writeFields();
- int n = cur->at();
- emit beforeDelete( buf );
- int ar = cur->del();
- if ( ar ) {
- refresh();
- updateBoundary();
- cursorChanged( TQSqlCursor::Delete );
- if ( !cur->seek( n ) )
- last();
- if ( cur->isValid() ) {
- cur->editBuffer( TRUE );
- readFields();
- } else {
- clearValues();
- }
- return TRUE;
- } else {
- if ( !cur->isActive() ) {
- handleError( cur->lastError() );
- refresh();
- updateBoundary();
- }
- }
- return FALSE;
-}
-
-
-/*!
- Returns TRUE if the form's edit buffer differs from the current
- cursor buffer; otherwise returns FALSE.
-*/
-
-bool TQDataBrowser::currentEdited()
-{
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return FALSE;
- if ( !cur->isActive() || !cur->isValid() )
- return FALSE;
- writeFields();
- for ( uint i = 0; i < cur->count(); ++i ) {
- if ( cur->value(i) != buf->value(i) )
- return TRUE;
- }
- return FALSE;
-}
-
-/*! \internal
-
- Pre-navigation checking.
-*/
-
-bool TQDataBrowser::preNav()
-{
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return FALSE;
-
- if ( !isReadOnly() && autoEdit() && currentEdited() ) {
- bool ok = TRUE;
- TQSql::Confirm conf = TQSql::Yes;
- switch ( d->dat.mode() ){
- case TQSql::Insert:
- if ( confirmInsert() )
- conf = confirmEdit( TQSql::Insert );
- switch ( conf ) {
- case TQSql::Yes:
- ok = insertCurrent();
- d->dat.setMode( TQSql::Update );
- break;
- case TQSql::No:
- d->dat.setMode( TQSql::Update );
- break;
- case TQSql::Cancel:
- return FALSE;
- }
- break;
- default:
- if ( confirmUpdate() )
- conf = confirmEdit( TQSql::Update );
- switch ( conf ) {
- case TQSql::Yes:
- ok = updateCurrent();
- break;
- case TQSql::No:
- break;
- case TQSql::Cancel:
- return FALSE;
- }
- }
- return ok;
- }
- return TRUE;
-}
-
-/*! \internal
-
- Handles post-navigation according to \a primeUpd.
-*/
-
-void TQDataBrowser::postNav( bool primeUpd )
-{
- if ( primeUpd ) {
- TQSqlRecord* buf = d->frm.record();
- TQSqlCursor* cur = d->cur.cursor();
- if ( !buf || !cur )
- return;
- currentChanged( cur );
- cur->primeUpdate();
- emit primeUpdate( buf );
- readFields();
- }
- updateBoundary();
-}
-
-/*! \internal
-
- Navigate default cursor according to \a nav. Handles autoEdit.
-
-*/
-void TQDataBrowser::nav( Nav nav )
-{
- int b = 0;
- TQSqlCursor* cur = d->cur.cursor();
- if ( !cur )
- return;
- if ( preNav() )
- b = (cur->*nav)();
- postNav( b );
-}
-
-/*!
- If boundaryChecking() is TRUE, checks the boundary of the current
- default cursor and emits Q_SIGNALS which indicate the position of
- the cursor.
-*/
-
-void TQDataBrowser::updateBoundary()
-{
- if ( d->boundaryCheck ) {
- Boundary bound = boundary();
- switch ( bound ) {
- case Unknown:
- case None:
- emit firstRecordAvailable( TRUE );
- emit prevRecordAvailable( TRUE );
- emit nextRecordAvailable( TRUE );
- emit lastRecordAvailable( TRUE );
- break;
-
- case BeforeBeginning:
- emit firstRecordAvailable( FALSE );
- emit prevRecordAvailable( FALSE );
- emit nextRecordAvailable( TRUE );
- emit lastRecordAvailable( TRUE );
- break;
-
- case Beginning:
- emit firstRecordAvailable( FALSE );
- emit prevRecordAvailable( FALSE );
- emit nextRecordAvailable( TRUE );
- emit lastRecordAvailable( TRUE );
- break;
-
- case End:
- emit firstRecordAvailable( TRUE );
- emit prevRecordAvailable( TRUE );
- emit nextRecordAvailable( FALSE );
- emit lastRecordAvailable( FALSE );
- break;
-
- case AfterEnd:
- emit firstRecordAvailable( TRUE );
- emit prevRecordAvailable( TRUE );
- emit nextRecordAvailable( FALSE );
- emit lastRecordAvailable( FALSE );
- break;
- }
- }
-}
-
-/*!
- Virtual function which handles the error \a error. The default
- implementation warns the user with a message box.
-*/
-
-void TQDataBrowser::handleError( const TQSqlError& error )
-{
- d->dat.handleError( this, error );
-}
-
-/*!
- Protected virtual function which returns a confirmation for an
- edit of mode \a m. Derived classes can reimplement this function
- and provide their own confirmation dialog. The default
- implementation uses a message box which prompts the user to
- confirm the edit action.
-*/
-
-TQSql::Confirm TQDataBrowser::confirmEdit( TQSql::Op m )
-{
- return d->dat.confirmEdit( this, m );
-}
-
-/*!
- Protected virtual function which returns a confirmation for
- cancelling an edit mode \a m. Derived classes can reimplement this
- function and provide their own confirmation dialog. The default
- implementation uses a message box which prompts the user to
- confirm the edit action.
-*/
-
-TQSql::Confirm TQDataBrowser::confirmCancel( TQSql::Op m )
-{
- return d->dat.confirmCancel( this, m );
-}
-
-/*!
- \fn void TQDataBrowser::beforeInsert( TQSqlRecord* buf )
-
- This signal is emitted just before the cursor's edit buffer is
- inserted into the database. The \a buf parameter points to the
- edit buffer being inserted. You might connect to this signal to
- populate a generated primary key for example.
-*/
-
-/*!
- \fn void TQDataBrowser::beforeUpdate( TQSqlRecord* buf )
-
- This signal is emitted just before the cursor's edit buffer is
- updated in the database. The \a buf parameter points to the edit
- buffer being updated. You might connect to this signal to capture
- some auditing information about the update.
-*/
-
-/*!
- \fn void TQDataBrowser::beforeDelete( TQSqlRecord* buf )
-
- This signal is emitted just before the cursor's edit buffer is
- deleted from the database. The \a buf parameter points to the edit
- buffer being deleted. You might connect to this signal to capture
- some auditing information about the deletion.
-*/
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqdatabrowser.h b/tqtinterface/qt4/src/sql/tqdatabrowser.h
deleted file mode 100644
index 1dd20b4..0000000
--- a/tqtinterface/qt4/src/sql/tqdatabrowser.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQDataBrowser class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQDATABROWSER_H
-#define TQDATABROWSER_H
-
-#ifndef TQT_H
-#include "tqwidget.h"
-#include "tqstring.h"
-#include "tqstringlist.h"
-#include "tqsql.h"
-#include "tqsqlindex.h"
-#include "tqsqlcursor.h"
-#include "tqsqlerror.h"
-#endif // TQT_H
-
-#ifndef TQT_NO_STQL_VIEW_WIDGETS
-
-class TQSqlForm;
-class TQDataBrowserPrivate;
-
-class TQ_EXPORT TQDataBrowser : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
- Q_PROPERTY( bool boundaryChecking READ boundaryChecking WRITE setBoundaryChecking )
- Q_PROPERTY( TQString filter READ filter WRITE setFilter )
- Q_PROPERTY( TQStringList sort READ sort WRITE setSort )
- Q_PROPERTY( bool confirmEdits READ confirmEdits WRITE setConfirmEdits )
- Q_PROPERTY( bool confirmInsert READ confirmInsert WRITE setConfirmInsert )
- Q_PROPERTY( bool confirmUpdate READ confirmUpdate WRITE setConfirmUpdate )
- Q_PROPERTY( bool confirmDelete READ confirmDelete WRITE setConfirmDelete )
- Q_PROPERTY( bool confirmCancels READ confirmCancels WRITE setConfirmCancels )
- Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
- Q_PROPERTY( bool autoEdit READ autoEdit WRITE setAutoEdit )
-
-public:
- TQDataBrowser( TQWidget* parent=0, const char* name=0, WFlags fl = 0 );
- ~TQDataBrowser();
-
- enum Boundary {
- Unknown,
- None,
- BeforeBeginning,
- Beginning,
- End,
- AfterEnd
- };
-
- Boundary boundary();
- void setBoundaryChecking( bool active );
- bool boundaryChecking() const;
-
- void setSort( const TQSqlIndex& sort );
- void setSort( const TQStringList& sort );
- TQStringList sort() const;
- void setFilter( const TQString& filter );
- TQString filter() const;
- virtual void setSqlCursor( TQSqlCursor* cursor, bool autoDelete = FALSE );
- TQSqlCursor* sqlCursor() const;
- virtual void setForm( TQSqlForm* form );
- TQSqlForm* form();
-
- virtual void setConfirmEdits( bool confirm );
- virtual void setConfirmInsert( bool confirm );
- virtual void setConfirmUpdate( bool confirm );
- virtual void setConfirmDelete( bool confirm );
- virtual void setConfirmCancels( bool confirm );
- bool confirmEdits() const;
- bool confirmInsert() const;
- bool confirmUpdate() const;
- bool confirmDelete() const;
- bool confirmCancels() const;
-
- virtual void setReadOnly( bool active );
- bool isReadOnly() const;
- virtual void setAutoEdit( bool autoEdit );
- bool autoEdit() const;
-
- virtual bool seek( int i, bool relative = FALSE );
-
-Q_SIGNALS:
- void firstRecordAvailable( bool available );
- void lastRecordAvailable( bool available );
- void nextRecordAvailable( bool available );
- void prevRecordAvailable( bool available );
-
- void currentChanged( const TQSqlRecord* record );
- void primeInsert( TQSqlRecord* buf );
- void primeUpdate( TQSqlRecord* buf );
- void primeDelete( TQSqlRecord* buf );
- void beforeInsert( TQSqlRecord* buf );
- void beforeUpdate( TQSqlRecord* buf );
- void beforeDelete( TQSqlRecord* buf );
- void cursorChanged( TQSqlCursor::Mode mode );
-
-public Q_SLOTS:
- virtual void refresh();
-
- virtual void insert();
- virtual void update();
- virtual void del();
-
- virtual void first();
- virtual void last();
- virtual void next();
- virtual void prev();
-
- virtual void readFields();
- virtual void writeFields();
- virtual void clearValues();
-
- void updateBoundary();
-
-protected:
- virtual bool insertCurrent();
- virtual bool updateCurrent();
- virtual bool deleteCurrent();
- virtual bool currentEdited();
-
- virtual TQSql::Confirm confirmEdit( TQSql::Op m );
- virtual TQSql::Confirm confirmCancel( TQSql::Op m );
-
- virtual void handleError( const TQSqlError& error );
-
-private:
- typedef bool (TQSqlCursor::*Nav)();
- bool preNav();
- void postNav( bool primeUpd );
- void nav( Nav nav );
- TQDataBrowserPrivate* d;
-
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQDataBrowser( const TQDataBrowser & );
- TQDataBrowser &operator=( const TQDataBrowser & );
-#endif
-};
-
-
-#endif
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqdatatable.cpp b/tqtinterface/qt4/src/sql/tqdatatable.cpp
deleted file mode 100644
index 99ef396..0000000
--- a/tqtinterface/qt4/src/sql/tqdatatable.cpp
+++ /dev/null
@@ -1,2322 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQDataTable class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqdatatable.h"
-
-#ifndef TQT_NO_STQL_VIEW_WIDGETS
-
-#include "tqsqldriver.h"
-#include "tqsqleditorfactory.h"
-#include "tqsqlpropertymap.h"
-#include "tqapplication.h"
-#include "tqlayout.h"
-#include "tqpainter.h"
-#include "tqpopupmenu.h"
-#include "tqvaluelist.h"
-#include "tqsqlmanager_p.h"
-#include "tqdatetime.h"
-#include "tqcursor.h"
-#include "tqtimer.h"
-
-//#define TQT_DEBUG_DATATABLE
-
-class TQDataTablePrivate
-{
-public:
- TQDataTablePrivate()
- : nullTxtChanged( FALSE ),
- haveAllRows( FALSE ),
- continuousEdit( FALSE ),
- editorFactory( 0 ),
- propertyMap( 0 ),
- editRow( -1 ),
- editCol( -1 ),
- insertRowLast( -1 ),
- insertPreRows( -1 ),
- editBuffer( 0 ),
- cancelMode( FALSE ),
- cancelInsert( FALSE ),
- cancelUpdate( FALSE )
- {}
- ~TQDataTablePrivate() { if ( propertyMap ) delete propertyMap; }
-
- TQString nullTxt;
- bool nullTxtChanged;
- typedef TQValueList< uint > ColIndex;
- ColIndex colIndex;
- bool haveAllRows;
- bool continuousEdit;
- TQSqlEditorFactory* editorFactory;
- TQSqlPropertyMap* propertyMap;
- TQString trueTxt;
- Qt::DateFormat datefmt;
- TQString falseTxt;
- int editRow;
- int editCol;
- int insertRowLast;
- TQString insertHeaderLabelLast;
- int insertPreRows;
- TQSqlRecord* editBuffer;
- bool cancelMode;
- bool cancelInsert;
- bool cancelUpdate;
- int lastAt;
- TQString ftr;
- TQStringList srt;
- TQStringList fld;
- TQStringList fldLabel;
- TQValueList<int> fldWidth;
- TQValueList<TQIconSet> fldIcon;
- TQValueList<bool> fldHidden;
- TQSqlCursorManager cur;
- TQDataManager dat;
-};
-
-#ifdef TQT_DEBUG_DATATABLE
-void qt_debug_buffer( const TQString& msg, TQSqlRecord* cursor )
-{
- qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- qDebug(msg);
- for ( uint j = 0; j < cursor->count(); ++j ) {
- qDebug(cursor->field(j)->name() + " type:" + TQString(cursor->field(j)->value().typeName()) + " value:" + cursor->field(j)->value().toString() );
- }
-}
-#endif
-
-/*!
- \enum TQDataTable::Refresh
-
- This enum describes the refresh options.
-
- \value RefreshData refresh the data, i.e. read it from the database
- \value RefreshColumns refresh the list of fields, e.g. the column headings
- \value RefreshAll refresh both the data and the list of fields
-*/
-
-
-/*!
- \class TQDataTable tqdatatable.h
- \brief The TQDataTable class provides a flexible SQL table widget that supports browsing and editing.
-
- \ingroup database
- \mainclass
- \module sql
-
- TQDataTable supports various functions for presenting and editing
- SQL data from a \l TQSqlCursor in a table.
-
- If you want a to present your data in a form use TQDataBrowser, or
- for read-only forms, TQDataView.
-
- When displaying data, TQDataTable only retrieves data for visible
- rows. If the driver supports the 'query size' property the
- TQDataTable will have the correct number of rows and the vertical
- scrollbar will accurately reflect the number of rows displayed in
- proportion to the number of rows in the dataset. If the driver
- does not support the 'query size' property, rows are dynamically
- fetched from the database on an as-needed basis with the scrollbar
- becoming more accurate as the user scrolls down through the
- records. This allows extremely large queries to be displayed as
- quickly as possible, with minimum memory usage.
-
- TQDataTable inherits TQTable's API and extends it with functions to
- sort and filter the data and sort columns. See setSqlCursor(),
- setFilter(), setSort(), setSorting(), sortColumn() and refresh().
-
- When displaying editable cursors, cell editing will be enabled.
- (For more information on editable cursors, see \l TQSqlCursor).
- TQDataTable can be used to modify existing data and to add new
- records. When a user makes changes to a field in the table, the
- cursor's edit buffer is used. The table will not send changes in
- the edit buffer to the database until the user moves to a
- different record in the grid or presses Enter. Cell editing is
- initiated by pressing F2 (or right clicking and then clicking the
- appropriate popup menu item) and canceled by pressing Esc. If
- there is a problem updating or adding data, errors are handled
- automatically (see handleError() to change this behavior). Note
- that if autoEdit() is FALSE navigating to another record will
- cancel the insert or update.
-
- The user can be asked to confirm all edits with setConfirmEdits().
- For more precise control use setConfirmInsert(),
- setConfirmUpdate(), setConfirmDelete() and setConfirmCancels().
- Use setAutoEdit() to control the behaviour of the table when the
- user edits a record and then navigates. (Note that setAutoDelete()
- is unrelated; it is used to set whether the TQSqlCursor is deleted
- when the table is deleted.)
-
- Since the data table can perform edits, it must be able to
- uniquely identify every record so that edits are correctly
- applied. Because of this the underlying cursor must have a valid
- primary index to ensure that a unique record is inserted, updated
- or deleted within the database otherwise the database may be
- changed to an inconsistent state.
-
- TQDataTable creates editors using the default \l TQSqlEditorFactory.
- Different editor factories can be used by calling
- installEditorFactory(). A property map is used to map between the
- cell's value and the editor. You can use your own property map
- with installPropertyMap().
-
- The contents of a cell is available as a TQString with text() or as
- a TQVariant with value(). The current record is returned by
- currentRecord(). Use the find() function to search for a string in
- the table.
-
- Editing actions can be applied programatically. For example, the
- insertCurrent() function reads the fields from the current record
- into the cursor and performs the insert. The updateCurrent() and
- deleteCurrent() functions perform similarly to update and delete
- the current record respectively.
-
- Columns in the table can be created automatically based on the
- cursor (see setSqlCursor()). Columns can be manipulated manually
- using addColumn(), removeColumn() and setColumn().
-
- The table automatically copies many of the properties of the
- cursor to format the display of data within cells (tqalignment,
- visibility, etc.). The cursor can be changed with setSqlCursor().
- The filter (see setFilter()) and sort defined within the table are
- used instead of the filter and sort set on the cursor. For sorting
- options see setSort(), sortColumn(), sortAscending() and
- sortDescending(). Note that sorting operations will not behave as
- expected if you are using a TQSqlSelectCursor because it uses
- user-defined SQL queries to obtain data.
-
- The text used to represent NULL, TRUE and FALSE values can be
- changed with setNullText(), setTrueText() and setFalseText()
- respectively. You can change the appearance of cells by
- reimplementing paintField().
-
- Whenever a new row is selected in the table the currentChanged()
- signal is emitted. The primeInsert() signal is emitted when an
- insert is initiated. The primeUpdate() and primeDelete() Q_SIGNALS
- are emitted when update and deletion are initiated respectively.
- Just before the database is updated a signal is emitted;
- beforeInsert(), beforeUpdate() or beforeDelete() as appropriate.
-
-*/
-
-/*!
- Constructs a data table which is a child of \a parent, called
- name \a name.
-*/
-
-TQDataTable::TQDataTable ( TQWidget * parent, const char * name )
- : TQTable( parent, name )
-{
- init();
-}
-
-/*!
- Constructs a data table which is a child of \a parent, called name
- \a name using the cursor \a cursor.
-
- If \a autoPopulate is TRUE (the default is FALSE), columns are
- automatically created based upon the fields in the \a cursor
- record. Note that \a autoPopulate only governs the creation of
- columns; to load the cursor's data into the table use refresh().
-
- If the \a cursor is read-only, the table also becomes read-only.
- In addition, the table adopts the cursor's driver's definition for
- representing NULL values as strings.
-*/
-
-TQDataTable::TQDataTable ( TQSqlCursor* cursor, bool autoPopulate, TQWidget * parent, const char * name )
- : TQTable( parent, name )
-{
- init();
- setSqlCursor( cursor, autoPopulate );
-}
-
-/*! \internal
-*/
-
-
-void TQDataTable::init()
-{
- d = new TQDataTablePrivate();
- setAutoEdit( TRUE );
- setSelectionMode( SingleRow );
- setFocusStyle( FollowStyle );
- d->trueTxt = tr( "True" );
- d->falseTxt = tr( "False" );
- d->datefmt = Qt::LocalDate;
- reset();
- connect( this, TQT_SIGNAL( selectionChanged() ),
- TQT_SLOT( updateCurrentSelection()));
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQDataTable::~TQDataTable()
-{
- delete d;
-}
-
-
-/*!
- Adds the next column to be displayed using the field \a fieldName,
- column label \a label, width \a width and iconset \a iconset.
-
- If \a label is specified, it is used as the column's header label,
- otherwise the field's display label is used when setSqlCursor() is
- called. The \a iconset is used to set the icon used by the column
- header; by default there is no icon.
-
- \sa setSqlCursor() refresh()
-*/
-
-void TQDataTable::addColumn( const TQString& fieldName,
- const TQString& label,
- int width,
- const TQIconSet& iconset )
-{
- d->fld += fieldName;
- d->fldLabel += label;
- d->fldIcon += iconset;
- d->fldWidth += width;
- d->fldHidden += FALSE;
-}
-
-/*!
- Sets the \a col column to display using the field \a fieldName,
- column label \a label, width \a width and iconset \a iconset.
-
- If \a label is specified, it is used as the column's header label,
- otherwise the field's display label is used when setSqlCursor() is
- called. The \a iconset is used to set the icon used by the column
- header; by default there is no icon.
-
- \sa setSqlCursor() refresh()
-*/
-
-void TQDataTable::setColumn( uint col, const TQString& fieldName,
- const TQString& label,
- int width,
- const TQIconSet& iconset )
-{
- d->fld[col]= fieldName;
- d->fldLabel[col] = label;
- d->fldIcon[col] = iconset;
- d->fldWidth[col] = width;
- d->fldHidden[col] = FALSE;
-}
-
-/*!
- Removes column \a col from the list of columns to be displayed. If
- \a col does not exist, nothing happens.
-
- \sa TQSqlField
-*/
-
-void TQDataTable::removeColumn( uint col )
-{
- if ( d->fld.at( col ) != d->fld.end() ) {
- d->fld.remove( d->fld.at( col ) );
- d->fldLabel.remove( d->fldLabel.at( col ) );
- d->fldIcon.remove( d->fldIcon.at( col ) );
- d->fldWidth.remove( d->fldWidth.at( col ) );
- d->fldHidden.remove( d->fldHidden.at( col ) );
- }
-}
-
-/*!
- Sets the column \a col to the width \a w. Note that unlike TQTable
- the TQDataTable is not immediately redrawn, you must call
- refresh(TQDataTable::RefreshColumns)
- yourself.
-
- \sa refresh()
-*/
-void TQDataTable::setColumnWidth( int col, int w )
-{
- if ( d->fldWidth.at( col ) != d->fldWidth.end() ) {
- d->fldWidth[col] = w;
- }
-}
-
-/*!
- Resizes column \a col so that the column width is wide enough to
- display the widest item the column contains (including the column
- label). If the table's TQSqlCursor is not currently active, the
- cursor will be refreshed before the column width is calculated. Be
- aware that this function may be slow on tables that contain large
- result sets.
-*/
-void TQDataTable::adjustColumn( int col )
-{
- TQSqlCursor * cur = sqlCursor();
- if ( !cur || cur->count() <= (uint)col )
- return;
- if ( !cur->isActive() ) {
- d->cur.refresh();
- }
- int oldRow = currentRow();
- int w = fontMetrics().width( horizontalHeader()->label( col ) + "W" );
- cur->seek( TQSql::BeforeFirst );
- while ( cur->next() ) {
- w = TQMAX( w, fontMetrics().width( fieldToString( cur->field( indexOf( col ) ) ) ) + 10 );
- }
- setColumnWidth( col, w );
- cur->seek( oldRow );
- refresh( RefreshColumns );
-}
-
-/*! \reimp
-*/
-void TQDataTable::setColumnStretchable( int col, bool s )
-{
- if ( numCols() == 0 ) {
- refresh( RefreshColumns );
- }
- if ( numCols() > col ) {
- TQTable::setColumnStretchable( col, s );
- }
-}
-
-TQString TQDataTable::filter() const
-{
- return d->cur.filter();
-}
-
-/*!
- \property TQDataTable::filter
- \brief the data filter for the data table
-
- The filter applies to the data shown in the table. To view data
- with a new filter, use refresh(). A filter string is an SQL WHERE
- clause without the WHERE keyword.
-
- There is no default filter.
-
- \sa sort()
-
-*/
-
-void TQDataTable::setFilter( const TQString& filter )
-{
- d->cur.setFilter( filter );
-}
-
-
-/*!
- \property TQDataTable::sort
- \brief the data table's sort
-
- The table's sort affects the order in which data records are
- displayed in the table. To apply a sort, use refresh().
-
- When examining the sort property, a string list is returned with
- each item having the form 'fieldname order' (e.g., 'id ASC',
- 'surname DESC').
-
- There is no default sort.
-
- Note that if you want to iterate over the sort list, you should
- iterate over a copy, e.g.
- \code
- TQStringList list = myDataTable.sort();
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-
- \sa filter() refresh()
-*/
-
-void TQDataTable::setSort( const TQStringList& sort )
-{
- d->cur.setSort( sort );
-}
-
-/*!
- \overload
-
- Sets the sort to be applied to the displayed data to \a sort. If
- there is no current cursor, nothing happens. A TQSqlIndex contains
- field names and their ordering (ASC or DESC); these are used to
- compose the ORDER BY clause.
-
- \sa sort()
-*/
-
-void TQDataTable::setSort( const TQSqlIndex& sort )
-{
- d->cur.setSort( sort );
-}
-
-TQStringList TQDataTable::sort() const
-{
- return d->cur.sort();
-}
-
-/*!
- Returns the cursor used by the data table.
-*/
-
-TQSqlCursor* TQDataTable::sqlCursor() const
-{
- return d->cur.cursor();
-}
-
-void TQDataTable::setConfirmEdits( bool confirm )
-{
- d->dat.setConfirmEdits( confirm );
-}
-
-void TQDataTable::setConfirmInsert( bool confirm )
-{
- d->dat.setConfirmInsert( confirm );
-}
-
-void TQDataTable::setConfirmUpdate( bool confirm )
-{
- d->dat.setConfirmUpdate( confirm );
-}
-
-void TQDataTable::setConfirmDelete( bool confirm )
-{
- d->dat.setConfirmDelete( confirm );
-}
-
-/*!
- \property TQDataTable::confirmEdits
- \brief whether the data table confirms edit operations
-
- If the confirmEdits property is TRUE, the data table confirms all
- edit operations (inserts, updates and deletes). Finer control of
- edit confirmation can be achieved using \l confirmCancels, \l
- confirmInsert, \l confirmUpdate and \l confirmDelete.
-
- \sa confirmCancels() confirmInsert() confirmUpdate() confirmDelete()
-*/
-
-bool TQDataTable::confirmEdits() const
-{
- return ( d->dat.confirmEdits() );
-}
-
-/*!
- \property TQDataTable::confirmInsert
- \brief whether the data table confirms insert operations
-
- If the confirmInsert property is TRUE, all insertions must be
- confirmed by the user through a message box (this behaviour can be
- changed by overriding the confirmEdit() function), otherwise all
- insert operations occur immediately.
-
- \sa confirmCancels() confirmEdits() confirmUpdate() confirmDelete()
-*/
-
-bool TQDataTable::confirmInsert() const
-{
- return ( d->dat.confirmInsert() );
-}
-
-/*!
- \property TQDataTable::confirmUpdate
- \brief whether the data table confirms update operations
-
- If the confirmUpdate property is TRUE, all updates must be
- confirmed by the user through a message box (this behaviour can be
- changed by overriding the confirmEdit() function), otherwise all
- update operations occur immediately.
-
- \sa confirmCancels() confirmEdits() confirmInsert() confirmDelete()
-*/
-
-bool TQDataTable::confirmUpdate() const
-{
- return ( d->dat.confirmUpdate() );
-}
-
-/*!
- \property TQDataTable::confirmDelete
- \brief whether the data table confirms delete operations
-
- If the confirmDelete property is TRUE, all deletions must be
- confirmed by the user through a message box (this behaviour can be
- changed by overriding the confirmEdit() function), otherwise all
- delete operations occur immediately.
-
- \sa confirmCancels() confirmEdits() confirmUpdate() confirmInsert()
-*/
-
-bool TQDataTable::confirmDelete() const
-{
- return ( d->dat.confirmDelete() );
-}
-
-/*!
- \property TQDataTable::confirmCancels
- \brief whether the data table confirms cancel operations
-
- If the confirmCancel property is TRUE, all cancels must be
- confirmed by the user through a message box (this behavior can be
- changed by overriding the confirmCancel() function), otherwise all
- cancels occur immediately. The default is FALSE.
-
- \sa confirmEdits() confirmCancel()
-*/
-
-void TQDataTable::setConfirmCancels( bool confirm )
-{
- d->dat.setConfirmCancels( confirm );
-}
-
-bool TQDataTable::confirmCancels() const
-{
- return d->dat.confirmCancels();
-}
-
-/*!
- \reimp
-
- For an editable table, creates an editor suitable for the field in
- column \a col. The editor is created using the default editor
- factory, unless a different editor factory was installed with
- installEditorFactory(). The editor is primed with the value of the
- field in \a col using a property map. The property map used is the
- default property map, unless a new property map was installed with
- installPropertMap(). If \a initFromCell is TRUE then the editor is
- primed with the value in the TQDataTable cell.
-*/
-
-TQWidget * TQDataTable::createEditor( int , int col, bool initFromCell ) const
-{
- if ( d->dat.mode() == TQSql::None )
- return 0;
-
- TQSqlEditorFactory * f = (d->editorFactory == 0) ?
- TQSqlEditorFactory::defaultFactory() : d->editorFactory;
-
- TQSqlPropertyMap * m = (d->propertyMap == 0) ?
- TQSqlPropertyMap::defaultMap() : d->propertyMap;
-
- TQWidget * w = 0;
- if( initFromCell && d->editBuffer ){
- w = f->createEditor( viewport(), d->editBuffer->field( indexOf( col ) ) );
- if ( w )
- m->setProperty( w, d->editBuffer->value( indexOf( col ) ) );
- }
- return w;
-}
-
-/*! \reimp */
-bool TQDataTable::eventFilter( TQObject *o, TQEvent *e )
-{
- if ( d->cancelMode )
- return TRUE;
-
- int r = currentRow();
- int c = currentColumn();
-
- if ( d->dat.mode() != TQSql::None ) {
- r = d->editRow;
- c = d->editCol;
- }
-
- d->cancelInsert = FALSE;
- d->cancelUpdate = FALSE;
- switch ( e->type() ) {
- case TQEvent::KeyPress: {
- int conf = TQSql::Yes;
- TQKeyEvent *ke = (TQKeyEvent*)e;
- if ( ( ke->key() == Qt::Key_Tab || ke->key() == TQt::Key_BackTab )
- && ke->state() & ControlButton )
- return FALSE;
-
- if ( ke->key() == Key_Escape && d->dat.mode() == TQSql::Insert ){
- if ( confirmCancels() && !d->cancelMode ) {
- d->cancelMode = TRUE;
- conf = confirmCancel( TQSql::Insert );
- d->cancelMode = FALSE;
- }
- if ( conf == TQSql::Yes ) {
- d->cancelInsert = TRUE;
- } else {
- TQWidget *editorWidget = cellWidget( r, c );
- if ( editorWidget ) {
- editorWidget->setActiveWindow();
- editorWidget->setFocus();
- }
- return TRUE;
- }
- }
- if ( ke->key() == Key_Escape && d->dat.mode() == TQSql::Update ) {
- if ( confirmCancels() && !d->cancelMode ) {
- d->cancelMode = TRUE;
- conf = confirmCancel( TQSql::Update );
- d->cancelMode = FALSE;
- }
- if ( conf == TQSql::Yes ){
- d->cancelUpdate = TRUE;
- } else {
- TQWidget *editorWidget = cellWidget( r, c );
- if ( editorWidget ) {
- editorWidget->setActiveWindow();
- editorWidget->setFocus();
- }
- return TRUE;
- }
- }
- if ( ke->key() == Qt::Key_Insert && d->dat.mode() == TQSql::None ) {
- beginInsert();
- return TRUE;
- }
- if ( ke->key() == Qt::Key_Delete && d->dat.mode() == TQSql::None ) {
- deleteCurrent();
- return TRUE;
- }
- if ( d->dat.mode() != TQSql::None ) {
- if ( (ke->key() == Qt::Key_Tab) && (c < numCols() - 1) && (!isColumnReadOnly( c+1 ) || d->dat.mode() == TQSql::Insert) )
- d->continuousEdit = TRUE;
- else if ( (ke->key() == TQt::Key_BackTab) && (c > 0) && (!isColumnReadOnly( c-1 ) || d->dat.mode() == TQSql::Insert) )
- d->continuousEdit = TRUE;
- else
- d->continuousEdit = FALSE;
- }
- TQSqlCursor * sql = sqlCursor();
- if ( sql && sql->driver() &&
- !sql->driver()->hasFeature( TQSqlDriver::QuerySize ) &&
- ke->key() == Qt::Key_End && d->dat.mode() == TQSql::None ) {
-#ifndef TQT_NO_CURSOR
- TQApplication::setOverrideCursor( TQt::WaitCursor );
-#endif
- int i = sql->at();
- if ( i < 0 ) {
- i = 0;
- sql->seek(0);
- }
- while ( sql->next() )
- i++;
- setNumRows( i+1 );
- setCurrentCell( i+1, currentColumn() );
-#ifndef TQT_NO_CURSOR
- TQApplication::restoreOverrideCursor();
-#endif
- return TRUE;
- }
- break;
- }
- case TQEvent::FocusOut: {
- TQWidget *editorWidget = cellWidget( r, c );
- repaintCell( currentRow(), currentColumn() );
- if ( !d->cancelMode && editorWidget && TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(editorWidget) &&
- ( d->dat.mode() == TQSql::Insert) && !d->continuousEdit) {
- setCurrentCell( r, c );
- d->cancelInsert = TRUE;
- }
- d->continuousEdit = FALSE;
- break;
- }
- case TQEvent::FocusIn:
- repaintCell( currentRow(), currentColumn() );
- break;
- default:
- break;
- }
- return TQTable::eventFilter( o, e );
-}
-
-/*! \reimp */
-void TQDataTable::resizeEvent ( TQResizeEvent * e )
-{
- if ( sqlCursor() &&
- sqlCursor()->driver() &&
- !sqlCursor()->driver()->hasFeature( TQSqlDriver::QuerySize ) )
- loadNextPage();
- TQTable::resizeEvent( e );
-}
-
-/*! \reimp */
-void TQDataTable::contentsContextMenuEvent( TQContextMenuEvent* e )
-{
- TQTable::contentsContextMenuEvent( e );
- if ( isEditing() && d->dat.mode() != TQSql::None )
- endEdit( d->editRow, d->editCol, autoEdit(), FALSE );
- if ( !sqlCursor() )
- return;
- if ( d->dat.mode() == TQSql::None ) {
- if ( isReadOnly() )
- return;
- enum {
- IdInsert,
- IdUpdate,
- IdDelete
- };
- TQGuardedPtr<TQPopupMenu> popup = new TQPopupMenu( this, "qt_datatable_menu" );
- int id[ 3 ];
- id[ IdInsert ] = popup->insertItem( tr( "Insert" ) );
- id[ IdUpdate ] = popup->insertItem( tr( "Update" ) );
- id[ IdDelete ] = popup->insertItem( tr( "Delete" ) );
- bool enableInsert = sqlCursor()->canInsert();
- popup->setItemEnabled( id[ IdInsert ], enableInsert );
- bool enableUpdate = currentRow() > -1 && sqlCursor()->canUpdate() && !isColumnReadOnly( currentColumn() );
- popup->setItemEnabled( id[ IdUpdate ], enableUpdate );
- bool enableDelete = currentRow() > -1 && sqlCursor()->canDelete();
- popup->setItemEnabled( id[ IdDelete ], enableDelete );
- int r = popup->exec( e->globalPos() );
- delete (TQPopupMenu*) popup;
- if ( r == id[ IdInsert ] )
- beginInsert();
- else if ( r == id[ IdUpdate ] ) {
- if ( beginEdit( currentRow(), currentColumn(), FALSE ) )
- setEditMode( Editing, currentRow(), currentColumn() );
- else
- endUpdate();
- }
- else if ( r == id[ IdDelete ] )
- deleteCurrent();
- e->accept();
- }
-}
-
-/*! \reimp */
-void TQDataTable::contentsMousePressEvent( TQMouseEvent* e )
-{
- TQTable::contentsMousePressEvent( e );
-}
-
-/*! \reimp */
-TQWidget* TQDataTable::beginEdit ( int row, int col, bool replace )
-{
- d->editRow = -1;
- d->editCol = -1;
- if ( !sqlCursor() )
- return 0;
- if ( d->dat.mode() == TQSql::Insert && !sqlCursor()->canInsert() )
- return 0;
- if ( d->dat.mode() == TQSql::Update && !sqlCursor()->canUpdate() )
- return 0;
- d->editRow = row;
- d->editCol = col;
- if ( d->continuousEdit ) {
- // see comment in beginInsert()
- bool fakeReadOnly = isColumnReadOnly( col );
- setColumnReadOnly( col, FALSE );
- TQWidget* w = TQTable::beginEdit( row, col, replace );
- setColumnReadOnly( col, fakeReadOnly );
- return w;
- }
- if ( d->dat.mode() == TQSql::None && sqlCursor()->canUpdate() && sqlCursor()->primaryIndex().count() > 0 )
- return beginUpdate( row, col, replace );
- return 0;
-}
-
-/*! \reimp */
-void TQDataTable::endEdit( int row, int col, bool, bool )
-{
- bool accept = autoEdit() && !d->cancelInsert && !d->cancelUpdate;
-
- TQWidget *editor = cellWidget( row, col );
- if ( !editor )
- return;
- if ( d->cancelMode )
- return;
- if ( d->dat.mode() != TQSql::None && d->editBuffer ) {
- TQSqlPropertyMap * m = (d->propertyMap == 0) ?
- TQSqlPropertyMap::defaultMap() : d->propertyMap;
- d->editBuffer->setValue( indexOf( col ), m->property( editor ) );
- clearCellWidget( row, col );
- if ( !d->continuousEdit ) {
- switch ( d->dat.mode() ) {
- case TQSql::Insert:
- if ( accept )
- TQTimer::singleShot( 0, this, TQT_SLOT( doInsertCurrent() ) );
- else
- endInsert();
- break;
- case TQSql::Update:
- if ( accept )
- TQTimer::singleShot( 0, this, TQT_SLOT( doUpdateCurrent() ) );
- else
- endUpdate();
- break;
- default:
- break;
- }
- }
- } else {
- setEditMode( NotEditing, -1, -1 );
- }
- if ( d->dat.mode() == TQSql::None )
- viewport()->setFocus();
- updateCell( row, col );
- emit valueChanged( row, col );
-}
-
-/*! \internal */
-void TQDataTable::doInsertCurrent()
-{
- insertCurrent();
-}
-
-/*! \internal */
-void TQDataTable::doUpdateCurrent()
-{
- updateCurrent();
- if ( d->dat.mode() == TQSql::None ) {
- viewport()->setFocus();
- }
-}
-
-/*! \reimp */
-void TQDataTable::activateNextCell()
-{
-// if ( d->dat.mode() == TQSql::None )
-// TQTable::activateNextCell();
-}
-
-/*! \internal
-*/
-
-void TQDataTable::endInsert()
-{
- if ( d->dat.mode() != TQSql::Insert )
- return;
- d->dat.setMode( TQSql::None );
- d->editBuffer = 0;
- verticalHeader()->setLabel( d->editRow, TQString::number( d->editRow +1 ) );
- d->editRow = -1;
- d->editCol = -1;
- d->insertRowLast = -1;
- d->insertHeaderLabelLast = TQString::null;
- setEditMode( NotEditing, -1, -1 );
- setNumRows( d->insertPreRows );
- d->insertPreRows = -1;
- viewport()->setFocus();
-}
-
-/*! \internal
-*/
-
-void TQDataTable::endUpdate()
-{
- d->dat.setMode( TQSql::None );
- d->editBuffer = 0;
- updateRow( d->editRow );
- d->editRow = -1;
- d->editCol = -1;
- setEditMode( NotEditing, -1, -1 );
-}
-
-/*!
- Protected virtual function called when editing is about to begin
- on a new record. If the table is read-only, or if there's no
- cursor or the cursor does not allow inserts, nothing happens.
-
- Editing takes place using the cursor's edit buffer(see
- TQSqlCursor::editBuffer()).
-
- When editing begins, a new row is created in the table marked with
- an asterisk '*' in the row's vertical header column, i.e. at the
- left of the row.
-*/
-
-bool TQDataTable::beginInsert()
-{
- if ( !sqlCursor() || isReadOnly() || !numCols() )
- return FALSE;
- if ( !sqlCursor()->canInsert() )
- return FALSE;
- int i = 0;
- int row = currentRow();
-
- d->insertPreRows = numRows();
- if ( row < 0 || numRows() < 1 )
- row = 0;
- setNumRows( d->insertPreRows + 1 );
- setCurrentCell( row, 0 );
- d->editBuffer = sqlCursor()->primeInsert();
- emit primeInsert( d->editBuffer );
- d->dat.setMode( TQSql::Insert );
- int lastRow = row;
- int lastY = contentsY() + visibleHeight();
- for ( i = row; i < numRows() ; ++i ) {
- TQRect cg = cellGeometry( i, 0 );
- if ( (cg.y()+cg.height()) > lastY ) {
- lastRow = i;
- break;
- }
- }
- if ( lastRow == row && ( numRows()-1 > row ) )
- lastRow = numRows() - 1;
- d->insertRowLast = lastRow;
- d->insertHeaderLabelLast = verticalHeader()->label( d->insertRowLast );
- verticalHeader()->setLabel( row, "*" );
- d->editRow = row;
- // in the db world it's common to allow inserting new records
- // into a table that has read-only columns - temporarily
- // switch off read-only mode for such columns
- bool fakeReadOnly = isColumnReadOnly( 0 );
- setColumnReadOnly( 0, FALSE );
- if ( TQTable::beginEdit( row, 0, FALSE ) )
- setEditMode( Editing, row, 0 );
- setColumnReadOnly( 0, fakeReadOnly );
- return TRUE;
-}
-
-/*!
- Protected virtual function called when editing is about to begin
- on an existing row. If the table is read-only, or if there's no
- cursor, nothing happens.
-
- Editing takes place using the cursor's edit buffer (see
- TQSqlCursor::editBuffer()).
-
- \a row and \a col refer to the row and column in the TQDataTable.
-
- (\a replace is provided for reimplementors and reflects the API of
- TQTable::beginEdit().)
-*/
-
-TQWidget* TQDataTable::beginUpdate ( int row, int col, bool replace )
-{
- if ( !sqlCursor() || isReadOnly() || isColumnReadOnly( col ) )
- return 0;
- setCurrentCell( row, col );
- d->dat.setMode( TQSql::Update );
- if ( sqlCursor()->seek( row ) ) {
- d->editBuffer = sqlCursor()->primeUpdate();
- sqlCursor()->seek( currentRow() );
- emit primeUpdate( d->editBuffer );
- return TQTable::beginEdit( row, col, replace );
- }
- return 0;
-}
-
-/*!
- For an editable table, issues an insert on the current cursor
- using the values in the cursor's edit buffer. If there is no
- current cursor or there is no current "insert" row, nothing
- happens. If confirmEdits() or confirmInsert() is TRUE,
- confirmEdit() is called to confirm the insert. Returns TRUE if the
- insert succeeded; otherwise returns FALSE.
-
- The underlying cursor must have a valid primary index to ensure
- that a unique record is inserted within the database otherwise the
- database may be changed to an inconsistent state.
-*/
-
-bool TQDataTable::insertCurrent()
-{
- if ( d->dat.mode() != TQSql::Insert || ! numCols() )
- return FALSE;
- if ( !sqlCursor()->canInsert() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQDataTable::insertCurrent: insert not allowed for %s",
- sqlCursor()->name().latin1() );
-#endif
- endInsert();
- return FALSE;
- }
- int b = 0;
- int conf = TQSql::Yes;
- if ( confirmEdits() || confirmInsert() )
- conf = confirmEdit( TQSql::Insert );
- switch ( conf ) {
- case TQSql::Yes: {
-#ifndef TQT_NO_CURSOR
- TQApplication::setOverrideCursor( Qt::WaitCursor );
-#endif
- emit beforeInsert( d->editBuffer );
- b = sqlCursor()->insert();
-#ifndef TQT_NO_CURSOR
- TQApplication::restoreOverrideCursor();
-#endif
- if ( ( !b && !sqlCursor()->isActive() ) || !sqlCursor()->isActive() ) {
- handleError( sqlCursor()->lastError() );
- endInsert(); // cancel the insert if anything goes wrong
- refresh();
- } else {
- endInsert();
- refresh();
- TQSqlIndex idx = sqlCursor()->primaryIndex();
- findBuffer( idx, d->lastAt );
- repaintContents( contentsX(), contentsY(), visibleWidth(), visibleHeight(), FALSE );
- emit cursorChanged( TQSql::Insert );
- }
- break;
- }
- case TQSql::No:
- endInsert();
- break;
- case TQSql::Cancel:
- if ( TQTable::beginEdit( currentRow(), currentColumn(), FALSE ) )
- setEditMode( Editing, currentRow(), currentColumn() );
- break;
- }
- return ( b > 0 );
-}
-
-/*! \internal
-
- Updates the row \a row.
-*/
-
-void TQDataTable::updateRow( int row )
-{
- for ( int i = 0; i < numCols(); ++i )
- updateCell( row, i );
-}
-
-/*!
- For an editable table, issues an update using the cursor's edit
- buffer. If there is no current cursor or there is no current
- selection, nothing happens. If confirmEdits() or confirmUpdate()
- is TRUE, confirmEdit() is called to confirm the update. Returns
- TRUE if the update succeeded; otherwise returns FALSE.
-
- The underlying cursor must have a valid primary index to ensure
- that a unique record is updated within the database otherwise the
- database may be changed to an inconsistent state.
-*/
-
-bool TQDataTable::updateCurrent()
-{
- if ( d->dat.mode() != TQSql::Update )
- return FALSE;
- if ( sqlCursor()->primaryIndex().count() == 0 ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQDataTable::updateCurrent: no primary index for %s",
- sqlCursor()->name().latin1() );
-#endif
- endUpdate();
- return FALSE;
- }
- if ( !sqlCursor()->canUpdate() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQDataTable::updateCurrent: updates not allowed for %s",
- sqlCursor()->name().latin1() );
-#endif
- endUpdate();
- return FALSE;
- }
- int b = 0;
- int conf = TQSql::Yes;
- if ( confirmEdits() || confirmUpdate() )
- conf = confirmEdit( TQSql::Update );
- switch ( conf ) {
- case TQSql::Yes: {
-#ifndef TQT_NO_CURSOR
- TQApplication::setOverrideCursor( Qt::WaitCursor );
-#endif
- emit beforeUpdate( d->editBuffer );
- b = sqlCursor()->update();
-#ifndef TQT_NO_CURSOR
- TQApplication::restoreOverrideCursor();
-#endif
- if ( ( !b && !sqlCursor()->isActive() ) || !sqlCursor()->isActive() ) {
- handleError( sqlCursor()->lastError() );
- endUpdate();
- refresh();
- setCurrentCell( d->editRow, d->editCol );
- if ( TQTable::beginEdit( d->editRow, d->editCol, FALSE ) )
- setEditMode( Editing, d->editRow, d->editCol );
- } else {
- emit cursorChanged( TQSql::Update );
- refresh();
- endUpdate();
- }
- break;
- }
- case TQSql::No:
- endUpdate();
- setEditMode( NotEditing, -1, -1 );
- break;
- case TQSql::Cancel:
- setCurrentCell( d->editRow, d->editCol );
- if ( TQTable::beginEdit( d->editRow, d->editCol, FALSE ) )
- setEditMode( Editing, d->editRow, d->editCol );
- break;
- }
- return ( b > 0 );
-}
-
-/*!
- For an editable table, issues a delete on the current cursor's
- primary index using the values of the currently selected row. If
- there is no current cursor or there is no current selection,
- nothing happens. If confirmEdits() or confirmDelete() is TRUE,
- confirmEdit() is called to confirm the delete. Returns TRUE if the
- delete succeeded; otherwise FALSE.
-
- The underlying cursor must have a valid primary index to ensure
- that a unique record is deleted within the database otherwise the
- database may be changed to an inconsistent state.
-*/
-
-bool TQDataTable::deleteCurrent()
-{
- if ( !sqlCursor() || isReadOnly() )
- return FALSE;
- if ( sqlCursor()->primaryIndex().count() == 0 ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQDataTable::deleteCurrent: no primary index %s",
- sqlCursor()->name().latin1() );
-#endif
- return FALSE;
- }
- if ( !sqlCursor()->canDelete() )
- return FALSE;
-
- int b = 0;
- int conf = TQSql::Yes;
- if ( confirmEdits() || confirmDelete() )
- conf = confirmEdit( TQSql::Delete );
-
- // Have to have this here - the confirmEdit() might pop up a
- // dialog that causes a tqrepaint which the cursor to the
- // record it has to tqrepaint.
- if ( !sqlCursor()->seek( currentRow() ) )
- return FALSE;
- switch ( conf ) {
- case TQSql::Yes:{
-#ifndef TQT_NO_CURSOR
- TQApplication::setOverrideCursor( Qt::WaitCursor );
-#endif
- sqlCursor()->primeDelete();
- emit primeDelete( sqlCursor()->editBuffer() );
- emit beforeDelete( sqlCursor()->editBuffer() );
- b = sqlCursor()->del();
-#ifndef TQT_NO_CURSOR
- TQApplication::restoreOverrideCursor();
-#endif
- if ( !b )
- handleError( sqlCursor()->lastError() );
- refresh();
- emit cursorChanged( TQSql::Delete );
- setCurrentCell( currentRow(), currentColumn() );
- repaintContents( contentsX(), contentsY(), visibleWidth(), visibleHeight(), FALSE );
- verticalHeader()->tqrepaint(); // get rid of trailing garbage
- }
- break;
- case TQSql::No:
- setEditMode( NotEditing, -1, -1 );
- break;
- }
- return ( b > 0 );
-}
-
-/*!
- Protected virtual function which returns a confirmation for an
- edit of mode \a m. Derived classes can reimplement this function
- to provide their own confirmation dialog. The default
- implementation uses a message box which prompts the user to
- confirm the edit action.
-*/
-
-TQSql::Confirm TQDataTable::confirmEdit( TQSql::Op m )
-{
- return d->dat.confirmEdit( this, m );
-}
-
-/*!
- Protected virtual function which returns a confirmation for
- cancelling an edit mode of \a m. Derived classes can reimplement
- this function to provide their own cancel dialog. The default
- implementation uses a message box which prompts the user to
- confirm the cancel.
-*/
-
-TQSql::Confirm TQDataTable::confirmCancel( TQSql::Op m )
-{
- return d->dat.confirmCancel( this, m );
-}
-
-
-/*!
- Searches the current cursor for a cell containing the string \a
- str starting at the current cell and working forwards (or
- backwards if \a backwards is TRUE). If the string is found, the
- cell containing the string is set as the current cell. If \a
- caseSensitive is FALSE the case of \a str will be ignored.
-
- The search will wrap, i.e. if the first (or if backwards is TRUE,
- last) cell is reached without finding \a str the search will
- continue until it reaches the starting cell. If \a str is not
- found the search will fail and the current cell will remain
- unchanged.
-*/
-void TQDataTable::find( const TQString & str, bool caseSensitive, bool backwards )
-{
- if ( !sqlCursor() )
- return;
-
- TQSqlCursor * r = sqlCursor();
- TQString tmp, text;
- uint row = currentRow(), startRow = row,
- col = backwards ? currentColumn() - 1 : currentColumn() + 1;
- bool wrap = TRUE, found = FALSE;
-
- if( str.isEmpty() || str.isNull() )
- return;
-
- if( !caseSensitive )
- tmp = str.lower();
- else
- tmp = str;
-
-#ifndef TQT_NO_CURSOR
- TQApplication::setOverrideCursor( Qt::WaitCursor );
-#endif
- while( wrap ){
- while( !found && r->seek( row ) ){
- for( int i = col; backwards ? (i >= 0) : (i < (int) numCols());
- backwards ? i-- : i++ )
- {
- text = r->value( indexOf( i ) ).toString();
- if( !caseSensitive ){
- text = text.lower();
- }
- if( text.contains( tmp ) ){
- setCurrentCell( row, i );
- col = i;
- found = TRUE;
- }
- }
- if( !backwards ){
- col = 0;
- row++;
- } else {
- col = numCols() - 1;
- row--;
- }
- }
- if( !backwards ){
- if( startRow != 0 ){
- startRow = 0;
- } else {
- wrap = FALSE;
- }
- r->first();
- row = 0;
- } else {
- if( startRow != (uint) (numRows() - 1) ){
- startRow = numRows() - 1;
- } else {
- wrap = FALSE;
- }
- r->last();
- row = numRows() - 1;
- }
- }
-#ifndef TQT_NO_CURSOR
- TQApplication::restoreOverrideCursor();
-#endif
-}
-
-
-/*!
- Resets the table so that it displays no data.
-
- \sa setSqlCursor()
-*/
-
-void TQDataTable::reset()
-{
- clearCellWidget( currentRow(), currentColumn() );
- switch ( d->dat.mode() ) {
- case TQSql::Insert:
- endInsert();
- break;
- case TQSql::Update:
- endUpdate();
- break;
- default:
- break;
- }
- ensureVisible( 0, 0 );
- verticalScrollBar()->setValue(0);
- setNumRows(0);
-
- d->haveAllRows = FALSE;
- d->continuousEdit = FALSE;
- d->dat.setMode( TQSql::None );
- d->editRow = -1;
- d->editCol = -1;
- d->insertRowLast = -1;
- d->insertHeaderLabelLast = TQString::null;
- d->cancelMode = FALSE;
- d->lastAt = -1;
- d->fld.clear();
- d->fldLabel.clear();
- d->fldWidth.clear();
- d->fldIcon.clear();
- d->fldHidden.clear();
- if ( sorting() )
- horizontalHeader()->setSortIndicator( -1 );
-}
-
-/*!
- Returns the index of the field within the current SQL query that
- is displayed in column \a i.
-*/
-
-int TQDataTable::indexOf( uint i ) const
-{
- TQDataTablePrivate::ColIndex::ConstIterator it = d->colIndex.at( i );
- if ( it != d->colIndex.end() )
- return *it;
- return -1;
-}
-
-/*!
- Returns TRUE if the table will automatically delete the cursor
- specified by setSqlCursor(); otherwise returns FALSE.
-*/
-
-bool TQDataTable::autoDelete() const
-{
- return d->cur.autoDelete();
-}
-
-/*!
- Sets the cursor auto-delete flag to \a enable. If \a enable is
- TRUE, the table will automatically delete the cursor specified by
- setSqlCursor(). If \a enable is FALSE (the default), the cursor
- will not be deleted.
-*/
-
-void TQDataTable::setAutoDelete( bool enable )
-{
- d->cur.setAutoDelete( enable );
-}
-
-/*!
- \property TQDataTable::autoEdit
- \brief whether the data table automatically applies edits
-
- The default value for this property is TRUE. When the user begins
- an insert or update in the table there are two possible outcomes
- when they navigate to another record:
-
- \list 1
- \i the insert or update is is performed -- this occurs if autoEdit is TRUE
- \i the insert or update is abandoned -- this occurs if autoEdit is FALSE
- \endlist
-*/
-
-void TQDataTable::setAutoEdit( bool autoEdit )
-{
- d->dat.setAutoEdit( autoEdit );
-}
-
-bool TQDataTable::autoEdit() const
-{
- return d->dat.autoEdit();
-}
-
-/*!
- \property TQDataTable::nullText
- \brief the text used to represent NULL values
-
- The nullText property will be used to represent NULL values in the
- table. The default value is provided by the cursor's driver.
-*/
-
-void TQDataTable::setNullText( const TQString& nullText )
-{
- d->nullTxt = nullText;
- d->nullTxtChanged = TRUE;
-}
-
-TQString TQDataTable::nullText() const
-{
- return d->nullTxt;
-}
-
-/*!
- \property TQDataTable::trueText
- \brief the text used to represent true values
-
- The trueText property will be used to represent NULL values in the
- table. The default value is "True".
-*/
-
-void TQDataTable::setTrueText( const TQString& trueText )
-{
- d->trueTxt = trueText;
-}
-
-TQString TQDataTable::trueText() const
-{
- return d->trueTxt;
-}
-
-/*!
- \property TQDataTable::falseText
- \brief the text used to represent false values
-
- The falseText property will be used to represent NULL values in
- the table. The default value is "False".
-*/
-
-void TQDataTable::setFalseText( const TQString& falseText )
-{
- d->falseTxt = falseText;
-}
-
-TQString TQDataTable::falseText() const
-{
- return d->falseTxt;
-}
-
-/*!
- \property TQDataTable::dateFormat
- \brief the format used for displaying date/time values
-
- The dateFormat property is used for displaying date/time values in
- the table. The default value is \c TQt::LocalDate.
-*/
-
-void TQDataTable::setDateFormat( const Qt::DateFormat f )
-{
- d->datefmt = f;
-}
-
-Qt::DateFormat TQDataTable::dateFormat() const
-{
- return d->datefmt;
-}
-
-/*!
- \property TQDataTable::numRows
-
- \brief the number of rows in the table
-*/
-
-int TQDataTable::numRows() const
-{
- return TQTable::numRows();
-}
-
-/*!
- \reimp
-
- The number of rows in the table will be determined by the cursor
- (see setSqlCursor()), so normally this function should never be
- called. It is included for completeness.
-*/
-
-void TQDataTable::setNumRows ( int r )
-{
- TQTable::setNumRows( r );
-}
-
-/*!
- \reimp
-
- The number of columns in the table will be determined
- automatically (see addColumn()), so normally this function should
- never be called. It is included for completeness.
-*/
-
-void TQDataTable::setNumCols ( int r )
-{
- TQTable::setNumCols( r );
-}
-
-/*!
- \property TQDataTable::numCols
-
- \brief the number of columns in the table
-*/
-
-int TQDataTable::numCols() const
-{
- return TQTable::numCols();
-}
-
-/*!
- Returns the text in cell \a row, \a col, or an empty string if the
- cell is empty. If the cell's value is NULL then nullText() will be
- returned. If the cell does not exist then TQString::null is
- returned.
-*/
-
-TQString TQDataTable::text ( int row, int col ) const
-{
- if ( !sqlCursor() )
- return TQString::null;
-
- TQString s;
- if ( sqlCursor()->seek( row ) )
- s = sqlCursor()->value( indexOf( col ) ).toString();
- sqlCursor()->seek( currentRow() );
- return s;
-}
-
-/*!
- Returns the value in cell \a row, \a col, or an invalid value if
- the cell does not exist or has no value.
-*/
-
-TQVariant TQDataTable::value ( int row, int col ) const
-{
- if ( !sqlCursor() )
- return TQVariant();
-
- TQVariant v;
- if ( sqlCursor()->seek( row ) )
- v = sqlCursor()->value( indexOf( col ) );
- sqlCursor()->seek( currentRow() );
- return v;
-}
-
-/*! \internal
- Used to update the table when the size of the result set cannot be
- determined - divide the result set into pages and load the pages as
- the user moves around in the table.
-*/
-void TQDataTable::loadNextPage()
-{
- if ( d->haveAllRows )
- return;
- if ( !sqlCursor() )
- return;
- int pageSize = 0;
- int lookAhead = 0;
- if ( height() ) {
- pageSize = (int)( height() * 2 / 20 );
- lookAhead = pageSize / 2;
- }
- int startIdx = verticalScrollBar()->value() / 20;
- int endIdx = startIdx + pageSize + lookAhead;
- if ( endIdx < numRows() || endIdx < 0 )
- return;
-
- // check for empty result set
- if ( sqlCursor()->at() == TQSql::BeforeFirst && !sqlCursor()->next() ) {
- d->haveAllRows = TRUE;
- return;
- }
-
- while ( endIdx > 0 && !sqlCursor()->seek( endIdx ) )
- endIdx--;
- if ( endIdx != ( startIdx + pageSize + lookAhead ) )
- d->haveAllRows = TRUE;
- // small hack to prevent TQTable from moving the view when a row
- // is selected and the contents is resized
- SelectionMode m = selectionMode();
- clearSelection();
- setSelectionMode( NoSelection );
- setNumRows( endIdx + 1 );
- sqlCursor()->seek( currentRow() );
- setSelectionMode( m );
-}
-
-/*! \internal */
-void TQDataTable::sliderPressed()
-{
- disconnect( verticalScrollBar(), TQT_SIGNAL( valueChanged(int) ),
- this, TQT_SLOT( loadNextPage() ) );
-}
-
-/*! \internal */
-void TQDataTable::sliderReleased()
-{
- loadNextPage();
- connect( verticalScrollBar(), TQT_SIGNAL( valueChanged(int) ),
- this, TQT_SLOT( loadNextPage() ) );
-}
-
-/*!
- Sorts column \a col in ascending order if \a ascending is TRUE
- (the default); otherwise sorts in descending order.
-
- The \a wholeRows parameter is ignored; TQDataTable always sorts
- whole rows by the specified column.
-*/
-
-void TQDataTable::sortColumn ( int col, bool ascending,
- bool )
-{
- if ( sorting() ) {
- if ( isEditing() && d->dat.mode() != TQSql::None )
- endEdit( d->editRow, d->editCol, autoEdit(), FALSE );
- if ( !sqlCursor() )
- return;
- TQSqlIndex lastSort = sqlCursor()->sort();
- TQSqlIndex newSort( lastSort.cursorName(), "newSort" );
- TQSqlField *field = sqlCursor()->field( indexOf( col ) );
- if ( field )
- newSort.append( *field );
- newSort.setDescending( 0, !ascending );
- horizontalHeader()->setSortIndicator( col, ascending );
- setSort( newSort );
- refresh();
- }
-}
-
-/*! \reimp */
-void TQDataTable::columnClicked ( int col )
-{
- if ( sorting() ) {
- if ( !sqlCursor() )
- return;
- TQSqlIndex lastSort = sqlCursor()->sort();
- bool asc = TRUE;
- if ( lastSort.count() && lastSort.field( 0 )->name() == sqlCursor()->field( indexOf( col ) )->name() )
- asc = lastSort.isDescending( 0 );
- sortColumn( col, asc );
- emit currentChanged( sqlCursor() );
- }
-}
-
-/*!
- \reimp
-
- Repaints the cell at \a row, \a col.
-*/
-void TQDataTable::repaintCell( int row, int col )
-{
- TQRect cg = cellGeometry( row, col );
- TQRect re( TQPoint( cg.x() - 2, cg.y() - 2 ),
- TQSize( cg.width() + 4, cg.height() + 4 ) );
- repaintContents( re, FALSE );
-}
-
-/*!
- \reimp
-
- This function renders the cell at \a row, \a col with the value of
- the corresponding cursor field on the painter \a p. Depending on
- the table's current edit mode, paintField() is called for the
- appropriate cursor field. \a cr describes the cell coordinates in
- the content coordinate system. If \a selected is TRUE the cell has
- been selected and would normally be rendered differently than an
- unselected cell.
-
- \sa TQSql::isNull()
-*/
-
-void TQDataTable::paintCell( TQPainter * p, int row, int col, const TQRect & cr,
- bool selected, const TQColorGroup &cg )
-{
- TQTable::paintCell( p, row, col, cr, selected, cg ); // empty cell
-
- if ( !sqlCursor() )
- return;
-
- p->setPen( selected ? cg.highlightedText() : cg.text() );
- if ( d->dat.mode() != TQSql::None ) {
- if ( row == d->editRow && d->editBuffer ) {
- paintField( p, d->editBuffer->field( indexOf( col ) ), cr,
- selected );
- } else if ( row > d->editRow && d->dat.mode() == TQSql::Insert ) {
- if ( sqlCursor()->seek( row - 1 ) )
- paintField( p, sqlCursor()->field( indexOf( col ) ), cr,
- selected );
- } else {
- if ( sqlCursor()->seek( row ) )
- paintField( p, sqlCursor()->field( indexOf( col ) ), cr,
- selected );
- }
- } else {
- if ( sqlCursor()->seek( row ) )
- paintField( p, sqlCursor()->field( indexOf( col ) ), cr, selected );
-
- }
-}
-
-
-/*!
- Paints the \a field on the painter \a p. The painter has already
- been translated to the appropriate cell's origin where the \a
- field is to be rendered. \a cr describes the cell coordinates in
- the content coordinate system. The \a selected parameter is
- ignored.
-
- If you want to draw custom field content you must reimplement
- paintField() to do the custom drawing. The default implementation
- renders the \a field value as text. If the field is NULL,
- nullText() is displayed in the cell. If the field is Boolean,
- trueText() or falseText() is displayed as appropriate.
-*/
-
-void TQDataTable::paintField( TQPainter * p, const TQSqlField* field,
- const TQRect & cr, bool )
-{
- if ( !field )
- return;
- p->drawText( 2,2, cr.width()-4, cr.height()-4, fieldAlignment( field ), fieldToString( field ) );
-}
-
-/*!
- Returns the tqalignment for \a field.
-*/
-
-int TQDataTable::fieldAlignment( const TQSqlField* /*field*/ )
-{
- return TQt::AlignLeft | TQt::AlignVCenter; //## Reggie: add tqalignment to TQTable
-}
-
-
-/*!
- If the cursor's \a sql driver supports query sizes, the number of
- rows in the table is set to the size of the query. Otherwise, the
- table dynamically resizes itself as it is scrolled. If \a sql is
- not active, it is made active by issuing a select() on the cursor
- using the \a sql cursor's current filter and current sort.
-*/
-
-void TQDataTable::setSize( TQSqlCursor* sql )
-{
- // ### what are the connect/disconnect calls doing here!? move to refresh()
- if ( sql->driver() && sql->driver()->hasFeature( TQSqlDriver::QuerySize ) ) {
- setVScrollBarMode( Auto );
- disconnect( verticalScrollBar(), TQT_SIGNAL( sliderPressed() ),
- this, TQT_SLOT( sliderPressed() ) );
- disconnect( verticalScrollBar(), TQT_SIGNAL( sliderReleased() ),
- this, TQT_SLOT( sliderReleased() ) );
- disconnect( verticalScrollBar(), TQT_SIGNAL( valueChanged(int) ),
- this, TQT_SLOT( loadNextPage() ) );
- if ( numRows() != sql->size() )
- setNumRows( sql->size() );
- } else {
- setVScrollBarMode( AlwaysOn );
- connect( verticalScrollBar(), TQT_SIGNAL( sliderPressed() ),
- this, TQT_SLOT( sliderPressed() ) );
- connect( verticalScrollBar(), TQT_SIGNAL( sliderReleased() ),
- this, TQT_SLOT( sliderReleased() ) );
- connect( verticalScrollBar(), TQT_SIGNAL( valueChanged(int) ),
- this, TQT_SLOT( loadNextPage() ) );
- setNumRows(0);
- loadNextPage();
- }
-}
-
-/*!
- Sets \a cursor as the data source for the table. To force the
- display of the data from \a cursor, use refresh(). If \a
- autoPopulate is TRUE, columns are automatically created based upon
- the fields in the \a cursor record. If \a autoDelete is TRUE (the
- default is FALSE), the table will take ownership of the \a cursor
- and delete it when appropriate. If the \a cursor is read-only, the
- table becomes read-only. The table adopts the cursor's driver's
- definition for representing NULL values as strings.
-
- \sa refresh() setReadOnly() setAutoDelete() TQSqlDriver::nullText()
-*/
-
-void TQDataTable::setSqlCursor( TQSqlCursor* cursor, bool autoPopulate, bool autoDelete )
-{
- setUpdatesEnabled( FALSE );
- d->cur.setCursor( 0 );
- if ( cursor ) {
- d->cur.setCursor( cursor, autoDelete );
- if ( autoPopulate ) {
- d->fld.clear();
- d->fldLabel.clear();
- d->fldWidth.clear();
- d->fldIcon.clear();
- d->fldHidden.clear();
- for ( uint i = 0; i < sqlCursor()->count(); ++i ) {
- addColumn( sqlCursor()->field( i )->name(), sqlCursor()->field( i )->name() );
- setColumnReadOnly( i, sqlCursor()->field( i )->isReadOnly() );
- }
- }
- setReadOnly( sqlCursor()->isReadOnly() );
- if ( sqlCursor()->driver() && !d->nullTxtChanged )
- setNullText(sqlCursor()->driver()->nullText() );
- setAutoDelete( autoDelete );
- } else {
- setNumRows( 0 );
- setNumCols( 0 );
- }
- setUpdatesEnabled( TRUE );
-}
-
-
-/*!
- Protected virtual function which is called when an error \a e has
- occurred on the current cursor(). The default implementation
- displays a warning message to the user with information about the
- error.
-*/
-void TQDataTable::handleError( const TQSqlError& e )
-{
- d->dat.handleError( this, e );
-}
-
-/*! \reimp
- */
-
-void TQDataTable::keyPressEvent( TQKeyEvent* e )
-{
- switch( e->key() ) {
- case Qt::Key_Left:
- case Qt::Key_Right:
- case Qt::Key_Up:
- case Qt::Key_Down:
- case TQt::Key_Prior:
- case TQt::Key_Next:
- case Qt::Key_Home:
- case Qt::Key_End:
- case Qt::Key_F2:
- case Qt::Key_Enter: case Qt::Key_Return:
- case Qt::Key_Tab: case TQt::Key_BackTab:
- TQTable::keyPressEvent( e );
- default:
- return;
- }
-}
-
-/*! \reimp
-*/
-
-void TQDataTable::resizeData ( int )
-{
-
-}
-
-/*! \reimp
-*/
-
-TQTableItem * TQDataTable::item ( int, int ) const
-{
- return 0;
-}
-
-/*! \reimp
-*/
-
-void TQDataTable::setItem ( int , int , TQTableItem * )
-{
-
-}
-
-/*! \reimp
-*/
-
-void TQDataTable::clearCell ( int , int )
-{
-
-}
-
-/*! \reimp
-*/
-
-void TQDataTable::setPixmap ( int , int , const TQPixmap & )
-{
-
-}
-
-/*! \reimp */
-void TQDataTable::takeItem ( TQTableItem * )
-{
-
-}
-
-/*!
- Installs a new SQL editor factory \a f. This enables the user to
- create and instantiate their own editors for use in cell editing.
- Note that TQDataTable takes ownership of this pointer, and will
- delete it when it is no longer needed or when
- installEditorFactory() is called again.
-
- \sa TQSqlEditorFactory
-*/
-
-void TQDataTable::installEditorFactory( TQSqlEditorFactory * f )
-{
- if( f ) {
- delete d->editorFactory;
- d->editorFactory = f;
- }
-}
-
-/*!
- Installs a new property map \a m. This enables the user to create
- and instantiate their own property maps for use in cell editing.
- Note that TQDataTable takes ownership of this pointer, and will
- delete it when it is no longer needed or when installPropertMap()
- is called again.
-
- \sa TQSqlPropertyMap
-*/
-
-void TQDataTable::installPropertyMap( TQSqlPropertyMap* m )
-{
- if ( m ) {
- delete d->propertyMap;
- d->propertyMap = m;
- }
-}
-
-/*! \internal
-
- Sets the current selection to \a row, \a col.
-*/
-
-void TQDataTable::setCurrentSelection( int row, int )
-{
- if ( !sqlCursor() )
- return;
- if ( row == d->lastAt )
- return;
- if ( !sqlCursor()->seek( row ) )
- return;
- d->lastAt = row;
- emit currentChanged( sqlCursor() );
-}
-
-void TQDataTable::updateCurrentSelection()
-{
- setCurrentSelection( currentRow(), -1 );
-}
-
-/*!
- Returns the currently selected record, or 0 if there is no current
- selection. The table owns the pointer, so do \e not delete it or
- otherwise modify it or the cursor it points to.
-*/
-
-TQSqlRecord* TQDataTable::currentRecord() const
-{
- if ( !sqlCursor() || currentRow() < 0 )
- return 0;
- if ( !sqlCursor()->seek( currentRow() ) )
- return 0;
- return sqlCursor();
-}
-
-/*!
- Sorts column \a col in ascending order.
-
- \sa setSorting()
-*/
-
-void TQDataTable::sortAscending( int col )
-{
- sortColumn( col, TRUE );
-}
-
-/*!
- Sorts column \a col in descending order.
-
- \sa setSorting()
-*/
-
-void TQDataTable::sortDescending( int col )
-{
- sortColumn( col, FALSE );
-}
-
-/*!
- \overload void TQDataTable::refresh( Refresh mode )
-
- Refreshes the table. If there is no currently defined cursor (see
- setSqlCursor()), nothing happens. The \a mode parameter determines
- which type of refresh will take place.
-
- \sa Refresh setSqlCursor() addColumn()
-*/
-
-void TQDataTable::refresh( TQDataTable::Refresh mode )
-{
- TQSqlCursor* cur = sqlCursor();
- if ( !cur )
- return;
- bool refreshData = ( (mode & RefreshData) == RefreshData );
- bool refreshCol = ( (mode & RefreshColumns) == RefreshColumns );
- if ( ( (mode & RefreshAll) == RefreshAll ) ) {
- refreshData = TRUE;
- refreshCol = TRUE;
- }
- if ( !refreshCol && d->fld.count() && numCols() == 0 )
- refreshCol = TRUE;
- viewport()->setUpdatesEnabled( FALSE );
- d->haveAllRows = FALSE;
- if ( refreshData ) {
- if ( !d->cur.refresh() && d->cur.cursor() ) {
- handleError( d->cur.cursor()->lastError() );
- }
- d->lastAt = -1;
- }
- if ( refreshCol ) {
- setNumCols( 0 );
- d->colIndex.clear();
- if ( d->fld.count() ) {
- TQSqlField* field = 0;
- int i;
- int fpos = -1;
- for ( i = 0; i < (int)d->fld.count(); ++i ) {
- if ( cur->field( i ) && cur->field( i )->name() == d->fld[ i ] )
- // if there is a field with the desired name on the desired position
- // then we take that
- fpos = i;
- else
- // otherwise we take the first field that matches the desired name
- fpos = cur->position( d->fld[ i ] );
- field = cur->field( fpos );
- if ( field && ( cur->isGenerated( fpos ) ||
- cur->isCalculated( field->name() ) ) )
- {
- setNumCols( numCols() + 1 );
- d->colIndex.append( fpos );
- setColumnReadOnly( numCols()-1, field->isReadOnly() || isColumnReadOnly( numCols()-1 ) );
- horizontalHeader()->setLabel( numCols()-1, d->fldIcon[ i ], d->fldLabel[ i ] );
- if ( d->fldHidden[ i ] ) {
- TQTable::showColumn( i ); // ugly but necessary
- TQTable::hideColumn( i );
- } else {
- TQTable::showColumn( i );
- }
- if ( d->fldWidth[ i ] > -1 )
- TQTable::setColumnWidth( i, d->fldWidth[i] );
- }
- }
- }
- }
- viewport()->setUpdatesEnabled( TRUE );
- viewport()->tqrepaint( FALSE );
- horizontalHeader()->tqrepaint();
- verticalHeader()->tqrepaint();
- setSize( cur );
- // keep others aware
- if ( d->lastAt == -1 )
- setCurrentSelection( -1, -1 );
- else if ( d->lastAt != currentRow() )
- setCurrentSelection( currentRow(), currentColumn() );
- if ( cur->isValid() )
- emit currentChanged( sqlCursor() );
-}
-
-/*!
- Refreshes the table. The cursor is refreshed using the current
- filter, the current sort, and the currently defined columns.
- Equivalent to calling refresh( TQDataTable::RefreshData ).
-*/
-
-void TQDataTable::refresh()
-{
- refresh( RefreshData );
-}
-
-/*!
- \reimp
-
- Selects the record in the table using the current cursor edit
- buffer and the fields specified by the index \a idx. If \a atHint
- is specified, it will be used as a hint about where to begin
- searching.
-*/
-
-bool TQDataTable::findBuffer( const TQSqlIndex& idx, int atHint )
-{
- TQSqlCursor* cur = sqlCursor();
- if ( !cur )
- return FALSE;
- bool found = d->cur.findBuffer( idx, atHint );
- if ( found )
- setCurrentCell( cur->at(), currentColumn() );
- return found;
-}
-
-/*! \internal
- Returns the string representation of a database field.
-*/
-TQString TQDataTable::fieldToString( const TQSqlField * field )
-{
- TQString text;
- if ( field->isNull() ) {
- text = nullText();
- } else {
- TQVariant val = field->value();
- switch ( val.type() ) {
- case TQVariant::Bool:
- text = val.toBool() ? d->trueTxt : d->falseTxt;
- break;
- case TQVariant::Date:
- text = val.toDate().toString( (Qt::DateFormat)d->datefmt );
- break;
- case TQVariant::Time:
- text = val.toTime().toString( (Qt::DateFormat)d->datefmt );
- break;
- case TQVariant::DateTime:
- text = val.toDateTime().toString( (Qt::DateFormat)d->datefmt );
- break;
- default:
- text = val.toString();
- break;
- }
- }
- return text;
-}
-
-/*!
- \reimp
-*/
-
-void TQDataTable::swapColumns( int col1, int col2, bool )
-{
- TQString fld = d->fld[ col1 ];
- TQString fldLabel = d->fldLabel[ col1 ];
- TQIconSet fldIcon = d->fldIcon[ col1 ];
- int fldWidth = d->fldWidth[ col1 ];
-
- d->fld[ col1 ] = d->fld[ col2 ];
- d->fldLabel[ col1 ] = d->fldLabel[ col2 ];
- d->fldIcon[ col1 ] = d->fldIcon[ col2 ];
- d->fldWidth[ col1 ] = d->fldWidth[ col2 ];
-
- d->fld[ col2 ] = fld;
- d->fldLabel[ col2 ] = fldLabel;
- d->fldIcon[ col2 ] = fldIcon;
- d->fldWidth[ col2 ] = fldWidth;
-
- int colIndex = d->colIndex[ col1 ];
- d->colIndex[ col1 ] = d->colIndex[ col2 ];
- d->colIndex[ col2 ] = colIndex;
-}
-
-/*!
- \reimp
-*/
-
-void TQDataTable::drawContents( TQPainter * p, int cx, int cy, int cw, int ch )
-{
- TQTable::drawContents( p, cx, cy, cw, ch );
- if ( sqlCursor() && currentRow() >= 0 )
- sqlCursor()->seek( currentRow() );
-}
-
-/*!
- \reimp
-*/
-
-void TQDataTable::hideColumn( int col )
-{
- d->fldHidden[col] = TRUE;
- refresh( RefreshColumns );
-}
-
-/*!
- \reimp
-*/
-
-void TQDataTable::showColumn( int col )
-{
- d->fldHidden[col] = FALSE;
- refresh( RefreshColumns );
-}
-
-/*!
- \fn void TQDataTable::currentChanged( TQSqlRecord* record )
-
- This signal is emitted whenever a new row is selected in the
- table. The \a record parameter points to the contents of the newly
- selected record.
-*/
-
-/*!
- \fn void TQDataTable::primeInsert( TQSqlRecord* buf )
-
- This signal is emitted after the cursor is primed for insert by
- the table, when an insert action is beginning on the table. The \a
- buf parameter points to the edit buffer being inserted. Connect to
- this signal in order to, for example, prime the record buffer with
- default data values.
-*/
-
-/*!
- \fn void TQDataTable::primeUpdate( TQSqlRecord* buf )
-
- This signal is emitted after the cursor is primed for update by
- the table, when an update action is beginning on the table. The \a
- buf parameter points to the edit buffer being updated. Connect to
- this signal in order to, for example, provide some visual feedback
- that the user is in 'edit mode'.
-*/
-
-/*!
- \fn void TQDataTable::primeDelete( TQSqlRecord* buf )
-
- This signal is emitted after the cursor is primed for delete by
- the table, when a delete action is beginning on the table. The \a
- buf parameter points to the edit buffer being deleted. Connect to
- this signal in order to, for example, record auditing information
- on deletions.
-*/
-
-/*!
- \fn void TQDataTable::beforeInsert( TQSqlRecord* buf )
-
- This signal is emitted just before the cursor's edit buffer is
- inserted into the database. The \a buf parameter points to the
- edit buffer being inserted. Connect to this signal to, for
- example, populate a key field with a unique sequence number.
-*/
-
-/*!
- \fn void TQDataTable::beforeUpdate( TQSqlRecord* buf )
-
- This signal is emitted just before the cursor's edit buffer is
- updated in the database. The \a buf parameter points to the edit
- buffer being updated. Connect to this signal when you want to
- transform the user's data behind-the-scenes.
-*/
-
-/*!
- \fn void TQDataTable::beforeDelete( TQSqlRecord* buf )
-
- This signal is emitted just before the currently selected record
- is deleted from the database. The \a buf parameter points to the
- edit buffer being deleted. Connect to this signal to, for example,
- copy some of the fields for later use.
-*/
-
-/*!
- \fn void TQDataTable::cursorChanged( TQSql::Op mode )
-
- This signal is emitted whenever the cursor record was changed due
- to an edit. The \a mode parameter is the type of edit that just
- took place.
-*/
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqdatatable.h b/tqtinterface/qt4/src/sql/tqdatatable.h
deleted file mode 100644
index 37f5864..0000000
--- a/tqtinterface/qt4/src/sql/tqdatatable.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQDataTable class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQDATATABLE_H
-#define TQDATATABLE_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#include "tqvariant.h"
-#include "tqtable.h"
-#include "tqsql.h"
-#include "tqsqlcursor.h"
-#include "tqsqlindex.h"
-#include "tqsqleditorfactory.h"
-#include "tqiconset.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_STQL_VIEW_WIDGETS
-
-class TQPainter;
-class TQSqlField;
-class TQSqlPropertyMap;
-class TQDataTablePrivate;
-
-class TQM_EXPORT_SQL TQDataTable : public TQTable
-{
- Q_OBJECT
- TQ_OBJECT
-
- Q_PROPERTY( TQString nullText READ nullText WRITE setNullText )
- Q_PROPERTY( TQString trueText READ trueText WRITE setTrueText )
- Q_PROPERTY( TQString falseText READ falseText WRITE setFalseText )
-// Q_PROPERTY( DateFormat dateFormat READ dateFormat WRITE setDateFormat )
- Q_PROPERTY( bool confirmEdits READ confirmEdits WRITE setConfirmEdits )
- Q_PROPERTY( bool confirmInsert READ confirmInsert WRITE setConfirmInsert )
- Q_PROPERTY( bool confirmUpdate READ confirmUpdate WRITE setConfirmUpdate )
- Q_PROPERTY( bool confirmDelete READ confirmDelete WRITE setConfirmDelete )
- Q_PROPERTY( bool confirmCancels READ confirmCancels WRITE setConfirmCancels )
- Q_PROPERTY( bool autoEdit READ autoEdit WRITE setAutoEdit )
- Q_PROPERTY( TQString filter READ filter WRITE setFilter )
- Q_PROPERTY( TQStringList sort READ sort WRITE setSort )
- Q_PROPERTY( int numCols READ numCols )
- Q_PROPERTY( int numRows READ numRows )
-
-public:
- TQDataTable ( TQWidget* parent=0, const char* name=0 );
- TQDataTable ( TQSqlCursor* cursor, bool autoPopulate = FALSE, TQWidget* parent=0, const char* name=0 );
- ~TQDataTable();
-
- virtual void addColumn( const TQString& fieldName,
- const TQString& label = TQString::null,
- int width = -1,
- const TQIconSet& iconset = TQIconSet() );
- virtual void removeColumn( uint col );
- virtual void setColumn( uint col, const TQString& fieldName,
- const TQString& label = TQString::null,
- int width = -1,
- const TQIconSet& iconset = TQIconSet() );
-
- TQString nullText() const;
- TQString trueText() const;
- TQString falseText() const;
- Qt::DateFormat dateFormat() const;
- bool confirmEdits() const;
- bool confirmInsert() const;
- bool confirmUpdate() const;
- bool confirmDelete() const;
- bool confirmCancels() const;
- bool autoDelete() const;
- bool autoEdit() const;
- TQString filter() const;
- TQStringList sort() const;
-
- virtual void setSqlCursor( TQSqlCursor* cursor = 0,
- bool autoPopulate = FALSE, bool autoDelete = FALSE );
- TQSqlCursor* sqlCursor() const;
-
- virtual void setNullText( const TQString& nullText );
- virtual void setTrueText( const TQString& trueText );
- virtual void setFalseText( const TQString& falseText );
- virtual void setDateFormat( const Qt::DateFormat f );
- virtual void setConfirmEdits( bool confirm );
- virtual void setConfirmInsert( bool confirm );
- virtual void setConfirmUpdate( bool confirm );
- virtual void setConfirmDelete( bool confirm );
- virtual void setConfirmCancels( bool confirm );
- virtual void setAutoDelete( bool enable );
- virtual void setAutoEdit( bool autoEdit );
- virtual void setFilter( const TQString& filter );
- virtual void setSort( const TQStringList& sort );
- virtual void setSort( const TQSqlIndex& sort );
-
- enum Refresh {
- RefreshData = 1,
- RefreshColumns = 2,
- RefreshAll = 3
- };
- void refresh( Refresh mode );
- void sortColumn ( int col, bool ascending = TRUE,
- bool wholeRows = FALSE );
- TQString text ( int row, int col ) const;
- TQVariant value ( int row, int col ) const;
- TQSqlRecord* currentRecord() const;
-
- void installEditorFactory( TQSqlEditorFactory * f );
- void installPropertyMap( TQSqlPropertyMap* m );
-
- int numCols() const;
- int numRows() const;
- void setNumCols( int c );
- void setNumRows ( int r );
- bool findBuffer( const TQSqlIndex& idx, int atHint = 0 );
-
- void hideColumn( int col );
- void showColumn( int col );
-Q_SIGNALS:
- void currentChanged( TQSqlRecord* record );
- void primeInsert( TQSqlRecord* buf );
- void primeUpdate( TQSqlRecord* buf );
- void primeDelete( TQSqlRecord* buf );
- void beforeInsert( TQSqlRecord* buf );
- void beforeUpdate( TQSqlRecord* buf );
- void beforeDelete( TQSqlRecord* buf );
- void cursorChanged( TQSql::Op mode );
-
-public Q_SLOTS:
- virtual void find( const TQString & str, bool caseSensitive,
- bool backwards );
- virtual void sortAscending( int col );
- virtual void sortDescending( int col );
- virtual void refresh();
- void setColumnWidth( int col, int w );
- void adjustColumn( int col );
- void setColumnStretchable( int col, bool stretch );
- void swapColumns( int col1, int col2, bool swapHeaders = FALSE );
-
-protected:
- virtual bool insertCurrent();
- virtual bool updateCurrent();
- virtual bool deleteCurrent();
-
- virtual TQSql::Confirm confirmEdit( TQSql::Op m );
- virtual TQSql::Confirm confirmCancel( TQSql::Op m );
-
- virtual void handleError( const TQSqlError& e );
-
- virtual bool beginInsert();
- virtual TQWidget* beginUpdate ( int row, int col, bool replace );
-
- bool eventFilter( TQObject *o, TQEvent *e );
- void keyPressEvent( TQKeyEvent* );
- void resizeEvent ( TQResizeEvent * );
- void contentsMousePressEvent( TQMouseEvent* e );
- void contentsContextMenuEvent( TQContextMenuEvent* e );
- void endEdit( int row, int col, bool accept, bool replace );
- TQWidget * createEditor( int row, int col, bool initFromCell ) const;
- void activateNextCell();
- int indexOf( uint i ) const; // ### make this public in 4.0
- void reset();
- void setSize( TQSqlCursor* sql );
- void repaintCell( int row, int col );
- void paintCell ( TQPainter * p, int row, int col, const TQRect & cr,
- bool selected, const TQColorGroup &cg );
- virtual void paintField( TQPainter * p, const TQSqlField* field, const TQRect & cr,
- bool selected );
- void drawContents( TQPainter * p, int cx, int cy, int cw, int ch );
- virtual int fieldAlignment( const TQSqlField* field );
- void columnClicked ( int col );
- void resizeData ( int len );
-
- TQTableItem * item ( int row, int col ) const;
- void setItem ( int row, int col, TQTableItem * item );
- void clearCell ( int row, int col ) ;
- void setPixmap ( int row, int col, const TQPixmap & pix );
- void takeItem ( TQTableItem * i );
-
-private Q_SLOTS:
- void loadNextPage();
- void setCurrentSelection( int row, int col );
- void updateCurrentSelection();
- void sliderPressed();
- void sliderReleased();
- void doInsertCurrent();
- void doUpdateCurrent();
-
-private:
- TQString fieldToString( const TQSqlField * field );
- void init();
- TQWidget* beginEdit ( int row, int col, bool replace );
- void updateRow( int row );
- void endInsert();
- void endUpdate();
- TQDataTablePrivate* d;
-
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQDataTable( const TQDataTable & );
- TQDataTable &operator=( const TQDataTable & );
-#endif
-};
-
-#endif
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqdataview.cpp b/tqtinterface/qt4/src/sql/tqdataview.cpp
deleted file mode 100644
index e4a22a8..0000000
--- a/tqtinterface/qt4/src/sql/tqdataview.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQDataView class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqdataview.h"
-
-#ifndef TQT_NO_STQL_VIEW_WIDGETS
-
-#include "tqsqlmanager_p.h"
-
-class TQDataViewPrivate
-{
-public:
- TQDataViewPrivate() {}
- TQSqlFormManager frm;
-};
-
-
-/*!
- \class TQDataView tqdataview.h
- \brief The TQDataView class provides read-only SQL forms.
-
- \ingroup database
- \mainclass
- \module sql
-
- This class provides a form which displays SQL field data from a
- record buffer. Because TQDataView does not support editing it uses
- less resources than a TQDataBrowser. This class is well suited for
- displaying read-only data from a SQL database.
-
- If you want a to present your data in an editable form use
- TQDataBrowser; if you want a table-based presentation of your data
- use TQDataTable.
-
- The form is associated with the data view with setForm() and the
- record is associated with setRecord(). You can also pass a
- TQSqlRecord to the refresh() function which will set the record to
- the given record and read the record's fields into the form.
-*/
-
-/*!
- Constructs a data view which is a child of \a parent, called \a
- name, and with widget flags \a fl.
-*/
-
-TQDataView::TQDataView( TQWidget *parent, const char *name, WFlags fl )
- : TQWidget( parent, name, fl )
-{
- d = new TQDataViewPrivate();
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQDataView::~TQDataView()
-{
- delete d;
-}
-
-/*!
- Clears the default form's values. If there is no default form,
- nothing happens. All the values are set to their 'zero state',
- e.g. 0 for numeric fields, "" for string fields.
-*/
-
-void TQDataView::clearValues()
-{
- d->frm.clearValues();
-}
-
-/*!
- Sets the form used by the data view to \a form. If a record has
- already been assigned to the data view, the form will display that
- record's data.
-
- \sa form()
-*/
-
-void TQDataView::setForm( TQSqlForm* form )
-{
- d->frm.setForm( form );
-}
-
-
-/*!
- Returns the default form used by the data view, or 0 if there is
- none.
-
- \sa setForm()
-*/
-
-TQSqlForm* TQDataView::form()
-{
- return d->frm.form();
-}
-
-
-/*!
- Sets the record used by the data view to \a record. If a form has
- already been assigned to the data view, the form will display the
- data from \a record in that form.
-
- \sa record()
-*/
-
-void TQDataView::setRecord( TQSqlRecord* record )
-{
- d->frm.setRecord( record );
-}
-
-
-/*!
- Returns the default record used by the data view, or 0 if there is
- none.
-
- \sa setRecord()
-*/
-
-TQSqlRecord* TQDataView::record()
-{
- return d->frm.record();
-}
-
-
-/*!
- Causes the default form to read its fields from the record buffer.
- If there is no default form, or no record, nothing happens.
-
- \sa setForm()
-*/
-
-void TQDataView::readFields()
-{
- d->frm.readFields();
-}
-
-/*!
- Causes the default form to write its fields to the record buffer.
- If there is no default form, or no record, nothing happens.
-
- \sa setForm()
-*/
-
-void TQDataView::writeFields()
-{
- d->frm.writeFields();
-}
-
-/*!
- Causes the default form to display the contents of \a buf. If
- there is no default form, nothing happens.The \a buf also becomes
- the default record for all subsequent calls to readFields() and
- writefields(). This slot is equivalant to calling:
-
- \code
- myView.setRecord( record );
- myView.readFields();
- \endcode
-
- \sa setRecord() readFields()
-*/
-
-void TQDataView::refresh( TQSqlRecord* buf )
-{
- if ( buf && buf != record() )
- setRecord( buf );
- readFields();
-}
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqdataview.h b/tqtinterface/qt4/src/sql/tqdataview.h
deleted file mode 100644
index 77c6344..0000000
--- a/tqtinterface/qt4/src/sql/tqdataview.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQDataView class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQDATAVIEW_H
-#define TQDATAVIEW_H
-
-#ifndef TQT_H
-#include "tqwidget.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_STQL_VIEW_WIDGETS
-
-class TQSqlForm;
-class TQSqlRecord;
-class TQDataViewPrivate;
-
-class TQM_EXPORT_SQL TQDataView : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- TQDataView( TQWidget* parent=0, const char* name=0, WFlags fl = 0 );
- ~TQDataView();
-
- virtual void setForm( TQSqlForm* form );
- TQSqlForm* form();
- virtual void setRecord( TQSqlRecord* record );
- TQSqlRecord* record();
-
-public Q_SLOTS:
- virtual void refresh( TQSqlRecord* buf );
- virtual void readFields();
- virtual void writeFields();
- virtual void clearValues();
-
-private:
- TQDataViewPrivate* d;
-
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQDataView( const TQDataView & );
- TQDataView &operator=( const TQDataView & );
-#endif
-};
-
-
-#endif
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqeditorfactory.cpp b/tqtinterface/qt4/src/sql/tqeditorfactory.cpp
deleted file mode 100644
index 7c6e962..0000000
--- a/tqtinterface/qt4/src/sql/tqeditorfactory.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQEditorFactory class
-**
-** Created : 2000-11-17
-**
-** Copyright (C) 2005-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 "tqcleanuphandler.h"
-#include "tqlabel.h"
-#include "tqlineedit.h"
-#include "tqspinbox.h"
-#include "tqcombobox.h"
-
-#include "tqeditorfactory.h"
-#include "tqdatetimeedit.h"
-
-#ifndef TQT_NO_STQL_EDIT_WIDGETS
-
-/*!
- \class TQEditorFactory tqeditorfactory.h
- \brief The TQEditorFactory class is used to create editor widgets
- for TQVariant data types.
-
- \ingroup database
- \module sql
-
- Each editor factory provides the createEditor() function which
- given a TQVariant will create and return a TQWidget that can edit
- that TQVariant. For example if you have a TQVariant::String type, a
- TQLineEdit would be the default editor returned, whereas a
- TQVariant::Int's default editor would be a TQSpinBox.
-
- If you want to create different editors for fields with the same
- data type, subclass TQEditorFactory and reimplement the
- createEditor() function.
-*/
-
-/*!
- Constructs an editor factory with parent \a parent, called \a name.
-*/
-
-TQEditorFactory::TQEditorFactory ( TQObject * parent, const char * name )
- : TQObject( parent, name )
-{
-
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQEditorFactory::~TQEditorFactory()
-{
-
-}
-
-static TQEditorFactory * defaultfactory = 0;
-static TQCleanupHandler< TQEditorFactory > q_cleanup_editor_factory;
-
-/*!
- Returns an instance of a default editor factory.
-*/
-
-TQEditorFactory * TQEditorFactory::defaultFactory()
-{
- if( defaultfactory == 0 ){
- defaultfactory = new TQEditorFactory();
- q_cleanup_editor_factory.add( &defaultfactory );
- }
-
- return defaultfactory;
-}
-
-/*!
- Replaces the default editor factory with \a factory.
- \e{TQEditorFactory takes ownership of factory, and destroys it
- when it is no longer needed.}
-*/
-
-void TQEditorFactory::installDefaultFactory( TQEditorFactory * factory )
-{
- if( factory == 0 || factory == defaultfactory ) return;
-
- if( defaultfactory != 0 ){
- q_cleanup_editor_factory.remove( &defaultfactory );
- delete defaultfactory;
- }
- defaultfactory = factory;
- q_cleanup_editor_factory.add( &defaultfactory );
-}
-
-/*!
- Creates and returns the appropriate editor for the TQVariant \a v.
- If the TQVariant is invalid, 0 is returned. The \a parent is passed
- to the appropriate editor's constructor.
-*/
-
-TQWidget * TQEditorFactory::createEditor( TQWidget * parent, const TQVariant & v )
-{
- TQWidget * w = 0;
- switch( v.type() ){
- case TQVariant::Invalid:
- w = 0;
- break;
- case TQVariant::Bool:
- w = new TQComboBox( parent, "qt_editor_bool" );
- ((TQComboBox *) w)->insertItem( "False" );
- ((TQComboBox *) w)->insertItem( "True" );
- break;
- case TQVariant::UInt:
- w = new TQSpinBox( 0, 999999, 1, parent, "qt_editor_spinbox" );
- break;
- case TQVariant::Int:
- w = new TQSpinBox( -999999, 999999, 1, parent, "qt_editor_int" );
- break;
- case TQVariant::String:
- case TQVariant::CString:
- case TQVariant::Double:
- w = new TQLineEdit( parent, "qt_editor_double" );
- ((TQLineEdit*)w)->setFrame( FALSE );
- break;
- case TQVariant::Date:
- w = new TQDateEdit( parent, "qt_editor_date" );
- break;
- case TQVariant::Time:
- w = new TQTimeEdit( parent, "qt_editor_time" );
- break;
- case TQVariant::DateTime:
- w = new TQDateTimeEdit( parent, "qt_editor_datetime" );
- break;
-#ifndef TQT_NO_LABEL
- case TQVariant::Pixmap:
- w = new TQLabel( parent, "qt_editor_pixmap" );
- break;
-#endif
- case TQVariant::Palette:
- case TQVariant::ColorGroup:
- case TQVariant::Color:
- case TQVariant::Font:
- case TQVariant::Brush:
- case TQVariant::Bitmap:
- case TQVariant::Cursor:
- case TQVariant::Map:
- case TQVariant::StringList:
- case TQVariant::Rect:
- case TQVariant::Size:
- case TQVariant::IconSet:
- case TQVariant::Point:
- case TQVariant::PointArray:
- case TQVariant::Region:
- case TQVariant::SizePolicy:
- case TQVariant::ByteArray:
- default:
- w = new TQWidget( parent, "qt_editor_default" );
- break;
- }
- return w;
-}
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqeditorfactory.h b/tqtinterface/qt4/src/sql/tqeditorfactory.h
deleted file mode 100644
index 12c123f..0000000
--- a/tqtinterface/qt4/src/sql/tqeditorfactory.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQEditorFactory class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQEDITORFACTORY_H
-#define TQEDITORFACTORY_H
-
-#ifndef TQT_H
-#include "tqobject.h"
-#include "tqvariant.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_STQL_EDIT_WIDGETS
-
-class TQM_EXPORT_SQL TQEditorFactory : public TQObject
-{
-public:
- TQEditorFactory ( TQObject * parent = 0, const char * name = 0 );
- ~TQEditorFactory();
-
- virtual TQWidget * createEditor( TQWidget * parent, const TQVariant & v );
-
- static TQEditorFactory * defaultFactory();
- static void installDefaultFactory( TQEditorFactory * factory);
-
-private:
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQEditorFactory( const TQEditorFactory & );
- TQEditorFactory &operator=( const TQEditorFactory & );
-#endif
-};
-
-#endif // TQT_NO_SQL
-#endif // TQEDITORFACTORY_H
diff --git a/tqtinterface/qt4/src/sql/tqsql.cpp b/tqtinterface/qt4/src/sql/tqsql.cpp
deleted file mode 100644
index ab497c6..0000000
--- a/tqtinterface/qt4/src/sql/tqsql.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSql 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.
-**
-**********************************************************************/
-
-
-/*!
- \class TQSql tqsql.h
- \brief The TQSql class is a namespace for TQt SQL identifiers that
- need to be global-like.
-
- \ingroup database
- \mainclass
- \module sql
-
- Normally, you can ignore this class. Several TQt SQL classes
- inherit it, so all the identifiers in the TQt SQL namespace are
- visible without qualification.
-*/
-
-/*!
- \enum TQSql::Confirm
-
- This enum type describes edit confirmations.
-
- \value Yes
- \value No
- \value Cancel
-*/
-
-/*!
- \enum TQSql::Op
-
- This enum type describes edit operations.
-
- \value None
- \value Insert
- \value Update
- \value Delete
-*/
-
-
-/*!
- \enum TQSql::Location
-
- This enum type describes SQL navigation locations.
-
- \value BeforeFirst
- \value AfterLast
-*/
-
-/*!
- \enum TQSql::ParameterType
-
- This enum is used to set the type of a bind parameter
-
- \value In the bind parameter is used to put data into the database
- \value Out the bind parameter is used to receive data from the database
- \value InOut the bind parameter is used to put data into the
- database; it will be overwritten with output data on executing
- a query.
-*/
-
-/*!
- \enum TQSql::TableType
-
- This enum type describes types of tables
-
- \value Tables All the tables visible to the user
- \value SystemTables Internal tables used by the DBMS
- \value Views All the views visible to the user
- \value AllTables All of the above
-*/
-
-/*!
- \fn TQSql::TQSql()
-
- Constructs a TQt SQL namespace class
-*/
diff --git a/tqtinterface/qt4/src/sql/tqsql.h b/tqtinterface/qt4/src/sql/tqsql.h
deleted file mode 100644
index ffb7d99..0000000
--- a/tqtinterface/qt4/src/sql/tqsql.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSql class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQL_H
-#define TQSQL_H
-
-#ifndef TQT_H
-#include "tqglobal.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQM_EXPORT_SQL TQSql
-{
-public:
- TQSql() {}
- enum Op {
- None = -1,
- Insert = 0,
- Update = 1,
- Delete = 2
- };
-
- enum Location {
- BeforeFirst = -1,
- AfterLast = -2
- };
-
- enum Confirm {
- Cancel = -1,
- No = 0,
- Yes = 1
- };
-
- enum ParameterType {
- In = 1,
- Out = 2,
- InOut = 3 //InOut = In | Out
- };
-
- enum TableType {
- Tables = 0x01,
- SystemTables = 0x02,
- Views = 0x04,
- AllTables = 0xff
- };
-
-private: // Disabled copy constructor and operator=
-#if defined(TQ_DISABLE_COPY)
- TQSql( const TQSql & );
- TQSql &operator=( const TQSql & );
-#endif
-
-};
-
-#endif
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlcursor.cpp b/tqtinterface/qt4/src/sql/tqsqlcursor.cpp
deleted file mode 100644
index 621d693..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlcursor.cpp
+++ /dev/null
@@ -1,1549 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlCursor class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlcursor.h"
-
-#ifndef TQT_NO_SQL
-
-#include "tqsqldriver.h"
-#include "tqsqlresult.h"
-#include "tqdatetime.h"
-#include "tqsqldatabase.h"
-#include "tqsql.h"
-
-class TQSqlCursorPrivate
-{
-public:
-
- TQSqlCursorPrivate( const TQString& name, TQSqlDatabase* sdb )
- : lastAt( TQSql::BeforeFirst ), nm( name ), srt( name ), md( 0 ), db( sdb ), q( 0 )
- {}
- ~TQSqlCursorPrivate()
- {
- delete q;
- }
-
- TQSqlQuery* query()
- {
- if ( !q )
- q = new TQSqlQuery( 0, db );
- return q;
- }
-
- int lastAt;
- TQString nm; //name
- TQSqlIndex srt; //sort
- TQString ftr; //filter
- int md; //mode
- TQSqlIndex priIndx; //primary index
- TQSqlRecord editBuffer;
- // the primary index as it was before the user changed the values in editBuffer
- TQString editIndex;
- TQSqlRecordInfo infoBuffer;
- TQSqlDatabase* db;
- TQSqlQuery* q;
-};
-
-TQString qOrderByClause( const TQSqlIndex & i, const TQString& prefix = TQString::null )
-{
- TQString str;
- int k = i.count();
- if( k == 0 ) return TQString::null;
- str = " order by " + i.toString( prefix );
- return str;
-}
-
-TQString qWhereClause( const TQString& prefix, TQSqlField* field, const TQSqlDriver* driver )
-{
- TQString f;
- if ( field && driver ) {
- f = ( prefix.length() > 0 ? prefix + TQString(".") : TQString() ) + field->name();
- if ( field->isNull() ) {
- f += " IS NULL";
- } else {
- f += " = " + driver->formatValue( field );
- }
- }
- return f;
-}
-
-TQString qWhereClause( TQSqlRecord* rec, const TQString& prefix, const TQString& sep,
- const TQSqlDriver* driver )
-{
- static TQString blank( " " );
- TQString filter;
- bool separator = FALSE;
- for ( uint j = 0; j < rec->count(); ++j ) {
- TQSqlField* f = rec->field( j );
- if ( rec->isGenerated( j ) ) {
- if ( separator )
- filter += sep + blank;
- filter += qWhereClause( prefix, f, driver );
- filter += blank;
- separator = TRUE;
- }
- }
- return filter;
-}
-
-/*!
- \class TQSqlCursor tqsqlcursor.h
- \brief The TQSqlCursor class provides browsing and editing of SQL
- tables and views.
-
- \ingroup database
- \module sql
-
- A TQSqlCursor is a database record (see \l TQSqlRecord) that
- corresponds to a table or view within an SQL database (see \l
- TQSqlDatabase). There are two buffers in a cursor, one used for
- browsing and one used for editing records. Each buffer contains a
- list of fields which correspond to the fields in the table or
- view.
-
- When positioned on a valid record, the browse buffer contains the
- values of the current record's fields from the database. The edit
- buffer is separate, and is used for editing existing records and
- inserting new records.
-
- For browsing data, a cursor must first select() data from the
- database. After a successful select() the cursor is active
- (isActive() returns TRUE), but is initially not positioned on a
- valid record (isValid() returns FALSE). To position the cursor on
- a valid record, use one of the navigation functions, next(),
- prev(), first(), last(), or seek(). Once positioned on a valid
- record, data can be retrieved from the browse buffer using
- value(). If a navigation function is not successful, it returns
- FALSE, the cursor will no longer be positioned on a valid record
- and the values returned by value() are undefined.
-
- For example:
-
- \quotefile sql/overview/retrieve2/main.cpp
- \skipto TQSqlCursor
- \printline TQSqlCursor
- \printuntil }
-
- In the above example, a cursor is created specifying a table or
- view name in the database. Then, select() is called, which can be
- optionally parameterised to filter and order the records
- retrieved. Each record in the cursor is retrieved using next().
- When next() returns FALSE, there are no more records to process,
- and the loop terminates.
-
- For editing records (rows of data), a cursor contains a separate
- edit buffer which is independent of the fields used when browsing.
- The functions insert(), update() and del() operate on the edit
- buffer. This allows the cursor to be repositioned to other
- records while simultaneously maintaining a separate buffer for
- edits. You can get a pointer to the edit buffer using
- editBuffer(). The primeInsert(), primeUpdate() and primeDelete()
- functions also return a pointer to the edit buffer and prepare it
- for insert, update and delete respectively. Edit operations only
- affect a single row at a time. Note that update() and del()
- require that the table or view contain a primaryIndex() to ensure
- that edit operations affect a unique record within the database.
-
- For example:
-
- \quotefile sql/overview/update/main.cpp
- \skipto prices
- \printline prices
- \printuntil update
- \printline
-
- To edit an existing database record, first move to the record you
- wish to update. Call primeUpdate() to get the pointer to the
- cursor's edit buffer. Then use this pointer to modify the values
- in the edit buffer. Finally, call update() to save the changes to
- the database. The values in the edit buffer will be used to
- locate the appropriate record when updating the database (see
- primaryIndex()).
-
- Similarly, when deleting an existing database record, first move
- to the record you wish to delete. Then, call primeDelete() to get
- the pointer to the edit buffer. Finally, call del() to delete the
- record from the database. Again, the values in the edit buffer
- will be used to locate and delete the appropriate record.
-
- To insert a new record, call primeInsert() to get the pointer to
- the edit buffer. Use this pointer to populate the edit buffer
- with new values and then insert() the record into the database.
-
- After calling insert(), update() or del(), the cursor is no longer
- positioned on a valid record and can no longer be navigated
- (isValid() return FALSE). The reason for this is that any changes
- made to the database will not be visible until select() is called
- to refresh the cursor. You can change this behavior by passing
- FALSE to insert(), update() or del() which will prevent the cursor
- from becoming invalid. The edits will still not be visible when
- navigating the cursor until select() is called.
-
- TQSqlCursor contains virtual methods which allow editing behavior
- to be customized by subclasses. This allows custom cursors to be
- created that encapsulate the editing behavior of a database table
- for an entire application. For example, a cursor can be customized
- to always auto-number primary index fields, or provide fields with
- suitable default values, when inserting new records. TQSqlCursor
- generates SQL statements which are sent to the database engine;
- you can control which fields are included in these statements
- using setGenerated().
-
- Note that TQSqlCursor does not inherit from TQObject. This means
- that you are responsible for destroying instances of this class
- yourself. However if you create a TQSqlCursor and use it in a
- \l TQDataTable, \l TQDataBrowser or a \l TQDataView these classes will
- usually take ownership of the cursor and destroy it when they
- don't need it anymore. The documentation for TQDataTable,
- TQDataBrowser and TQDataView explicitly states which calls take
- ownership of the cursor.
-*/
-
-/*!
- \enum TQSqlCursor::Mode
-
- This enum type describes how TQSqlCursor operates on records in the
- database.
-
- \value ReadOnly the cursor can only SELECT records from the
- database.
-
- \value Insert the cursor can INSERT records into the database.
-
- \value Update the cursor can UPDATE records in the database.
-
- \value Delete the cursor can DELETE records from the database.
-
- \value Writable the cursor can INSERT, UPDATE and DELETE records
- in the database.
-*/
-
-/*!
- Constructs a cursor on database \a db using table or view \a name.
-
- If \a autopopulate is TRUE (the default), the \a name of the
- cursor must correspond to an existing table or view name in the
- database so that field information can be automatically created.
- If the table or view does not exist, the cursor will not be
- functional.
-
- The cursor is created with an initial mode of TQSqlCursor::Writable
- (meaning that records can be inserted, updated or deleted using
- the cursor). If the cursor does not have a unique primary index,
- update and deletes cannot be performed.
-
- Note that \a autopopulate refers to populating the cursor with
- meta-data, e.g. the names of the table's fields, not with
- retrieving data. The select() function is used to populate the
- cursor with data.
-
- \sa setName() setMode()
-*/
-
-TQSqlCursor::TQSqlCursor( const TQString & name, bool autopopulate, TQSqlDatabase* db )
- : TQSqlRecord(), TQSqlQuery( TQString::null, db )
-{
- d = new TQSqlCursorPrivate( name, db );
- setMode( Writable );
- if ( !d->nm.isNull() )
- setName( d->nm, autopopulate );
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-
-TQSqlCursor::TQSqlCursor( const TQSqlCursor & other )
- : TQSqlRecord( other ), TQSqlQuery( other )
-{
- d = new TQSqlCursorPrivate( other.d->nm, other.d->db );
- d->lastAt = other.d->lastAt;
- d->nm = other.d->nm;
- d->srt = other.d->srt;
- d->ftr = other.d->ftr;
- d->priIndx = other.d->priIndx;
- d->editBuffer = other.d->editBuffer;
- d->infoBuffer = other.d->infoBuffer;
- d->q = 0; // do not share queries
- setMode( other.mode() );
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlCursor::~TQSqlCursor()
-{
- delete d;
-}
-
-/*!
- Sets the cursor equal to \a other.
-*/
-
-TQSqlCursor& TQSqlCursor::operator=( const TQSqlCursor& other )
-{
- TQSqlRecord::operator=( other );
- TQSqlQuery::operator=( other );
- delete d;
- d = new TQSqlCursorPrivate( other.d->nm, other.d->db );
- d->lastAt = other.d->lastAt;
- d->nm = other.d->nm;
- d->srt = other.d->srt;
- d->ftr = other.d->ftr;
- d->priIndx = other.d->priIndx;
- d->editBuffer = other.d->editBuffer;
- d->infoBuffer = other.d->infoBuffer;
- d->q = 0; // do not share queries
- setMode( other.mode() );
- return *this;
-}
-
-/*!
- Sets the current sort to \a sort. Note that no new records are
- selected. To select new records, use select(). The \a sort will
- apply to any subsequent select() calls that do not explicitly
- specify a sort.
-*/
-
-void TQSqlCursor::setSort( const TQSqlIndex& sort )
-{
- d->srt = sort;
-}
-
-/*!
- Returns the current sort, or an empty index if there is no current
- sort.
-*/
-TQSqlIndex TQSqlCursor::sort() const
-{
- return d->srt;
-}
-
-/*!
- Sets the current filter to \a filter. Note that no new records are
- selected. To select new records, use select(). The \a filter will
- apply to any subsequent select() calls that do not explicitly
- specify a filter.
-
- The filter is a SQL \c WHERE clause without the keyword 'WHERE',
- e.g. \c{name='Dave'} which will be processed by the DBMS.
-*/
-void TQSqlCursor::setFilter( const TQString& filter )
-{
- d->ftr = filter;
-}
-
-/*!
- Returns the current filter, or an empty string if there is no
- current filter.
-*/
-TQString TQSqlCursor::filter() const
-{
- return d->ftr;
-}
-
-/*!
- Sets the name of the cursor to \a name. If \a autopopulate is TRUE
- (the default), the \a name must correspond to a valid table or
- view name in the database. Also, note that all references to the
- cursor edit buffer become invalidated when fields are
- auto-populated. See the TQSqlCursor constructor documentation for
- more information.
-*/
-void TQSqlCursor::setName( const TQString& name, bool autopopulate )
-{
- d->nm = name;
- if ( autopopulate ) {
- if ( driver() ) {
- d->infoBuffer = driver()->recordInfo( name );
- *this = d->infoBuffer.toRecord();
- d->editBuffer = *this;
- d->priIndx = driver()->primaryIndex( name );
- }
-#ifdef TQT_CHECK_RANGE
- if ( isEmpty() )
- qWarning("TQSqlCursor::setName: unable to build record, does '%s' exist?", name.latin1() );
-#endif
- }
-}
-
-/*!
- Returns the name of the cursor.
-*/
-
-TQString TQSqlCursor::name() const
-{
- return d->nm;
-}
-
-/*! \reimp
-*/
-
-TQString TQSqlCursor::toString( const TQString& prefix, const TQString& sep ) const
-{
- TQString pflist;
- TQString pfix = prefix.isEmpty() ? TQString() : prefix + ".";
- bool comma = FALSE;
-
- for ( uint i = 0; i < count(); ++i ) {
- const TQString fname = fieldName( i );
- if ( isGenerated( i ) ) {
- if( comma )
- pflist += sep + " ";
- pflist += pfix + fname;
- comma = TRUE;
- }
- }
- return pflist;
-}
-
-/*!
- \internal
-
- Assigns the record \a list.
-
-*/
-TQSqlRecord & TQSqlCursor::operator=( const TQSqlRecord & list )
-{
- return TQSqlRecord::operator=( list );
-}
-
-/*!
- Append a copy of field \a fieldInfo to the end of the cursor. Note
- that all references to the cursor edit buffer become invalidated.
-*/
-
-void TQSqlCursor::append( const TQSqlFieldInfo& fieldInfo )
-{
- d->editBuffer.append( fieldInfo.toField() );
- d->editBuffer.setGenerated( d->editBuffer.count() - 1, fieldInfo.isGenerated() );
- d->infoBuffer.append( fieldInfo );
- TQSqlRecord::append( fieldInfo.toField() );
- TQSqlRecord::setGenerated( TQSqlRecord::count() - 1, fieldInfo.isGenerated() );
-}
-
-/*!
- Removes all fields from the cursor. Note that all references to
- the cursor edit buffer become invalidated.
-*/
-void TQSqlCursor::clear()
-{
- d->editBuffer.clear();
- d->infoBuffer.clear();
- TQSqlRecord::clear();
-}
-
-
-/*!
- Insert a copy of \a fieldInfo at position \a pos. If a field
- already exists at \a pos, it is removed. Note that all references
- to the cursor edit buffer become invalidated.
-*/
-
-void TQSqlCursor::insert( int pos, const TQSqlFieldInfo& fieldInfo )
-{
- d->editBuffer.insert( pos, fieldInfo.toField() );
- d->editBuffer.setGenerated( pos, fieldInfo.isGenerated() );
- d->infoBuffer[ pos ] = fieldInfo;
- TQSqlRecord::insert( pos, fieldInfo.toField() );
- TQSqlRecord::setGenerated( pos, fieldInfo.isGenerated() );
-}
-
-/*!
- Removes the field at \a pos. If \a pos does not exist, nothing
- happens. Note that all references to the cursor edit buffer become
- invalidated.
-*/
-
-void TQSqlCursor::remove( int pos )
-{
- d->editBuffer.remove( pos );
- d->infoBuffer[ pos ] = TQSqlFieldInfo();
- TQSqlRecord::remove( pos );
-}
-
-/*!
- Sets the generated flag for the field \a name to \a generated. If
- the field does not exist, nothing happens. Only fields that have
- \a generated set to TRUE are included in the SQL that is
- generated by insert(), update() or del().
-
- \sa isGenerated()
-*/
-
-void TQSqlCursor::setGenerated( const TQString& name, bool generated )
-{
- int pos = position( name );
- if ( pos == -1 )
- return;
- TQSqlRecord::setGenerated( name, generated );
- d->editBuffer.setGenerated( name, generated );
- d->infoBuffer[ pos ].setGenerated( generated );
-}
-
-/*!
- \overload
-
- Sets the generated flag for the field \a i to \a generated.
-
- \sa isGenerated()
-*/
-void TQSqlCursor::setGenerated( int i, bool generated )
-{
- if ( i < 0 || i >= (int)d->infoBuffer.count() )
- return;
- TQSqlRecord::setGenerated( i, generated );
- d->editBuffer.setGenerated( i, generated );
- d->infoBuffer[i].setGenerated( generated );
-}
-
-/*!
- Returns the primary index associated with the cursor as defined in
- the database, or an empty index if there is no primary index. If
- \a setFromCursor is TRUE (the default), the index fields are
- populated with the corresponding values in the cursor's current
- record.
-*/
-
-TQSqlIndex TQSqlCursor::primaryIndex( bool setFromCursor ) const
-{
- if ( setFromCursor ) {
- for ( uint i = 0; i < d->priIndx.count(); ++i ) {
- const TQString fn = d->priIndx.fieldName( i );
- if ( contains( fn ) )
- d->priIndx.setValue( i, value( fn ) );
- }
- }
- return d->priIndx;
-}
-
-/*!
- Sets the primary index associated with the cursor to the index \a
- idx. Note that this index must contain a field or set of fields
- which identify a unique record within the underlying database
- table or view so that update() and del() will execute as expected.
-
- \sa update() del()
-*/
-
-void TQSqlCursor::setPrimaryIndex( const TQSqlIndex& idx )
-{
- d->priIndx = idx;
-}
-
-
-/*!
- Returns an index composed of \a fieldNames, all in ASCending
- order. Note that all field names must exist in the cursor,
- otherwise an empty index is returned.
-
- \sa TQSqlIndex
-*/
-
-TQSqlIndex TQSqlCursor::index( const TQStringList& fieldNames ) const
-{
- TQSqlIndex idx;
- for ( TQStringList::ConstIterator it = fieldNames.begin(); it != fieldNames.end(); ++it ) {
- const TQSqlField* f = field( (*it) );
- if ( !f ) { /* all fields must exist */
- idx.clear();
- break;
- }
- idx.append( *f );
- }
- return idx;
-}
-
-/*!
- \overload
-
- Returns an index based on \a fieldName.
-*/
-
-TQSqlIndex TQSqlCursor::index( const TQString& fieldName ) const
-{
- TQStringList fl( fieldName );
- return index( fl );
-}
-
-/*!
- \overload
-
- Returns an index based on \a fieldName.
-*/
-
-TQSqlIndex TQSqlCursor::index( const char* fieldName ) const
-{
- return index( TQStringList( TQString( fieldName ) ) );
-}
-
-/*!
- Selects all fields in the cursor from the database matching the
- filter criteria \a filter. The data is returned in the order
- specified by the index \a sort. Returns TRUE if the data was
- successfully selected; otherwise returns FALSE.
-
- The \a filter is a string containing a SQL \c WHERE clause but
- without the 'WHERE' keyword. The cursor is initially positioned at
- an invalid row after this function is called. To move to a valid
- row, use seek(), first(), last(), prev() or next().
-
- Example:
- \code
- TQSqlCursor cur( "Employee" ); // Use the Employee table or view
- cur.select( "deptno=10" ); // select all records in department 10
- while( cur.next() ) {
- ... // process data
- }
- ...
- // select records in other departments, ordered by department number
- cur.select( "deptno>10", cur.index( "deptno" ) );
- ...
- \endcode
-
- The filter will apply to any subsequent select() calls that do not
- explicitly specify another filter. Similarly the sort will apply
- to any subsequent select() calls that do not explicitly specify
- another sort.
-
- \code
- TQSqlCursor cur( "Employee" );
- cur.select( "deptno=10" ); // select all records in department 10
- while( cur.next() ) {
- ... // process data
- }
- ...
- cur.select(); // re-selects all records in department 10
- ...
- \endcode
-
-*/
-
-bool TQSqlCursor::select( const TQString & filter, const TQSqlIndex & sort )
-{
- TQString fieldList = toString( d->nm );
- if ( fieldList.isEmpty() )
- return FALSE;
- TQString str= "select " + fieldList;
- str += " from " + d->nm;
- if ( !filter.isEmpty() ) {
- d->ftr = filter;
- str += " where " + filter;
- } else
- d->ftr = TQString::null;
- if ( sort.count() > 0 )
- str += " order by " + sort.toString( d->nm );
- d->srt = sort;
- return exec( str );
-}
-
-/*!
- \overload
-
- Selects all fields in the cursor from the database. The rows are
- returned in the order specified by the last call to setSort() or
- the last call to select() that specified a sort, whichever is the
- most recent. If there is no current sort, the order in which the
- rows are returned is undefined. The records are filtered according
- to the filter specified by the last call to setFilter() or the
- last call to select() that specified a filter, whichever is the
- most recent. If there is no current filter, all records are
- returned. The cursor is initially positioned at an invalid row. To
- move to a valid row, use seek(), first(), last(), prev() or
- next().
-
- \sa setSort() setFilter()
-*/
-
-bool TQSqlCursor::select()
-{
- return select( filter(), sort() );
-}
-
-/*!
- \overload
-
- Selects all fields in the cursor from the database. The data is
- returned in the order specified by the index \a sort. The records
- are filtered according to the filter specified by the last call to
- setFilter() or the last call to select() that specified a filter,
- whichever is the most recent. The cursor is initially positioned
- at an invalid row. To move to a valid row, use seek(), first(),
- last(), prev() or next().
-*/
-
-bool TQSqlCursor::select( const TQSqlIndex& sort )
-{
- return select( filter(), sort );
-}
-
-/*!
- \overload
-
- Selects all fields in the cursor matching the filter index \a
- filter. The data is returned in the order specified by the index
- \a sort. The \a filter index works by constructing a WHERE clause
- using the names of the fields from the \a filter and their values
- from the current cursor record. The cursor is initially positioned
- at an invalid row. To move to a valid row, use seek(), first(),
- last(), prev() or next(). This function is useful, for example,
- for retrieving data based upon a table's primary index:
-
- \code
- TQSqlCursor cur( "Employee" );
- TQSqlIndex pk = cur.primaryIndex();
- cur.setValue( "id", 10 );
- cur.select( pk, pk ); // generates "SELECT ... FROM Employee WHERE id=10 ORDER BY id"
- ...
- \endcode
-
- In this example the TQSqlIndex, pk, is used for two different
- purposes. When used as the filter (first) argument, the field
- names it contains are used to construct the WHERE clause, each set
- to the current cursor value, \c{WHERE id=10}, in this case. When
- used as the sort (second) argument the field names it contains are
- used for the ORDER BY clause, \c{ORDER BY id} in this example.
-*/
-
-bool TQSqlCursor::select( const TQSqlIndex & filter, const TQSqlIndex & sort )
-{
- return select( toString( filter, this, d->nm, "=", "and" ), sort );
-}
-
-/*!
- Sets the cursor mode to \a mode. This value can be an OR'ed
- combination of \l TQSqlCursor::Mode values. The default mode for a
- cursor is \c TQSqlCursor::Writable.
-
- \code
- TQSqlCursor cur( "Employee" );
- cur.setMode( TQSqlCursor::Writable ); // allow insert/update/delete
- ...
- cur.setMode( TQSqlCursor::Insert | TQSqlCursor::Update ); // allow inserts and updates only
- ...
- cur.setMode( TQSqlCursor::ReadOnly ); // no inserts/updates/deletes allowed
-
- \endcode
-*/
-
-void TQSqlCursor::setMode( int mode )
-{
- d->md = mode;
-}
-
-/*!
- Returns the current cursor mode.
-
- \sa setMode()
-*/
-
-int TQSqlCursor::mode() const
-{
- return d->md;
-}
-
-/*!
- Sets field \a name to \a calculated. If the field \a name does not
- exist, nothing happens. The value of a calculated field is set by
- the calculateField() virtual function which you must reimplement
- (or the field value will be an invalid TQVariant). Calculated
- fields do not appear in generated SQL statements sent to the
- database.
-
- \sa calculateField() TQSqlRecord::setGenerated()
-*/
-
-void TQSqlCursor::setCalculated( const TQString& name, bool calculated )
-{
- int pos = position( name );
- if ( pos < 0 )
- return;
- d->infoBuffer[ pos ].setCalculated( calculated );
- if ( calculated )
- setGenerated( pos, FALSE );
-}
-
-/*!
- Returns TRUE if the field \a name exists and is calculated;
- otherwise returns FALSE.
-
- \sa setCalculated()
-*/
-
-bool TQSqlCursor::isCalculated( const TQString& name ) const
-{
- int pos = position( name );
- if ( pos < 0 )
- return FALSE;
- return d->infoBuffer[ pos ].isCalculated();
-}
-
-/*!
- Sets field \a{name}'s trimmed status to \a trim. If the field \a
- name does not exist, nothing happens.
-
- When a trimmed field of type string or cstring is read from the
- database any trailing (right-most) spaces are removed.
-
- \sa isTrimmed() TQVariant
-*/
-
-void TQSqlCursor::setTrimmed( const TQString& name, bool trim )
-{
- int pos = position( name );
- if ( pos < 0 )
- return;
- d->infoBuffer[ pos ].setTrim( trim );
-}
-
-/*!
- Returns TRUE if the field \a name exists and is trimmed; otherwise
- returns FALSE.
-
- When a trimmed field of type string or cstring is read from the
- database any trailing (right-most) spaces are removed.
-
- \sa setTrimmed()
-*/
-
-bool TQSqlCursor::isTrimmed( const TQString& name ) const
-{
- int pos = position( name );
- if ( pos < 0 )
- return FALSE;
- return d->infoBuffer[ pos ].isTrim();
-}
-
-/*!
- Returns TRUE if the cursor is read-only; otherwise returns FALSE.
- The default is FALSE. Read-only cursors cannot be edited using
- insert(), update() or del().
-
- \sa setMode()
-*/
-
-bool TQSqlCursor::isReadOnly() const
-{
- return d->md == 0;
-}
-
-/*!
- Returns TRUE if the cursor will perform inserts; otherwise returns
- FALSE.
-
- \sa setMode()
-*/
-
-bool TQSqlCursor::canInsert() const
-{
- return ( ( d->md & Insert ) == Insert ) ;
-}
-
-
-/*!
- Returns TRUE if the cursor will perform updates; otherwise returns
- FALSE.
-
- \sa setMode()
-*/
-
-bool TQSqlCursor::canUpdate() const
-{
- return ( ( d->md & Update ) == Update ) ;
-}
-
-/*!
- Returns TRUE if the cursor will perform deletes; otherwise returns
- FALSE.
-
- \sa setMode()
-*/
-
-bool TQSqlCursor::canDelete() const
-{
- return ( ( d->md & Delete ) == Delete ) ;
-}
-
-/*!
- \overload
-
- Returns a formatted string composed of the \a prefix (e.g. table
- or view name), ".", the \a field name, the \a fieldSep and the
- field value. If the \a prefix is empty then the string will begin
- with the \a field name. This function is useful for generating SQL
- statements.
-*/
-
-TQString TQSqlCursor::toString( const TQString& prefix, TQSqlField* field, const TQString& fieldSep ) const
-{
- TQString f;
- if ( field && driver() ) {
- f = ( prefix.length() > 0 ? prefix + TQString(".") : TQString() ) + field->name();
- f += " " + fieldSep + " ";
- if ( field->isNull() ) {
- f += "NULL";
- } else {
- f += driver()->formatValue( field );
- }
- }
- return f;
-}
-
-/*!
- Returns a formatted string composed of all the fields in \a rec.
- Each field is composed of the \a prefix (e.g. table or view name),
- ".", the field name, the \a fieldSep and the field value. If the
- \a prefix is empty then each field will begin with the field name.
- The fields are then joined together separated by \a sep. Fields
- where isGenerated() returns FALSE are not included. This function
- is useful for generating SQL statements.
-*/
-
-TQString TQSqlCursor::toString( TQSqlRecord* rec, const TQString& prefix, const TQString& fieldSep,
- const TQString& sep ) const
-{
- static TQString blank( " " );
- TQString filter;
- bool separator = FALSE;
- for ( uint j = 0; j < count(); ++j ) {
- TQSqlField* f = rec->field( j );
- if ( rec->isGenerated( j ) ) {
- if ( separator )
- filter += sep + blank;
- filter += toString( prefix, f, fieldSep );
- filter += blank;
- separator = TRUE;
- }
- }
- return filter;
-}
-
-/*!
- \overload
-
- Returns a formatted string composed of all the fields in the index
- \a i. Each field is composed of the \a prefix (e.g. table or view
- name), ".", the field name, the \a fieldSep and the field value.
- If the \a prefix is empty then each field will begin with the field
- name. The field values are taken from \a rec. The fields are then
- joined together separated by \a sep. Fields where isGenerated()
- returns FALSE are ignored. This function is useful for generating
- SQL statements.
-*/
-
-TQString TQSqlCursor::toString( const TQSqlIndex& i, TQSqlRecord* rec, const TQString& prefix,
- const TQString& fieldSep, const TQString& sep ) const
-{
- TQString filter;
- bool separator = FALSE;
- for( uint j = 0; j < i.count(); ++j ){
- if ( rec->isGenerated( j ) ) {
- if( separator ) {
- filter += " " + sep + " " ;
- }
- TQString fn = i.fieldName( j );
- TQSqlField* f = rec->field( fn );
- filter += toString( prefix, f, fieldSep );
- separator = TRUE;
- }
- }
- return filter;
-}
-
-/*!
- \overload
-
- Inserts the current contents of the cursor's edit record buffer
- into the database, if the cursor allows inserts. Returns the
- number of rows affected by the insert. For error information, use
- lastError().
-
- If \a tqinvalidate is TRUE (the default), the cursor will no longer
- be positioned on a valid record and can no longer be navigated. A
- new select() call must be made before navigating to a valid
- record.
-
- \quotefile sql/overview/insert2/main.cpp
- \skipto prices
- \printline prices
- \printuntil insert
-
- In the above example, a cursor is created on the 'prices' table
- and a pointer to the insert buffer is aquired using primeInsert().
- Each field's value is set to the desired value and then insert()
- is called to insert the data into the database. Remember: all edit
- operations (insert(), update() and delete()) operate on the
- contents of the cursor edit buffer and not on the contents of the
- cursor itself.
-
- \sa setMode() lastError()
-*/
-
-int TQSqlCursor::insert( bool tqinvalidate )
-{
- if ( ( d->md & Insert ) != Insert || !driver() )
- return FALSE;
- int k = d->editBuffer.count();
- if ( k == 0 )
- return 0;
-
- TQString fList;
- TQString vList;
- bool comma = FALSE;
- // use a prepared query if the driver supports it
- if ( driver()->hasFeature( TQSqlDriver::PreparedQueries ) ) {
- int cnt = 0;
- bool oraStyle = driver()->hasFeature( TQSqlDriver::NamedPlaceholders );
- for( int j = 0; j < k; ++j ) {
- TQSqlField* f = d->editBuffer.field( j );
- if ( d->editBuffer.isGenerated( j ) ) {
- if ( comma ) {
- fList += ",";
- vList += ",";
- }
- fList += f->name();
- vList += (oraStyle == TRUE) ? ":f" + TQString::number(cnt) : TQString("?");
- cnt++;
- comma = TRUE;
- }
- }
- if ( !comma ) {
- return 0;
- }
- TQString str;
- str.append( "insert into " ).append( name() ).append( "(" ).append( fList ).append( ") values (" ).append( vList ). append ( ")" );
- return applyPrepared( str, tqinvalidate );
- } else {
- for( int j = 0; j < k; ++j ) {
- TQSqlField* f = d->editBuffer.field( j );
- if ( d->editBuffer.isGenerated( j ) ) {
- if ( comma ) {
- fList += ",";
- vList += ",";
- }
- fList += f->name();
- vList += driver()->formatValue( f );
- comma = TRUE;
- }
- }
-
- if ( !comma ) {
- // no valid fields found
- return 0;
- }
- TQString str;
- str.append( "insert into " ).append( name() ).append( "(" ).append( fList ).append( ") values (" ).append( vList ). append ( ")" );
- return apply( str, tqinvalidate );
- }
-}
-
-/*!
- Returns the current internal edit buffer. If \a copy is TRUE (the
- default is FALSE), the current cursor field values are first
- copied into the edit buffer. The edit buffer is valid as long as
- the cursor remains valid. The cursor retains ownership of the
- returned pointer, so it must not be deleted or modified.
-
- \sa primeInsert(), primeUpdate() primeDelete()
-*/
-
-TQSqlRecord* TQSqlCursor::editBuffer( bool copy )
-{
- if ( copy ) {
- for(uint i = 0; i < d->editBuffer.count(); i++) {
- if ( TQSqlRecord::isNull( i ) ) {
- d->editBuffer.setNull( i );
- } else {
- d->editBuffer.setValue( i, value( i ) );
- }
- }
- }
- return &d->editBuffer;
-}
-
-/*!
- This function primes the edit buffer's field values for update and
- returns the edit buffer. The default implementation copies the
- field values from the current cursor record into the edit buffer
- (therefore, this function is equivalent to calling editBuffer(
- TRUE ) ). The cursor retains ownership of the returned pointer, so
- it must not be deleted or modified.
-
- \sa editBuffer() update()
-*/
-
-TQSqlRecord* TQSqlCursor::primeUpdate()
-{
- // memorize the primary keys as they were before the user changed the values in editBuffer
- TQSqlRecord* buf = editBuffer( TRUE );
- TQSqlIndex idx = primaryIndex( FALSE );
- if ( !idx.isEmpty() )
- d->editIndex = toString( idx, buf, d->nm, "=", "and" );
- else
- d->editIndex = qWhereClause( buf, d->nm, "and", driver() );
- return buf;
-}
-
-/*!
- This function primes the edit buffer's field values for delete and
- returns the edit buffer. The default implementation copies the
- field values from the current cursor record into the edit buffer
- (therefore, this function is equivalent to calling editBuffer(
- TRUE ) ). The cursor retains ownership of the returned pointer, so
- it must not be deleted or modified.
-
- \sa editBuffer() del()
-*/
-
-TQSqlRecord* TQSqlCursor::primeDelete()
-{
- return editBuffer( TRUE );
-}
-
-/*!
- This function primes the edit buffer's field values for insert and
- returns the edit buffer. The default implementation clears all
- field values in the edit buffer. The cursor retains ownership of
- the returned pointer, so it must not be deleted or modified.
-
- \sa editBuffer() insert()
-*/
-
-TQSqlRecord* TQSqlCursor::primeInsert()
-{
- d->editBuffer.clearValues();
- return &d->editBuffer;
-}
-
-
-/*!
- Updates the database with the current contents of the edit buffer.
- Returns the number of records which were updated.
- For error information, use lastError().
-
- Only records which meet the filter criteria specified by the
- cursor's primary index are updated. If the cursor does not contain
- a primary index, no update is performed and 0 is returned.
-
- If \a tqinvalidate is TRUE (the default), the current cursor can no
- longer be navigated. A new select() call must be made before you
- can move to a valid record. For example:
-
- \quotefile sql/overview/update/main.cpp
- \skipto prices
- \printline prices
- \printuntil update
- \printline
-
- In the above example, a cursor is created on the 'prices' table
- and is positioned on the record to be updated. Then a pointer to
- the cursor's edit buffer is acquired using primeUpdate(). A new
- value is calculated and placed into the edit buffer with the
- setValue() call. Finally, an update() call is made on the cursor
- which uses the tables's primary index to update the record in the
- database with the contents of the cursor's edit buffer. Remember:
- all edit operations (insert(), update() and delete()) operate on
- the contents of the cursor edit buffer and not on the contents of
- the cursor itself.
-
- Note that if the primary index does not uniquely distinguish
- records the database may be changed into an inconsistent state.
-
- \sa setMode() lastError()
-*/
-
-int TQSqlCursor::update( bool tqinvalidate )
-{
- if ( d->editIndex.isEmpty() )
- return 0;
- return update( d->editIndex, tqinvalidate );
-}
-
-/*!
- \overload
-
- Updates the database with the current contents of the cursor edit
- buffer using the specified \a filter. Returns the number of
- records which were updated.
- For error information, use lastError().
-
- Only records which meet the filter criteria are updated, otherwise
- all records in the table are updated.
-
- If \a tqinvalidate is TRUE (the default), the cursor can no longer
- be navigated. A new select() call must be made before you can move
- to a valid record.
-
- \sa primeUpdate() setMode() lastError()
-*/
-
-int TQSqlCursor::update( const TQString & filter, bool tqinvalidate )
-{
- if ( ( d->md & Update ) != Update ) {
- return FALSE;
- }
- int k = count();
- if ( k == 0 ) {
- return 0;
- }
-
- // use a prepared query if the driver supports it
- if ( driver()->hasFeature( TQSqlDriver::PreparedQueries ) ) {
- TQString fList;
- bool comma = FALSE;
- int cnt = 0;
- bool oraStyle = driver()->hasFeature( TQSqlDriver::NamedPlaceholders );
- for( int j = 0; j < k; ++j ) {
- TQSqlField* f = d->editBuffer.field( j );
- if ( d->editBuffer.isGenerated( j ) ) {
- if ( comma ) {
- fList += ",";
- }
- fList += f->name() + " = " + (oraStyle == TRUE ? ":f" + TQString::number(cnt) : TQString("?"));
- cnt++;
- comma = TRUE;
- }
- }
- if ( !comma ) {
- return 0;
- }
- TQString str = "update " + name() + " set " + fList;
- if ( filter.length() ) {
- str+= " where " + filter;
- }
- return applyPrepared( str, tqinvalidate );
- } else {
- TQString str = "update " + name();
- str += " set " + toString( &d->editBuffer, TQString::null, "=", "," );
- if ( filter.length() ) {
- str+= " where " + filter;
- }
- return apply( str, tqinvalidate );
- }
-}
-
-/*!
- Deletes a record from the database using the cursor's primary
- index and the contents of the cursor edit buffer. Returns the
- number of records which were deleted.
- For error information, use lastError().
-
- Only records which meet the filter criteria specified by the
- cursor's primary index are deleted. If the cursor does not contain
- a primary index, no delete is performed and 0 is returned. If \a
- tqinvalidate is TRUE (the default), the current cursor can no longer
- be navigated. A new select() call must be made before you can move
- to a valid record. For example:
-
- \quotefile sql/overview/delete/main.cpp
- \skipto prices
- \printline prices
- \printuntil }
-
- In the above example, a cursor is created on the 'prices' table
- and positioned to the record to be deleted. First primeDelete() is
- called to populate the edit buffer with the current cursor values,
- e.g. with an id of 999, and then del() is called to actually
- delete the record from the database. Remember: all edit operations
- (insert(), update() and delete()) operate on the contents of the
- cursor edit buffer and not on the contents of the cursor itself.
-
- \sa primeDelete() setMode() lastError()
-*/
-
-int TQSqlCursor::del( bool tqinvalidate )
-{
- TQSqlIndex idx = primaryIndex( FALSE );
- if ( idx.isEmpty() )
- return del( qWhereClause( &d->editBuffer, d->nm, "and", driver() ), tqinvalidate );
- else
- return del( toString( primaryIndex(), &d->editBuffer, d->nm,
- "=", "and" ), tqinvalidate );
-}
-
-/*!
- \overload
-
- Deletes the current cursor record from the database using the
- filter \a filter. Only records which meet the filter criteria are
- deleted. Returns the number of records which were deleted. If \a
- tqinvalidate is TRUE (the default), the current cursor can no longer
- be navigated. A new select() call must be made before you can move
- to a valid record. For error information, use lastError().
-
- The \a filter is an SQL \c WHERE clause, e.g. \c{id=500}.
-
- \sa setMode() lastError()
-*/
-
-int TQSqlCursor::del( const TQString & filter, bool tqinvalidate )
-{
- if ( ( d->md & Delete ) != Delete )
- return 0;
- int k = count();
- if( k == 0 ) return 0;
- TQString str = "delete from " + name();
- if ( filter.length() )
- str+= " where " + filter;
- return apply( str, tqinvalidate );
-}
-
-/*
- \internal
-*/
-
-int TQSqlCursor::apply( const TQString& q, bool tqinvalidate )
-{
- int ar = 0;
- if ( tqinvalidate ) {
- if ( exec( q ) )
- ar = numRowsAffected();
- } else if ( driver() ) {
- TQSqlQuery* sql = d->query();
- if ( sql && sql->exec( q ) )
- ar = sql->numRowsAffected();
- }
- return ar;
-}
-
-/*
- \internal
-*/
-
-int TQSqlCursor::applyPrepared( const TQString& q, bool tqinvalidate )
-{
- int ar = 0;
- TQSqlQuery* sql = 0;
-
- if ( tqinvalidate ) {
- sql = (TQSqlQuery*)this;
- d->lastAt = TQSql::BeforeFirst;
- } else {
- sql = d->query();
- }
- if ( !sql )
- return 0;
-
- if ( tqinvalidate || sql->lastQuery() != q ) {
- if ( !sql->prepare( q ) )
- return 0;
- }
-
- int cnt = 0;
- int fieldCount = (int)count();
- for ( int j = 0; j < fieldCount; ++j ) {
- const TQSqlField* f = d->editBuffer.field( j );
- if ( d->editBuffer.isGenerated( j ) ) {
- sql->bindValue( cnt, f->value() );
- cnt++;
- }
- }
- if ( sql->exec() ) {
- ar = sql->numRowsAffected();
- }
- return ar;
-}
-
-/*! \reimp
-
- Executes the SQL query \a sql. Returns TRUE of the cursor is
- active, otherwise returns FALSE.
-
-*/
-bool TQSqlCursor::exec( const TQString & sql )
-{
- d->lastAt = TQSql::BeforeFirst;
- TQSqlQuery::exec( sql );
- return isActive();
-}
-
-/*!
- Protected virtual function which is called whenever a field needs
- to be calculated. If calculated fields are being used, derived
- classes must reimplement this function and return the appropriate
- value for field \a name. The default implementation returns an
- invalid TQVariant.
-
- \sa setCalculated()
-*/
-
-TQVariant TQSqlCursor::calculateField( const TQString& )
-{
- return TQVariant();
-}
-
-/*! \internal
- Ensure fieldlist is synced with query.
-
-*/
-
-static TQString qTrim( const TQString& s )
-{
- TQString result = s;
- int end = result.length() - 1;
- while ( end >= 0 && result[end].isSpace() ) // skip white space from end
- end--;
- result.truncate( end + 1 );
- return result;
-}
-
-/*! \internal
- */
-
-void TQSqlCursor::sync()
-{
- if ( isActive() && isValid() && d->lastAt != at() ) {
- d->lastAt = at();
- uint i = 0;
- uint j = 0;
- bool haveCalculatedFields = FALSE;
- for ( ; i < count(); ++i ) {
- if ( !haveCalculatedFields && d->infoBuffer[i].isCalculated() ) {
- haveCalculatedFields = TRUE;
- }
- if ( TQSqlRecord::isGenerated( i ) ) {
- TQVariant v = TQSqlQuery::value( j );
- if ( ( v.type() == TQVariant::String || v.type() == TQVariant::CString ) &&
- d->infoBuffer[ i ].isTrim() ) {
- v = qTrim( v.toString() );
- }
- TQSqlRecord::setValue( i, v );
- if ( TQSqlQuery::isNull( j ) )
- TQSqlRecord::field( i )->setNull();
- j++;
- }
- }
- if ( haveCalculatedFields ) {
- for ( i = 0; i < count(); ++i ) {
- if ( d->infoBuffer[i].isCalculated() )
- TQSqlRecord::setValue( i, calculateField( fieldName( i ) ) );
- }
- }
- }
-}
-
-/*! \reimp
-
-*/
-
-void TQSqlCursor::afterSeek()
-{
- sync();
-}
-
-/*!
- \reimp
-
- Returns the value of field number \a i.
-*/
-
-TQVariant TQSqlCursor::value( int i ) const
-{
- return TQSqlRecord::value( i );
-}
-
-/*!
- \reimp
-
- Returns the value of the field called \a name.
-*/
-
-TQVariant TQSqlCursor::value( const TQString& name ) const
-{
- return TQSqlRecord::value( name );
-}
-
-/*! \internal
- cursors should be filled with TQSqlFieldInfos...
-*/
-void TQSqlCursor::append( const TQSqlField& field )
-{
- append( TQSqlFieldInfo( field ) );
-}
-/*! \internal
- cursors should be filled with TQSqlFieldInfos...
-*/
-void TQSqlCursor::insert( int pos, const TQSqlField& field )
-{
- insert( pos, TQSqlFieldInfo( field ) );
-}
-
-/*!
- Returns TRUE if the field \a i is NULL or if there is no field at
- position \a i; otherwise returns FALSE.
-
- This is the same as calling TQSqlRecord::isNull( \a i )
-*/
-bool TQSqlCursor::isNull( int i ) const
-{
- return TQSqlRecord::isNull( i );
-}
-/*!
- \overload
-
- Returns TRUE if the field called \a name is NULL or if there is no
- field called \a name; otherwise returns FALSE.
-
- This is the same as calling TQSqlRecord::isNull( \a name )
-*/
-bool TQSqlCursor::isNull( const TQString& name ) const
-{
- return TQSqlRecord::isNull( name );
-}
-
-/*! \reimp */
-void TQSqlCursor::setValue( int i, const TQVariant& val )
-{
-#ifdef TQT_DEBUG
- qDebug("TQSqlCursor::setValue(): This will not affect actual database values. Use primeInsert(), primeUpdate() or primeDelete().");
-#endif
- TQSqlRecord::setValue( i, val );
-}
-
-/*! \reimp */
-void TQSqlCursor::setValue( const TQString& name, const TQVariant& val )
-{
-#ifdef TQT_DEBUG
- qDebug("TQSqlCursor::setValue(): This will not affect actual database values. Use primeInsert(), primeUpdate() or primeDelete().");
-#endif
- TQSqlRecord::setValue( name, val );
-}
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlcursor.h b/tqtinterface/qt4/src/sql/tqsqlcursor.h
deleted file mode 100644
index 9617b12..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlcursor.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlCursor class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLCURSOR_H
-#define TQSQLCURSOR_H
-
-#ifndef TQT_H
-#include "tqsqlrecord.h"
-#include "tqstringlist.h"
-#include "tqsqlquery.h"
-#include "tqsqlindex.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlDatabase;
-class TQSqlCursorPrivate;
-
-class TQM_EXPORT_SQL TQSqlCursor : public TQSqlRecord, public TQSqlQuery
-{
-public:
- TQSqlCursor( const TQString & name = TQString::null, bool autopopulate = TRUE, TQSqlDatabase* db = 0 );
- TQSqlCursor( const TQSqlCursor & other );
- TQSqlCursor& operator=( const TQSqlCursor& other );
- ~TQSqlCursor();
-
- enum Mode {
- ReadOnly = 0,
- Insert = 1,
- Update = 2,
- Delete = 4,
- Writable = 7
- };
-
- TQVariant value( int i ) const;
- TQVariant value( const TQString& name ) const;
- void setValue( int i, const TQVariant& val );
- void setValue( const TQString& name, const TQVariant& val );
- virtual TQSqlIndex primaryIndex( bool prime = TRUE ) const;
- virtual TQSqlIndex index( const TQStringList& fieldNames ) const;
- TQSqlIndex index( const TQString& fieldName ) const;
- TQSqlIndex index( const char* fieldName ) const;
- virtual void setPrimaryIndex( const TQSqlIndex& idx );
-
- virtual void append( const TQSqlFieldInfo& fieldInfo );
- virtual void insert( int pos, const TQSqlFieldInfo& fieldInfo );
- void remove( int pos );
- void clear();
- void setGenerated( const TQString& name, bool generated );
- void setGenerated( int i, bool generated );
-
- virtual TQSqlRecord* editBuffer( bool copy = FALSE );
- virtual TQSqlRecord* primeInsert();
- virtual TQSqlRecord* primeUpdate();
- virtual TQSqlRecord* primeDelete();
- virtual int insert( bool tqinvalidate = TRUE );
- virtual int update( bool tqinvalidate = TRUE );
- virtual int del( bool tqinvalidate = TRUE );
-
- virtual void setMode( int flags );
- int mode() const;
- virtual void setCalculated( const TQString& name, bool calculated );
- bool isCalculated( const TQString& name ) const;
- virtual void setTrimmed( const TQString& name, bool trim );
- bool isTrimmed( const TQString& name ) const;
-
- bool isReadOnly() const;
- bool canInsert() const;
- bool canUpdate() const;
- bool canDelete() const;
-
- bool select();
- bool select( const TQSqlIndex& sort );
- bool select( const TQSqlIndex & filter, const TQSqlIndex & sort );
- virtual bool select( const TQString & filter, const TQSqlIndex & sort = TQSqlIndex() );
-
- virtual void setSort( const TQSqlIndex& sort );
- TQSqlIndex sort() const;
- virtual void setFilter( const TQString& filter );
- TQString filter() const;
- virtual void setName( const TQString& name, bool autopopulate = TRUE );
- TQString name() const;
- TQString toString( const TQString& prefix = TQString::null,
- const TQString& sep = "," ) const;
- bool isNull( int i ) const;
- bool isNull( const TQString& name ) const;
-
-protected:
- void afterSeek();
- bool exec( const TQString & sql );
-
- virtual TQVariant calculateField( const TQString& name );
- virtual int update( const TQString & filter, bool tqinvalidate = TRUE );
- virtual int del( const TQString & filter, bool tqinvalidate = TRUE );
-
- virtual TQString toString( const TQString& prefix, TQSqlField* field, const TQString& fieldSep ) const;
- virtual TQString toString( TQSqlRecord* rec, const TQString& prefix, const TQString& fieldSep,
- const TQString& sep ) const;
- virtual TQString toString( const TQSqlIndex& i, TQSqlRecord* rec, const TQString& prefix,
- const TQString& fieldSep, const TQString& sep ) const;
-
-private:
- void sync();
- int apply( const TQString& q, bool tqinvalidate );
- int applyPrepared( const TQString& q, bool tqinvalidate );
- TQSqlRecord& operator=( const TQSqlRecord & list );
- void append( const TQSqlField& field );
- void insert( int pos, const TQSqlField& field );
-
- TQSqlCursorPrivate* d;
-};
-
-
-
-
-#endif // TQT_NO_SQL
-#endif
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
diff --git a/tqtinterface/qt4/src/sql/tqsqldatabase.h b/tqtinterface/qt4/src/sql/tqsqldatabase.h
deleted file mode 100644
index 24af2b8..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldatabase.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlDatabase class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLDATABASE_H
-#define TQSQLDATABASE_H
-
-#ifndef TQT_H
-#include "tqobject.h"
-#include "tqstring.h"
-#include "tqsqlquery.h"
-#include "tqstringlist.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlError;
-class TQSqlDriver;
-class TQSqlIndex;
-class TQSqlRecord;
-class TQSqlRecordInfo;
-class TQSqlDatabasePrivate;
-
-class TQM_EXPORT_SQL TQSqlDriverCreatorBase
-{
-public:
- virtual TQSqlDriver* createObject() = 0;
-};
-
-template <class type>
-class TQM_EXPORT_SQL TQSqlDriverCreator: public TQSqlDriverCreatorBase
-{
-public:
- TQSqlDriver* createObject() { return new type; }
-};
-
-class TQM_EXPORT_SQL TQSqlDatabase : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
- Q_PROPERTY( TQString databaseName READ databaseName WRITE setDatabaseName )
- Q_PROPERTY( TQString userName READ userName WRITE setUserName )
- Q_PROPERTY( TQString password READ password WRITE setPassword )
- Q_PROPERTY( TQString hostName READ hostName WRITE setHostName )
- Q_PROPERTY( int port READ port WRITE setPort )
- Q_PROPERTY( TQString connectOptions READ connectOptions WRITE setConnectOptions )
-
-public:
- ~TQSqlDatabase();
-
- bool open();
- bool open( const TQString& user, const TQString& password );
- void close();
- bool isOpen() const;
- bool isOpenError() const;
- TQStringList tables() const;
- TQStringList tables( TQSql::TableType type ) const;
- TQSqlIndex primaryIndex( const TQString& tablename ) const;
- TQSqlRecord record( const TQString& tablename ) const;
- TQSqlRecord record( const TQSqlQuery& query ) const;
- TQSqlRecordInfo recordInfo( const TQString& tablename ) const;
- TQSqlRecordInfo recordInfo( const TQSqlQuery& query ) const;
- TQSqlQuery exec( const TQString& query = TQString::null ) const;
- TQSqlError lastError() const;
-
- bool transaction();
- bool commit();
- bool rollback();
-
- virtual void setDatabaseName( const TQString& name );
- virtual void setUserName( const TQString& name );
- virtual void setPassword( const TQString& password );
- virtual void setHostName( const TQString& host );
- virtual void setPort( int p );
- void setConnectOptions( const TQString& options = TQString::null );
- TQString databaseName() const;
- TQString userName() const;
- TQString password() const;
- TQString hostName() const;
- TQString driverName() const;
- int port() const;
- TQString connectOptions() const;
-
- TQSqlDriver* driver() const;
-
- // TQMOC_SKIP_BEGIN
- TQT_STATIC_CONST char * const defaultConnection;
- // TQMOC_SKIP_END
-
- static TQSqlDatabase* addDatabase( const TQString& type, const TQString& connectionName = defaultConnection );
- static TQSqlDatabase* addDatabase( TQSqlDriver* driver, const TQString& connectionName = defaultConnection );
- static TQSqlDatabase* database( const TQString& connectionName = defaultConnection, bool open = TRUE );
- static void removeDatabase( const TQString& connectionName );
- static void removeDatabase( TQSqlDatabase* db );
- static bool contains( const TQString& connectionName = defaultConnection );
- static TQStringList drivers();
- static void registerSqlDriver( const TQString& name, const TQSqlDriverCreatorBase* creator ); // ### 4.0: creator should not be const
- static bool isDriverAvailable( const TQString& name );
-
-protected:
- TQSqlDatabase( const TQString& type, const TQString& name, TQObject * parent=0, const char * objname=0 );
- TQSqlDatabase( TQSqlDriver* driver, TQObject * parent=0, const char * objname=0 );
-private:
- void init( const TQString& type, const TQString& name );
- TQSqlDatabasePrivate* d;
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQSqlDatabase( const TQSqlDatabase & );
- TQSqlDatabase &operator=( const TQSqlDatabase & );
-#endif
-
-};
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqldriver.cpp b/tqtinterface/qt4/src/sql/tqsqldriver.cpp
deleted file mode 100644
index 8ce3fab..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldriver.cpp
+++ /dev/null
@@ -1,509 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlDriver class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqldriver.h"
-
-#ifndef TQT_NO_SQL
-
-#include "tqdatetime.h"
-#include "tqsqlextension_p.h"
-
-// database states
-#define DBState_Open 0x0001
-#define DBState_OpenError 0x0002
-
-// ### This needs to go in 4.0!
-TQPtrDict<TQSqlDriverExtension> *qSqlDriverExtDict();
-TQPtrDict<TQSqlOpenExtension> *qSqlOpenExtDict();
-
-/*!
- \class TQSqlDriver tqsqldriver.h
- \brief The TQSqlDriver class is an abstract base class for accessing
- SQL databases.
-
- \ingroup database
- \module sql
-
- This class should not be used directly. Use TQSqlDatabase instead.
-*/
-
-/*!
- Default constructor. Creates a new driver with parent \a parent,
- called \a name.
-
-*/
-
-TQSqlDriver::TQSqlDriver( TQObject * parent, const char * name )
-: TQObject(parent, name),
- dbState(0),
- error()
-{
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlDriver::~TQSqlDriver()
-{
-}
-
-/*!
- \fn bool TQSqlDriver::open( const TQString& db, const TQString& user,
- const TQString& password, const TQString& host, int port )
-
- Derived classes must reimplement this abstract virtual function in
- order to open a database connection on database \a db, using user
- name \a user, password \a password, host \a host and port \a port.
-
- The function \e must return TRUE on success and FALSE on failure.
-
- \sa setOpen()
-
-*/
-
-/*!
- \fn bool TQSqlDriver::close()
-
- Derived classes must reimplement this abstract virtual function in
- order to close the database connection. Return TRUE on success,
- FALSE on failure.
-
- \sa setOpen()
-
-*/
-
-/*!
- \fn TQSqlQuery TQSqlDriver::createQuery() const
-
- Creates an empty SQL result on the database. Derived classes must
- reimplement this function and return a TQSqlQuery object
- appropriate for their database to the caller.
-
-*/
-
-//void TQSqlDriver::destroyResult( TQSqlResult* r ) const
-//{
-// if ( r )
-// delete r;
-//}
-
-/*!
- Returns TRUE if the database connection is open; otherwise returns
- FALSE.
-*/
-
-bool TQSqlDriver::isOpen() const
-{
- if ( !qSqlDriverExtDict()->isEmpty() ) {
- TQSqlDriverExtension *ext = qSqlDriverExtDict()->find( (TQSqlDriver *) this );
- if ( ext )
- return ext->isOpen();
- }
-
- return ((dbState & DBState_Open) == DBState_Open);
-}
-
-/*!
- Returns TRUE if the there was an error opening the database
- connection; otherwise returns FALSE.
-*/
-
-bool TQSqlDriver::isOpenError() const
-{
- return ((dbState & DBState_OpenError) == DBState_OpenError);
-}
-
-/*!
- \enum TQSqlDriver::DriverFeature
-
- This enum contains a list of features a driver may support. Use
- hasFeature() to query whether a feature is supported or not.
-
- \value Transactions whether the driver supports SQL transactions
- \value QuerySize whether the database is capable of reporting the size
- of a query. Note that some databases do not support returning the size
- (i.e. number of rows returned) of a query, in which case
- TQSqlQuery::size() will return -1
- \value BLOB whether the driver supports Binary Large Object fields
- \value Unicode whether the driver supports Unicode strings if the
- database server does
- \value PreparedQueries whether the driver supports prepared query execution
- \value NamedPlaceholders whether the driver supports usage of named placeholders
- \value PositionalPlaceholders whether the driver supports usage of positional placeholders
-
- More information about supported features can be found in the
- \link sql-driver.html TQt SQL driver\endlink documentation.
-
- \sa hasFeature()
-*/
-
-/*!
- \fn bool TQSqlDriver::hasFeature( DriverFeature f ) const
-
- Returns TRUE if the driver supports feature \a f; otherwise
- returns FALSE.
-
- Note that some databases need to be open() before this can be
- determined.
-
- \sa DriverFeature
-*/
-
-/*!
- Protected function which sets the open state of the database to \a
- o. Derived classes can use this function to report the status of
- open().
-
- \sa open(), setOpenError()
-*/
-
-void TQSqlDriver::setOpen( bool o )
-{
- if ( o )
- dbState |= DBState_Open;
- else
- dbState &= ~DBState_Open;
-}
-
-/*!
- Protected function which sets the open error state of the database
- to \a e. Derived classes can use this function to report the
- status of open(). Note that if \a e is TRUE the open state of the
- database is set to closed (i.e. isOpen() returns FALSE).
-
- \sa open(), setOpenError()
-*/
-
-void TQSqlDriver::setOpenError( bool e )
-{
- if ( e ) {
- dbState |= DBState_OpenError;
- dbState &= ~DBState_Open;
- }
- else
- dbState &= ~DBState_OpenError;
-}
-
-/*!
- Protected function which derived classes can reimplement to begin
- a transaction. If successful, return TRUE, otherwise return FALSE.
- The default implementation returns FALSE.
-
- \sa commitTransaction(), rollbackTransaction()
-*/
-
-bool TQSqlDriver::beginTransaction()
-{
- return FALSE;
-}
-
-/*!
- Protected function which derived classes can reimplement to commit
- a transaction. If successful, return TRUE, otherwise return FALSE.
- The default implementation returns FALSE.
-
- \sa beginTransaction(), rollbackTransaction()
-*/
-
-bool TQSqlDriver::commitTransaction()
-{
- return FALSE;
-}
-
-/*!
- Protected function which derived classes can reimplement to
- rollback a transaction. If successful, return TRUE, otherwise
- return FALSE. The default implementation returns FALSE.
-
- \sa beginTransaction(), commitTransaction()
-*/
-
-bool TQSqlDriver::rollbackTransaction()
-{
- return FALSE;
-}
-
-/*!
- Protected function which allows derived classes to set the value
- of the last error, \a e, that occurred on the database.
-
- \sa lastError()
-*/
-
-void TQSqlDriver::setLastError( const TQSqlError& e )
-{
- error = e;
-}
-
-/*!
- Returns a TQSqlError object which contains information about the
- last error that occurred on the database.
-*/
-
-TQSqlError TQSqlDriver::lastError() const
-{
- return error;
-}
-
-/*!
- Returns a list of tables in the database. The default
- implementation returns an empty list.
-
- The \a tableType argument describes what types of tables
- should be returned. Due to binary compatibility, the string
- contains the value of the enum TQSql::TableTypes as text.
- An empty string should be treated as TQSql::Tables for
- downward compatibility.
-
- \sa TQSql::TableType
-*/
-
-TQStringList TQSqlDriver::tables( const TQString& ) const
-{
- return TQStringList();
-}
-
-/*!
- Returns the primary index for table \a tableName. Returns an empty
- TQSqlIndex if the table doesn't have a primary index. The default
- implementation returns an empty index.
-*/
-
-TQSqlIndex TQSqlDriver::primaryIndex( const TQString& ) const
-{
- return TQSqlIndex();
-}
-
-
-/*!
- Returns a TQSqlRecord populated with the names of the fields in
- table \a tableName. If no such table exists, an empty record is
- returned. The default implementation returns an empty record.
-*/
-
-TQSqlRecord TQSqlDriver::record( const TQString& ) const
-{
- return TQSqlRecord();
-}
-
-/*!
- \overload
-
- Returns a TQSqlRecord populated with the names of the fields in the
- SQL \a query. The default implementation returns an empty record.
-*/
-
-TQSqlRecord TQSqlDriver::record( const TQSqlQuery& ) const
-{
- return TQSqlRecord();
-}
-
-/*!
- Returns a TQSqlRecordInfo object with meta data about the table \a
- tablename.
-*/
-TQSqlRecordInfo TQSqlDriver::recordInfo( const TQString& tablename ) const
-{
- return TQSqlRecordInfo( record( 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.
-*/
-TQSqlRecordInfo TQSqlDriver::recordInfo( const TQSqlQuery& query ) const
-{
- return TQSqlRecordInfo( record( query ) );
-}
-
-
-/*!
- Returns a string representation of the NULL value for the
- database. This is used, for example, when constructing INSERT and
- UPDATE statements. The default implementation returns the string
- "NULL".
-*/
-
-TQString TQSqlDriver::nullText() const
-{
- return "NULL";
-}
-
-/*!
- Returns a string representation of the \a field value for the
- database. This is used, for example, when constructing INSERT and
- UPDATE statements.
-
- The default implementation returns the value formatted as a string
- according to the following rules:
-
- \list
-
- \i If \a field is NULL, nullText() is returned.
-
- \i If \a field is character data, the value is returned enclosed
- in single quotation marks, which is appropriate for many SQL
- databases. Any embedded single-quote characters are escaped
- (replaced with two single-quote characters). If \a trimStrings is
- TRUE (the default is FALSE), all trailing whitespace is trimmed
- from the field.
-
- \i If \a field is date/time data, the value is formatted in ISO
- format and enclosed in single quotation marks. If the date/time
- data is invalid, nullText() is returned.
-
- \i If \a field is bytearray data, and the driver can edit binary
- fields, the value is formatted as a hexadecimal string.
-
- \i For any other field type toString() will be called on its value
- and the result returned.
-
- \endlist
-
- \sa TQVariant::toString().
-
-*/
-TQString TQSqlDriver::formatValue( const TQSqlField* field, bool trimStrings ) const
-{
- TQString r;
- if ( field->isNull() )
- r = nullText();
- else {
- switch ( field->type() ) {
- case TQVariant::Int:
- case TQVariant::UInt:
- if ( field->value().type() == TQVariant::Bool )
- r = field->value().toBool() ? "1" : "0";
- else
- r = field->value().toString();
- break;
- case TQVariant::Date:
- if ( field->value().toDate().isValid() )
- r = "'" + field->value().toDate().toString( Qt::ISODate ) + "'";
- else
- r = nullText();
- break;
- case TQVariant::Time:
- if ( field->value().toTime().isValid() )
- r = "'" + field->value().toTime().toString( Qt::ISODate ) + "'";
- else
- r = nullText();
- break;
- case TQVariant::DateTime:
- if ( field->value().toDateTime().isValid() )
- r = "'" +
- field->value().toDateTime().toString( Qt::ISODate ) + "'";
- else
- r = nullText();
- break;
- case TQVariant::String:
- case TQVariant::CString: {
- TQString result = field->value().toString();
- if ( trimStrings ) {
- int end = result.length() - 1;
- while ( end && result[end].isSpace() ) /* skip white space from end */
- end--;
- result.truncate( end );
- }
- /* escape the "'" character */
- result.replace( TQChar( '\'' ), "''" );
- r = "'" + result + "'";
- break;
- }
- case TQVariant::Bool:
- if ( field->value().toBool() )
- r = "1";
- else
- r = "0";
- break;
- case TQVariant::ByteArray : {
- if ( hasFeature( BLOB ) ) {
- TQByteArray ba = TQT_TQBYTEARRAY_OBJECT(field->value().toByteArray());
- TQString res;
- static const char hexchars[] = "0123456789abcdef";
- for ( uint i = 0; i < ba.size(); ++i ) {
- uchar s = (uchar) ba[(int)i];
- res += hexchars[s >> 4];
- res += hexchars[s & 0x0f];
- }
- r = "'" + res + "'";
- break;
- }
- }
- default:
- r = field->value().toString();
- break;
- }
- }
- return r;
-}
-
-/*!
- \overload
-
- Open a database connection on database \a db, using user name \a
- user, password \a password, host \a host, port \a port and
- connection options \a connOpts.
-
- Returns TRUE on success and FALSE on failure.
-
- \sa setOpen()
-*/
-bool TQSqlDriver::open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts )
-{
- if ( !qSqlOpenExtDict()->isEmpty() ) {
- TQSqlOpenExtension *ext = qSqlOpenExtDict()->find( (TQSqlDriver *) this );
- if ( ext )
- return ext->open( db, user, password, host, port, connOpts );
- }
- return open( db, user, password, host, port );
-}
-
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqldriver.h b/tqtinterface/qt4/src/sql/tqsqldriver.h
deleted file mode 100644
index 70a60f1..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldriver.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlDriver class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLDRIVER_H
-#define TQSQLDRIVER_H
-
-#ifndef TQT_H
-#include "tqobject.h"
-#include "tqptrdict.h"
-#include "tqstring.h"
-#include "tqsqlerror.h"
-#include "tqsqlquery.h"
-#include "tqsqlfield.h"
-#include "tqsqlindex.h"
-#include "tqstringlist.h"
-#include "tqmap.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlDriverExtension;
-
-class TQSqlDatabase;
-
-class TQM_EXPORT_SQL TQSqlDriver : public TQObject
-{
- friend class TQSqlDatabase;
- Q_OBJECT
- TQ_OBJECT
-public:
- enum DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries,
- NamedPlaceholders, PositionalPlaceholders };
-
- TQSqlDriver( TQObject * parent=0, const char * name=0 );
- ~TQSqlDriver();
- bool isOpen() const;
- bool isOpenError() const;
-
- virtual bool beginTransaction();
- virtual bool commitTransaction();
- virtual bool rollbackTransaction();
- virtual TQStringList tables( const TQString& tableType ) const;
- virtual TQSqlIndex primaryIndex( const TQString& tableName ) const;
- virtual TQSqlRecord record( const TQString& tableName ) const;
- virtual TQSqlRecord record( const TQSqlQuery& query ) const;
- virtual TQSqlRecordInfo recordInfo( const TQString& tablename ) const;
- virtual TQSqlRecordInfo recordInfo( const TQSqlQuery& query ) const;
- virtual TQString nullText() const;
- virtual TQString formatValue( const TQSqlField* field, bool trimStrings = FALSE ) const;
- TQSqlError lastError() const;
-
- virtual bool hasFeature( DriverFeature f ) const = 0;
- virtual bool open( const TQString & db,
- const TQString & user = TQString::null,
- const TQString & password = TQString::null,
- const TQString & host = TQString::null,
- int port = -1 ) = 0;
- virtual void close() = 0;
- virtual TQSqlQuery createQuery() const = 0;
-
- // ### remove for 4.0
- bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts );
-protected:
- virtual void setOpen( bool o );
- virtual void setOpenError( bool e );
- virtual void setLastError( const TQSqlError& e );
-private:
- // ### This class needs a d-pointer in 4.0.
- int dbState;
- TQSqlError error;
-#if defined(TQ_DISABLE_COPY)
- TQSqlDriver( const TQSqlDriver & );
- TQSqlDriver &operator=( const TQSqlDriver & );
-#endif
-};
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqldriverinterface_p.h b/tqtinterface/qt4/src/sql/tqsqldriverinterface_p.h
deleted file mode 100644
index 661a9b1..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldriverinterface_p.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlDriverInterface 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.
-**
-**********************************************************************/
-
-#ifndef TQSQLDRIVERINTERFACE_H
-#define TQSQLDRIVERINTERFACE_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the TQt API. This header file may
-// change from version to version without notice, or even be
-// removed.
-//
-// We mean it.
-//
-//
-
-#ifndef TQT_H
-#include <private/tqcom_p.h>
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-#ifndef TQT_NO_COMPONENT
-
-// {EDDD5AD5-DF3C-400c-A711-163B72FE5F61}
-#ifndef IID_TQSqlDriverFactory
-#define IID_TQSqlDriverFactory TQUuid(0xeddd5ad5, 0xdf3c, 0x400c, 0xa7, 0x11, 0x16, 0x3b, 0x72, 0xfe, 0x5f, 0x61)
-#endif
-
-class TQSqlDriver;
-
-struct TQM_EXPORT_SQL TQSqlDriverFactoryInterface : public TQFeatureListInterface
-{
- virtual TQSqlDriver* create( const TQString& name ) = 0;
-};
-
-#endif //TQT_NO_COMPONENT
-#endif // TQT_NO_SQL
-
-#endif // TQSQLDRIVERINTERFACE_P_H
diff --git a/tqtinterface/qt4/src/sql/tqsqldriverplugin.cpp b/tqtinterface/qt4/src/sql/tqsqldriverplugin.cpp
deleted file mode 100644
index c97dec5..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldriverplugin.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlDriverPlugin class
-**
-** Created : 2001-09-20
-**
-** Copyright (C) 2001-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 "tqsqldriverplugin.h"
-
-#ifndef TQT_NO_SQL
-#ifndef TQT_NO_COMPONENT
-
-#include "tqsqldriverinterface_p.h"
-
-/*!
- \class TQSqlDriverPlugin tqsqldriverplugin.h
- \brief The TQSqlDriverPlugin class provides an abstract base for custom TQSqlDriver plugins.
-
- \ingroup plugins
- \mainclass
-
- The SQL driver plugin is a simple plugin interface that makes it
- easy to create your own SQL driver plugins that can be loaded
- dynamically by TQt.
-
- Writing a SQL plugin is achieved by subclassing this base class,
- reimplementing the pure virtual functions keys() and create(), and
- exporting the class with the \c TQ_EXPORT_PLUGIN macro. See the SQL
- plugins that come with TQt for example implementations (in the
- \c{plugins/src/sqldrivers} subdirectory of the source
- distribution). Read the \link plugins-howto.html plugins
- documentation\endlink for more information on plugins.
-*/
-
-/*!
- \fn TQStringList TQSqlDriverPlugin::keys() const
-
- Returns the list of drivers (keys) this plugin supports.
-
- These keys are usually the class names of the custom drivers that
- are implemented in the plugin.
-
- \sa create()
-*/
-
-/*!
- \fn TQSqlDriver* TQSqlDriverPlugin::create( const TQString& key )
-
- Creates and returns a TQSqlDriver object for the driver key \a key.
- The driver key is usually the class name of the required driver.
-
- \sa keys()
-*/
-
-class TQSqlDriverPluginPrivate : public TQSqlDriverFactoryInterface
-{
-public:
- TQSqlDriverPluginPrivate( TQSqlDriverPlugin *p )
- : plugin( p )
- {
- }
- virtual ~TQSqlDriverPluginPrivate();
-
- TQRESULT queryInterface( const TQUuid &iid, TQUnknownInterface **iface );
- TQ_REFCOUNT;
-
- TQStringList featureList() const;
- TQSqlDriver *create( const TQString &key );
-
-private:
- TQSqlDriverPlugin *plugin;
-};
-
-TQSqlDriverPluginPrivate::~TQSqlDriverPluginPrivate()
-{
- delete plugin;
-}
-
-TQRESULT TQSqlDriverPluginPrivate::queryInterface( const TQUuid &iid, TQUnknownInterface **iface )
-{
- *iface = 0;
-
- if ( iid == IID_TQUnknown )
- *iface = this;
- else if ( iid == IID_TQFeatureList )
- *iface = this;
- else if ( iid == IID_TQSqlDriverFactory )
- *iface = this;
- else
- return TQE_NOINTERFACE;
-
- (*iface)->addRef();
- return TQS_OK;
-}
-
-TQStringList TQSqlDriverPluginPrivate::featureList() const
-{
- return plugin->keys();
-}
-
-TQSqlDriver *TQSqlDriverPluginPrivate::create( const TQString &key )
-{
- return plugin->create( key );
-}
-
-/*!
- Constructs a SQL driver plugin. This is invoked automatically by
- the \c TQ_EXPORT_PLUGIN macro.
-*/
-
-TQSqlDriverPlugin::TQSqlDriverPlugin()
- : TQGPlugin( d = new TQSqlDriverPluginPrivate( this ) )
-{
-}
-
-/*!
- Destroys the SQL driver plugin.
-
- You never have to call this explicitly. TQt destroys a plugin
- automatically when it is no longer used.
-*/
-TQSqlDriverPlugin::~TQSqlDriverPlugin()
-{
- // don't delete d, as this is deleted by d
-}
-
-#endif // TQT_NO_COMPONENT
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqldriverplugin.h b/tqtinterface/qt4/src/sql/tqsqldriverplugin.h
deleted file mode 100644
index 4311083..0000000
--- a/tqtinterface/qt4/src/sql/tqsqldriverplugin.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlDriverPlugin class
-**
-** Created : 2001-09-20
-**
-** Copyright (C) 2001-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLDRIVERPLUGIN_H
-#define TQSQLDRIVERPLUGIN_H
-
-#ifndef TQT_H
-#include "tqgplugin.h"
-#include "tqstringlist.h"
-#endif // TQT_H
-
-#ifndef TQT_NO_SQL
-#ifndef TQT_NO_COMPONENT
-
-class TQSqlDriver;
-class TQSqlDriverPluginPrivate;
-
-class TQ_EXPORT TQSqlDriverPlugin : public TQGPlugin
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- TQSqlDriverPlugin();
- ~TQSqlDriverPlugin();
-
- virtual TQStringList keys() const = 0;
- virtual TQSqlDriver *create( const TQString &key ) = 0;
-
-private:
- TQSqlDriverPluginPrivate *d;
-};
-
-#endif // TQT_NO_COMPONENT
-#endif // TQT_NO_SQL
-
-#endif // TQSQLDRIVERPLUGIN_H
diff --git a/tqtinterface/qt4/src/sql/tqsqleditorfactory.cpp b/tqtinterface/qt4/src/sql/tqsqleditorfactory.cpp
deleted file mode 100644
index b7201bb..0000000
--- a/tqtinterface/qt4/src/sql/tqsqleditorfactory.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlEditorFactory class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqleditorfactory.h"
-
-#ifndef TQT_NO_STQL_EDIT_WIDGETS
-
-#include "tqsqlfield.h"
-#include "tqcleanuphandler.h"
-#include "tqlabel.h"
-#include "tqlineedit.h"
-#include "tqspinbox.h"
-#include "tqcombobox.h"
-#include "tqdatetimeedit.h"
-
-/*!
- \class TQSqlEditorFactory tqsqleditorfactory.h
- \brief The TQSqlEditorFactory class is used to create the editors
- used by TQDataTable and TQSqlForm.
-
- \ingroup database
- \module sql
-
- TQSqlEditorFactory is used by TQDataTable and TQSqlForm to
- automatically create appropriate editors for a given TQSqlField.
- For example if the field is a TQVariant::String a TQLineEdit would
- be the default editor, whereas a TQVariant::Int's default editor
- would be a TQSpinBox.
-
- If you want to create different editors for fields with the same
- data type, subclass TQSqlEditorFactory and reimplement the
- createEditor() function.
-
- \sa TQDataTable, TQSqlForm
-*/
-
-
-/*!
- Constructs a SQL editor factory with parent \a parent, called \a
- name.
-*/
-
-TQSqlEditorFactory::TQSqlEditorFactory ( TQObject * parent, const char * name )
- : TQEditorFactory( parent, name )
-{
-
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlEditorFactory::~TQSqlEditorFactory()
-{
-
-}
-
-static TQSqlEditorFactory * defaultfactory = 0;
-static TQCleanupHandler< TQSqlEditorFactory > qsql_cleanup_editor_factory;
-
-/*!
- Returns an instance of a default editor factory.
-*/
-
-TQSqlEditorFactory * TQSqlEditorFactory::defaultFactory()
-{
- if( defaultfactory == 0 ){
- defaultfactory = new TQSqlEditorFactory();
- qsql_cleanup_editor_factory.add( &defaultfactory );
- }
-
- return defaultfactory;
-}
-
-/*!
- Replaces the default editor factory with \a factory. All
- TQDataTable and TQSqlForm instantiations will use this new factory
- for creating field editors. \e{TQSqlEditorFactory takes ownership
- of \a factory, and destroys it when it is no longer needed.}
-*/
-
-void TQSqlEditorFactory::installDefaultFactory( TQSqlEditorFactory * factory )
-{
- if( factory == 0 ) return;
-
- if( defaultfactory != 0 ){
- qsql_cleanup_editor_factory.remove( &defaultfactory );
- delete defaultfactory;
- }
- defaultfactory = factory;
- qsql_cleanup_editor_factory.add( &defaultfactory );
-}
-
-/*!
- Creates and returns the appropriate editor widget for the TQVariant
- \a variant.
-
- The widget that is returned has the parent \a parent (which may be
- zero). If \a variant is invalid, 0 is returned.
-*/
-
-TQWidget * TQSqlEditorFactory::createEditor( TQWidget * parent,
- const TQVariant & variant )
-{
- return TQEditorFactory::createEditor( parent, variant );
-}
-
-/*!
- \overload
-
- Creates and returns the appropriate editor for the TQSqlField \a
- field.
-*/
-
-TQWidget * TQSqlEditorFactory::createEditor( TQWidget * parent,
- const TQSqlField * field )
-{
- if ( !field ) {
- return 0;
- }
-
- TQWidget * w = 0;
- switch( field->type() ){
- case TQVariant::Invalid:
- w = 0;
- break;
- case TQVariant::Bool:
- w = new TQComboBox( parent, "qt_editor_bool" );
- ((TQComboBox *) w)->insertItem( "False" );
- ((TQComboBox *) w)->insertItem( "True" );
- break;
- case TQVariant::UInt:
- w = new TQSpinBox( 0, 2147483647, 1, parent, "qt_editor_spinbox" );
- break;
- case TQVariant::Int:
- w = new TQSpinBox( -2147483647, 2147483647, 1, parent, "qt_editor_int" );
- break;
- case TQVariant::LongLong:
- case TQVariant::ULongLong:
- case TQVariant::String:
- case TQVariant::CString:
- case TQVariant::Double:
- w = new TQLineEdit( parent, "qt_editor_double" );
- ((TQLineEdit*)w)->setFrame( FALSE );
- break;
- case TQVariant::Date:
- w = new TQDateEdit( parent, "qt_editor_date" );
- break;
- case TQVariant::Time:
- w = new TQTimeEdit( parent, "qt_editor_time" );
- break;
- case TQVariant::DateTime:
- w = new TQDateTimeEdit( parent, "qt_editor_datetime" );
- break;
-#ifndef TQT_NO_LABEL
- case TQVariant::Pixmap:
- w = new TQLabel( parent, "qt_editor_pixmap" );
- break;
-#endif
- case TQVariant::Palette:
- case TQVariant::ColorGroup:
- case TQVariant::Color:
- case TQVariant::Font:
- case TQVariant::Brush:
- case TQVariant::Bitmap:
- case TQVariant::Cursor:
- case TQVariant::Map:
- case TQVariant::StringList:
- case TQVariant::Rect:
- case TQVariant::Size:
- case TQVariant::IconSet:
- case TQVariant::Point:
- case TQVariant::PointArray:
- case TQVariant::Region:
- case TQVariant::SizePolicy:
- case TQVariant::ByteArray:
- default:
- w = new TQWidget( parent, "qt_editor_default" );
- break;
- }
- return w;
-}
-
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqleditorfactory.h b/tqtinterface/qt4/src/sql/tqsqleditorfactory.h
deleted file mode 100644
index 54a50b3..0000000
--- a/tqtinterface/qt4/src/sql/tqsqleditorfactory.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlEditorFactory class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSTQLEDITORFACTORY_H
-#define TQSTQLEDITORFACTORY_H
-
-#ifndef TQT_H
-#include "tqeditorfactory.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_STQL_EDIT_WIDGETS
-
-class TQSqlField;
-
-class TQM_EXPORT_SQL TQSqlEditorFactory : public TQEditorFactory
-{
-public:
- TQSqlEditorFactory ( TQObject * parent = 0, const char * name = 0 );
- ~TQSqlEditorFactory();
- virtual TQWidget * createEditor( TQWidget * parent, const TQVariant & variant );
- virtual TQWidget * createEditor( TQWidget * parent, const TQSqlField * field );
-
- static TQSqlEditorFactory * defaultFactory();
- static void installDefaultFactory( TQSqlEditorFactory * factory );
-
-private:
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQSqlEditorFactory( const TQSqlEditorFactory & );
- TQSqlEditorFactory &operator=( const TQSqlEditorFactory & );
-#endif
-};
-
-#endif // TQT_NO_SQL
-#endif // TQSTQLEDITORFACTORY_H
diff --git a/tqtinterface/qt4/src/sql/tqsqlerror.cpp b/tqtinterface/qt4/src/sql/tqsqlerror.cpp
deleted file mode 100644
index 55d9820..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlerror.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlError class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlerror.h"
-#include <tqmessagebox.h>
-
-#ifndef TQT_NO_SQL
-
-/*!
- \class TQSqlError tqsqlerror.h
- \brief The TQSqlError class provides SQL database error information.
-
- \ingroup database
- \module sql
-
- This class is used to report database-specific errors. An error
- description and (if appropriate) a database-specific error number
- can be obtained using this class.
-*/
-
-/*!
- \enum TQSqlError::Type
-
- This enum type describes the type of SQL error that occurred.
-
- \value None no error occurred
- \value Connection connection error
- \value Statement SQL statement syntax error
- \value Transaction transaction failed error
- \value Unknown unknown error
-*/
-
-/*!
- Constructs an error containing the driver error text \a
- driverText, the database-specific error text \a databaseText, the
- type \a type and the optional error number \a number.
-*/
-
-TQSqlError::TQSqlError( const TQString& driverText,
- const TQString& databaseText,
- int type,
- int number )
-: driverError(driverText),
- databaseError(databaseText),
- errorType(type),
- errorNumber(number)
-{
-}
-
-/*!
- Creates a copy of \a other.
-*/
-
-TQSqlError::TQSqlError( const TQSqlError& other )
-: driverError(other.driverError),
- databaseError(other.databaseError),
- errorType(other.errorType),
- errorNumber(other.errorNumber)
-{
-}
-
-/*!
- Sets the error equal to \a other.
-*/
-
-TQSqlError& TQSqlError::operator=( const TQSqlError& other )
-{
- driverError = other.driverError;
- databaseError = other.databaseError;
- errorType = other.errorType;
- errorNumber = other.errorNumber;
- return *this;
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlError::~TQSqlError()
-{
-}
-
-/*!
- Returns the text of the error as reported by the driver. This may
- contain database-specific descriptions.
-*/
-TQString TQSqlError::driverText() const
-{
- return driverError;
-}
-
-/*!
- Sets the driver error text to the value of \a driverText.
-*/
-
-void TQSqlError::setDriverText( const TQString& driverText )
-{
- driverError = driverText;
-}
-
-/*!
- Returns the text of the error as reported by the database. This
- may contain database-specific descriptions.
-*/
-
-TQString TQSqlError::databaseText() const
-{
- return databaseError;
-}
-
-/*!
- Sets the database error text to the value of \a databaseText.
-*/
-
-void TQSqlError::setDatabaseText( const TQString& databaseText )
-{
- databaseError = databaseText;
-}
-
-/*!
- Returns the error type, or -1 if the type cannot be determined.
-
- \sa TQSqlError::Type.
-*/
-
-int TQSqlError::type() const
-{
- return errorType;
-}
-
-/*!
- Sets the error type to the value of \a type.
-*/
-
-void TQSqlError::setType( int type )
-{
- errorType = type;
-}
-
-/*!
- Returns the database-specific error number, or -1 if it cannot be
- determined.
-*/
-
-int TQSqlError::number() const
-{
- return errorNumber;
-}
-
-/*!
- Sets the database-specific error number to \a number.
-*/
-
-void TQSqlError::setNumber( int number )
-{
- errorNumber = number;
-}
-
-/*!
- This is a convenience function that returns databaseText() and
- driverText() concatenated into a single string.
-
- \sa showMessage(), driverText(), databaseText()
-*/
-
-TQString TQSqlError::text() const
-{
- if ( databaseError.endsWith("\n") )
- return databaseError + driverError;
- else
- return databaseError + " " + driverError;
-}
-
-/*!
- \obsolete
-
- This is a convenience function that pops up a TQMessageBox
- containing the message returned by text(). An additional string
- can be passed in via the \a msg parameter, which will be
- concatenated with the text() message.
-
- \sa text(), driverText(), databaseText()
-*/
-void TQSqlError::showMessage( const TQString& msg ) const
-{
-#ifndef TQT_NO_MESSAGEBOX
- TQMessageBox::warning( NULL, "SQL Error", msg + text(),
- TQMessageBox::Ok, TQMessageBox::NoButton );
-#endif // TQT_NO_MESSAGEBOX
-}
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqlerror.h b/tqtinterface/qt4/src/sql/tqsqlerror.h
deleted file mode 100644
index 3970185..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlerror.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlError class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLERROR_H
-#define TQSQLERROR_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQM_EXPORT_SQL TQSqlError
-{
-public:
- enum Type {
- None,
- Connection,
- Statement,
- Transaction,
- Unknown
- };
- TQSqlError( const TQString& driverText = TQString::null,
- const TQString& databaseText = TQString::null,
- int type = TQSqlError::None,
- int number = -1 );
- TQSqlError( const TQSqlError& other );
- TQSqlError& operator=( const TQSqlError& other );
- virtual ~TQSqlError();
-
- TQString driverText() const;
- virtual void setDriverText( const TQString& driverText );
- TQString databaseText() const;
- virtual void setDatabaseText( const TQString& databaseText );
- int type() const;
- virtual void setType( int type );
- int number() const;
- virtual void setNumber( int number );
- TQString text() const;
- void showMessage( const TQString& msg = TQString::null ) const;
-
-private:
- TQString driverError;
- TQString databaseError;
- int errorType;
- int errorNumber;
-};
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlextension_p.cpp b/tqtinterface/qt4/src/sql/tqsqlextension_p.cpp
deleted file mode 100644
index 6f115f7..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlextension_p.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-**
-** Implementation of the TQSqlExtension class
-**
-** Created : 2002-06-03
-**
-** Copyright (C) 2005-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 "tqsqlextension_p.h"
-
-#ifndef TQT_NO_SQL
-TQSqlExtension::TQSqlExtension()
- : bindm( BindByPosition ), bindCount( 0 )
-{
-}
-
-TQSqlExtension::~TQSqlExtension()
-{
-}
-
-bool TQSqlExtension::prepare( const TQString& /*query*/ )
-{
- return FALSE;
-}
-
-bool TQSqlExtension::exec()
-{
- return FALSE;
-}
-
-void TQSqlExtension::bindValue( const TQString& placeholder, const TQVariant& val, TQSql::ParameterType tp )
-{
- bindm = BindByName;
- // if the index has already been set when doing emulated named
- // bindings - don't reset it
- if ( index.contains( (int)values.count() ) ) {
- index[ (int)values.count() ] = placeholder;
- }
- values[ placeholder ] = Param( val, tp );
-}
-
-void TQSqlExtension::bindValue( int pos, const TQVariant& val, TQSql::ParameterType tp )
-{
- bindm = BindByPosition;
- index[ pos ] = TQString::number( pos );
- TQString nm = TQString::number( pos );
- values[ nm ] = Param( val, tp );
-}
-
-void TQSqlExtension::addBindValue( const TQVariant& val, TQSql::ParameterType tp )
-{
- bindm = BindByPosition;
- bindValue( bindCount++, val, tp );
-}
-
-void TQSqlExtension::clearValues()
-{
- values.clear();
- bindCount = 0;
-}
-
-void TQSqlExtension::resetBindCount()
-{
- bindCount = 0;
-}
-
-void TQSqlExtension::clearIndex()
-{
- index.clear();
- holders.clear();
-}
-
-void TQSqlExtension::clear()
-{
- clearValues();
- clearIndex();
-}
-
-TQVariant TQSqlExtension::parameterValue( const TQString& holder )
-{
- return values[ holder ].value;
-}
-
-TQVariant TQSqlExtension::parameterValue( int pos )
-{
- return values[ index[ pos ] ].value;
-}
-
-TQVariant TQSqlExtension::boundValue( const TQString& holder ) const
-{
- return values[ holder ].value;
-}
-
-TQVariant TQSqlExtension::boundValue( int pos ) const
-{
- return values[ index[ pos ] ].value;
-}
-
-TQMap<TQString, TQVariant> TQSqlExtension::boundValues() const
-{
- TQMap<TQString, Param>::ConstIterator it;
- TQMap<TQString, TQVariant> m;
- if ( bindm == BindByName ) {
- for ( it = values.begin(); it != values.end(); ++it )
- m.insert( it.key(), it.data().value );
- } else {
- TQString key, tmp, fmt;
- fmt.sprintf( "%%0%dd", TQString::number( values.count()-1 ).length() );
- for ( it = values.begin(); it != values.end(); ++it ) {
- tmp.sprintf( fmt.ascii(), it.key().toInt() );
- m.insert( tmp, it.data().value );
- }
- }
- return m;
-}
-
-TQSqlExtension::BindMethod TQSqlExtension::bindMethod()
-{
- return bindm;
-}
-
-TQSqlDriverExtension::TQSqlDriverExtension()
-{
-}
-
-TQSqlDriverExtension::~TQSqlDriverExtension()
-{
-}
-
-TQSqlOpenExtension::TQSqlOpenExtension()
-{
-}
-
-TQSqlOpenExtension::~TQSqlOpenExtension()
-{
-}
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlextension_p.h b/tqtinterface/qt4/src/sql/tqsqlextension_p.h
deleted file mode 100644
index 419240d..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlextension_p.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/****************************************************************************
-**
-** Definition of the TQSqlExtension class
-**
-** Created : 2002-06-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLEXTENSION_P_H
-#define TQSQLEXTENSION_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the TQt API. It exists for the convenience
-// of other TQt classes. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-//
-
-#ifndef TQT_H
-#include "tqmap.h"
-#include "tqvaluevector.h"
-#include "tqstring.h"
-#include "tqvariant.h"
-#include "tqsql.h"
-#endif // TQT_H
-
-#ifndef TQT_NO_SQL
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#define TQM_TEMPLATE_EXTERN_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#define TQM_TEMPLATE_EXTERN_SQL TQ_TEMPLATE_EXTERN
-#endif
-
-struct Param {
- Param( const TQVariant& v = TQVariant(), TQSql::ParameterType t = TQSql::In ): value( v ), typ( t ) {}
- TQVariant value;
- TQSql::ParameterType typ;
- TQ_DUMMY_COMPARISON_OPERATOR(Param)
-};
-
-struct Holder {
- Holder( const TQString& hldr = TQString::null, int pos = -1 ): holderName( hldr ), holderPos( pos ) {}
- bool operator==( const Holder& h ) const { return h.holderPos == holderPos && h.holderName == holderName; }
- bool operator!=( const Holder& h ) const { return h.holderPos != holderPos || h.holderName != holderName; }
- TQString holderName;
- int holderPos;
-};
-
-#define TQ_DEFINED_TQSQLEXTENSION
-#include "tqwinexport.h"
-
-class TQM_EXPORT_SQL TQSqlExtension {
-public:
- TQSqlExtension();
- virtual ~TQSqlExtension();
- virtual bool prepare( const TQString& query );
- virtual bool exec();
- virtual void bindValue( const TQString& holder, const TQVariant& value, TQSql::ParameterType = TQSql::In );
- virtual void bindValue( int pos, const TQVariant& value, TQSql::ParameterType = TQSql::In );
- virtual void addBindValue( const TQVariant& value, TQSql::ParameterType = TQSql::In );
- virtual TQVariant parameterValue( const TQString& holder );
- virtual TQVariant parameterValue( int pos );
- TQVariant boundValue( const TQString& holder ) const;
- TQVariant boundValue( int pos ) const;
- TQMap<TQString, TQVariant> boundValues() const;
- void clear();
- void clearValues();
- void clearIndex();
- void resetBindCount();
-
- enum BindMethod { BindByPosition, BindByName };
- BindMethod bindMethod(); // ### 4.0: make this const
- BindMethod bindm;
- int bindCount;
-
- TQMap<int, TQString> index;
- typedef TQMap<TQString, Param> ValueMap;
- ValueMap values;
-
- // convenience container for TQSqlQuery
- // to map holders <-> positions
- typedef TQValueVector<Holder> HolderVector;
- HolderVector holders;
-};
-
-class TQM_EXPORT_SQL TQSqlDriverExtension
-{
-public:
- TQSqlDriverExtension();
- virtual ~TQSqlDriverExtension();
- virtual bool isOpen() const = 0;
-};
-
-class TQM_EXPORT_SQL TQSqlOpenExtension
-{
-public:
- TQSqlOpenExtension();
- virtual ~TQSqlOpenExtension();
- virtual bool open( const TQString& db,
- const TQString& user,
- const TQString& password,
- const TQString& host,
- int port,
- const TQString& connOpts ) = 0;
-};
-#endif
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlfield.cpp b/tqtinterface/qt4/src/sql/tqsqlfield.cpp
deleted file mode 100644
index b9f9590..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlfield.cpp
+++ /dev/null
@@ -1,563 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlField class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlfield.h"
-
-#ifndef TQT_NO_SQL
-
-
-/*!
- \class TQSqlField tqsqlfield.h
- \brief The TQSqlField class manipulates the fields in SQL database tables
- and views.
-
- \ingroup database
- \module sql
-
- TQSqlField represents the characteristics of a single column in a
- database table or view, such as the data type and column name. A
- field also contains the value of the database column, which can be
- viewed or changed.
-
- Field data values are stored as TQVariants. Using an incompatible
- type is not permitted. For example:
-
- \code
- TQSqlField f( "myfield", TQVariant::Int );
- f.setValue( TQPixmap() ); // will not work
- \endcode
-
- However, the field will attempt to cast certain data types to the
- field data type where possible:
-
- \code
- TQSqlField f( "myfield", TQVariant::Int );
- f.setValue( TQString("123") ); // casts TQString to int
- \endcode
-
- TQSqlField objects are rarely created explicitly in application
- code. They are usually accessed indirectly through \l TQSqlRecord
- or \l TQSqlCursor which already contain a list of fields. For
- example:
-
- \code
- TQSqlCursor cur( "Employee" ); // create cursor using the 'Employee' table
- TQSqlField* f = cur.field( "name" ); // use the 'name' field
- f->setValue( "Dave" ); // set field value
- ...
- \endcode
-
- In practice we rarely need to extract a pointer to a field at all.
- The previous example would normally be written:
-
- \code
- TQSqlCursor cur( "Employee" );
- cur.setValue( "name", "Dave" );
- ...
- \endcode
-*/
-
-/*!
- Constructs an empty field called \a fieldName of type \a type.
-*/
-
-TQSqlField::TQSqlField( const TQString& fieldName, TQVariant::Type type )
- : nm(fieldName), ro(FALSE), nul(FALSE)
-{
- d = new TQSqlFieldPrivate();
- d->type = type;
- val.cast( type );
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-
-TQSqlField::TQSqlField( const TQSqlField& other )
- : nm( other.nm ), val( other.val ), ro( other.ro ), nul( other.nul )
-{
- d = new TQSqlFieldPrivate();
- d->type = other.d->type;
-}
-
-/*!
- Sets the field equal to \a other.
-*/
-
-TQSqlField& TQSqlField::operator=( const TQSqlField& other )
-{
- nm = other.nm;
- val = other.val;
- ro = other.ro;
- nul = other.nul;
- d->type = other.d->type;
- return *this;
-}
-
-/*!
- Returns TRUE if the field is equal to \a other; otherwise returns
- FALSE. Fields are considered equal when the following field
- properties are the same:
-
- \list
- \i \c name()
- \i \c isNull()
- \i \c value()
- \i \c isReadOnly()
- \endlist
-
-*/
-bool TQSqlField::operator==(const TQSqlField& other) const
-{
- return ( nm == other.nm &&
- val == other.val &&
- ro == other.ro &&
- nul == other.nul &&
- d->type == other.d->type );
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlField::~TQSqlField()
-{
- delete d;
-}
-
-
-/*!
- \fn TQVariant TQSqlField::value() const
-
- Returns the value of the field as a TQVariant.
-*/
-
-/*!
- Sets the value of the field to \a value. If the field is read-only
- (isReadOnly() returns TRUE), nothing happens. If the data type of
- \a value differs from the field's current data type, an attempt is
- made to cast it to the proper type. This preserves the data type
- of the field in the case of assignment, e.g. a TQString to an
- integer data type. For example:
-
- \code
- TQSqlCursor cur( "Employee" ); // 'Employee' table
- TQSqlField* f = cur.field( "student_count" ); // an integer field
- ...
- f->setValue( myLineEdit->text() ); // cast the line edit text to an integer
- \endcode
-
- \sa isReadOnly()
-*/
-
-void TQSqlField::setValue( const TQVariant& value )
-{
- if ( isReadOnly() )
- return;
- if ( value.type() != d->type ) {
- if ( !val.canCast( d->type ) )
- qWarning("TQSqlField::setValue: %s cannot cast from %s to %s",
- nm.local8Bit().data(), value.typeName(), TQVariant::typeToName( d->type ) );
- }
- val = value;
-
- if ( value.isNull() )
- nul = TRUE;
- else
- nul = val.type() == TQVariant::Invalid;
-}
-
-/*!
- Clears the value of the field. If the field is read-only, nothing
- happens. If \a nullify is TRUE (the default), the field is set to
- NULL.
-*/
-
-void TQSqlField::clear( bool nullify )
-{
- if ( isReadOnly() )
- return;
- TQVariant v;
- v.cast( type() );
- val = v;
- if ( nullify )
- nul = TRUE;
-}
-
-/*!
- \fn void TQSqlField::setName( const TQString& name )
-
- Sets the name of the field to \a name.
-*/
-
-void TQSqlField::setName( const TQString& name )
-{
- nm = name;
-}
-
-/*!
- \fn void TQSqlField::setNull()
-
- Sets the field to NULL and clears the value using clear(). If the
- field is read-only, nothing happens.
-
- \sa isReadOnly() clear()
-*/
-
-void TQSqlField::setNull()
-{
- clear( TRUE );
-}
-
-/*!
- \fn void TQSqlField::setReadOnly( bool readOnly )
-
- Sets the read only flag of the field's value to \a readOnly.
-
- \sa setValue()
-*/
-void TQSqlField::setReadOnly( bool readOnly )
-{
- ro = readOnly;
-}
-
-/*!
- \fn TQString TQSqlField::name() const
-
- Returns the name of the field.
-*/
-
-/*!
- \fn TQVariant::Type TQSqlField::type() const
-
- Returns the field's type as stored in the database.
- Note that the actual value might have a different type,
- Numerical values that are too large to store in a long
- int or double are usually stored as strings to prevent
- precision loss.
-*/
-
-/*!
- \fn bool TQSqlField::isReadOnly() const
-
- Returns TRUE if the field's value is read only; otherwise returns
- FALSE.
-*/
-
-/*!
- \fn bool TQSqlField::isNull() const
-
- Returns TRUE if the field is currently NULL; otherwise returns
- FALSE.
-*/
-
-
-/******************************************/
-/******* TQSqlFieldInfo Impl ******/
-/******************************************/
-
-struct TQSqlFieldInfoPrivate
-{
- int required, len, prec, typeID;
- uint generated: 1;
- uint trim: 1;
- uint calculated: 1;
- TQString name;
- TQString typeName;
- TQVariant::Type typ;
- TQVariant defValue;
-};
-
-/*!
- \class TQSqlFieldInfo tqsqlfield.h
- \brief The TQSqlFieldInfo class stores meta data associated with a SQL field.
-
- \ingroup database
- \module sql
-
- TQSqlFieldInfo objects only store meta data; field values are
- stored in TQSqlField objects.
-
- All values must be set in the constructor, and may be retrieved
- using isRequired(), type(), length(), precision(), defaultValue(),
- name(), isGenerated() and typeID().
-*/
-
-/*!
- Constructs a TQSqlFieldInfo with the following parameters:
- \table
- \row \i \a name \i the name of the field.
- \row \i \a typ \i the field's type in a TQVariant.
- \row \i \a required \i greater than 0 if the field is required, 0
- if its value can be NULL and less than 0 if it cannot be
- determined whether the field is required or not.
- \row \i \a len \i the length of the field. Note that for
- non-character types some databases return either the length in
- bytes or the number of digits. -1 signifies that the length cannot
- be determined.
- \row \i \a prec \i the precision of the field, or -1 if the field
- has no precision or it cannot be determined.
- \row \i \a defValue \i the default value that is inserted into
- the table if none is specified by the user. TQVariant() if there is
- no default value or it cannot be determined.
- \row \i \a typeID \i the internal typeID of the database system
- (only useful for low-level programming). 0 if unknown.
- \row \i \a generated \i TRUE indicates that this field should be
- included in auto-generated SQL statments, e.g. in TQSqlCursor.
- \row \i \a trim \i TRUE indicates that widgets should remove
- trailing whitespace from character fields. This does not affect
- the field value but only its representation inside widgets.
- \row \i \a calculated \i TRUE indicates that the value of this
- field is calculated. The value of calculated fields can by
- modified by subclassing TQSqlCursor and overriding
- TQSqlCursor::calculateField().
- \endtable
-*/
-TQSqlFieldInfo::TQSqlFieldInfo( const TQString& name,
- TQVariant::Type typ,
- int required,
- int len,
- int prec,
- const TQVariant& defValue,
- int typeID,
- bool generated,
- bool trim,
- bool calculated )
-{
- d = new TQSqlFieldInfoPrivate();
- d->name = name;
- d->typ = typ;
- d->required = required;
- d->len = len;
- d->prec = prec;
- d->defValue = defValue;
- d->typeID = typeID;
- d->generated = generated;
- d->trim = trim;
- d->calculated = calculated;
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-TQSqlFieldInfo::TQSqlFieldInfo( const TQSqlFieldInfo & other )
-{
- d = new TQSqlFieldInfoPrivate( *(other.d) );
-}
-
-/*!
- Creates a TQSqlFieldInfo object with the type and the name of the
- TQSqlField \a other. If \a generated is TRUE this field will be
- included in auto-generated SQL statments, e.g. in TQSqlCursor.
-*/
-TQSqlFieldInfo::TQSqlFieldInfo( const TQSqlField & other, bool generated )
-{
- d = new TQSqlFieldInfoPrivate();
- d->name = other.name();
- d->typ = other.type();
- d->required = -1;
- d->len = -1;
- d->prec = -1;
- d->typeID = 0;
- d->generated = generated;
- d->trim = FALSE;
- d->calculated = FALSE;
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-TQSqlFieldInfo::~TQSqlFieldInfo()
-{
- delete d;
-}
-
-/*!
- Assigns \a other to this field info and returns a reference to it.
-*/
-TQSqlFieldInfo& TQSqlFieldInfo::operator=( const TQSqlFieldInfo& other )
-{
- delete d;
- d = new TQSqlFieldInfoPrivate( *(other.d) );
- return *this;
-}
-
-/*!
- Returns TRUE if this fieldinfo is equal to \a f; otherwise returns
- FALSE.
-
- Two field infos are considered equal if all their attributes
- match.
-*/
-bool TQSqlFieldInfo::operator==( const TQSqlFieldInfo& f ) const
-{
- return ( d->name == f.d->name &&
- d->typ == f.d->typ &&
- d->required == f.d->required &&
- d->len == f.d->len &&
- d->prec == f.d->prec &&
- d->defValue == f.d->defValue &&
- d->typeID == f.d->typeID &&
- d->generated == f.d->generated &&
- d->trim == f.d->trim &&
- d->calculated == f.d->calculated );
-}
-
-/*!
- Returns an empty TQSqlField based on the information in this
- TQSqlFieldInfo.
-*/
-TQSqlField TQSqlFieldInfo::toField() const
-{ return TQSqlField( d->name, d->typ ); }
-
-/*!
- Returns a value greater than 0 if the field is required (NULL
- values are not allowed), 0 if it isn't required (NULL values are
- allowed) or less than 0 if it cannot be determined whether the
- field is required or not.
-*/
-int TQSqlFieldInfo::isRequired() const
-{ return d->required; }
-
-/*!
- Returns the field's type or TQVariant::Invalid if the type is
- unknown.
-*/
-TQVariant::Type TQSqlFieldInfo::type() const
-{ return d->typ; }
-
-/*!
- Returns the field's length. For fields storing text the return
- value is the maximum number of characters the field can hold. For
- non-character fields some database systems return the number of
- bytes needed or the number of digits allowed. If the length cannot
- be determined -1 is returned.
-*/
-int TQSqlFieldInfo::length() const
-{ return d->len; }
-
-/*!
- Returns the field's precision or -1 if the field has no precision
- or it cannot be determined.
-*/
-int TQSqlFieldInfo::precision() const
-{ return d->prec; }
-
-/*!
- Returns the field's default value or an empty TQVariant if the
- field has no default value or the value couldn't be determined.
- The default value is the value inserted in the database when it
- is not explicitly specified by the user.
-*/
-TQVariant TQSqlFieldInfo::defaultValue() const
-{ return d->defValue; }
-
-/*!
- Returns the name of the field in the SQL table.
-*/
-TQString TQSqlFieldInfo::name() const
-{ return d->name; }
-
-/*!
- Returns the internal type identifier as returned from the database
- system. The return value is 0 if the type is unknown.
-
- \warning This information is only useful for low-level database
- programming and is \e not database independent.
-*/
-int TQSqlFieldInfo::typeID() const
-{ return d->typeID; }
-
-/*!
- Returns TRUE if the field should be included in auto-generated
- SQL statments, e.g. in TQSqlCursor; otherwise returns FALSE.
-
- \sa setGenerated()
-*/
-bool TQSqlFieldInfo::isGenerated() const
-{ return d->generated; }
-
-/*!
- Returns TRUE if trailing whitespace should be removed from
- character fields; otherwise returns FALSE.
-
- \sa setTrim()
-*/
-bool TQSqlFieldInfo::isTrim() const
-{ return d->trim; }
-
-/*!
- Returns TRUE if the field is calculated; otherwise returns FALSE.
-
- \sa setCalculated()
-*/
-bool TQSqlFieldInfo::isCalculated() const
-{ return d->calculated; }
-
-/*!
- If \a trim is TRUE widgets should remove trailing whitespace from
- character fields. This does not affect the field value but only
- its representation inside widgets.
-
- \sa isTrim()
-*/
-void TQSqlFieldInfo::setTrim( bool trim )
-{ d->trim = trim; }
-
-/*!
- \a gen set to FALSE indicates that this field should not appear
- in auto-generated SQL statements (for example in TQSqlCursor).
-
- \sa isGenerated()
-*/
-void TQSqlFieldInfo::setGenerated( bool gen )
-{ d->generated = gen; }
-
-/*!
- \a calc set to TRUE indicates that this field is a calculated
- field. The value of calculated fields can by modified by subclassing
- TQSqlCursor and overriding TQSqlCursor::calculateField().
-
- \sa isCalculated()
-*/
-void TQSqlFieldInfo::setCalculated( bool calc )
-{ d->calculated = calc; }
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlfield.h b/tqtinterface/qt4/src/sql/tqsqlfield.h
deleted file mode 100644
index 2983ba7..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlfield.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlField class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLFIELD_H
-#define TQSQLFIELD_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#include "tqvariant.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlFieldPrivate
-{
-public:
- TQVariant::Type type;
-};
-
-class TQM_EXPORT_SQL TQSqlField
-{
-public:
- TQSqlField( const TQString& fieldName = TQString::null, TQVariant::Type type = TQVariant::Invalid );
- TQSqlField( const TQSqlField& other );
- TQSqlField& operator=( const TQSqlField& other );
- bool operator==(const TQSqlField& other) const;
- virtual ~TQSqlField();
-
- virtual void setValue( const TQVariant& value );
- virtual TQVariant value() const;
- virtual void setName( const TQString& name );
- TQString name() const;
- virtual void setNull();
- bool isNull() const;
- virtual void setReadOnly( bool readOnly );
- bool isReadOnly() const;
- void clear( bool nullify = TRUE );
- TQVariant::Type type() const;
-
-private:
- TQString nm;
- TQVariant val;
- uint ro: 1;
- uint nul: 1;
- TQSqlFieldPrivate* d;
-};
-
-inline TQVariant TQSqlField::value() const
-{ return val; }
-
-inline TQString TQSqlField::name() const
-{ return nm; }
-
-inline bool TQSqlField::isNull() const
-{ return nul; }
-
-inline bool TQSqlField::isReadOnly() const
-{ return ro; }
-
-inline TQVariant::Type TQSqlField::type() const
-{ return d->type; }
-
-
-/******************************************/
-/******* TQSqlFieldInfo Class ******/
-/******************************************/
-
-struct TQSqlFieldInfoPrivate;
-
-class TQM_EXPORT_SQL TQSqlFieldInfo
-{
-public:
- TQSqlFieldInfo( const TQString& name = TQString::null,
- TQVariant::Type typ = TQVariant::Invalid,
- int required = -1,
- int len = -1,
- int prec = -1,
- const TQVariant& defValue = TQVariant(),
- int sqlType = 0,
- bool generated = TRUE,
- bool trim = FALSE,
- bool calculated = FALSE );
- TQSqlFieldInfo( const TQSqlFieldInfo & other );
- TQSqlFieldInfo( const TQSqlField & other, bool generated = TRUE );
- virtual ~TQSqlFieldInfo();
- TQSqlFieldInfo& operator=( const TQSqlFieldInfo& other );
- bool operator==( const TQSqlFieldInfo& f ) const;
-
- TQSqlField toField() const;
- int isRequired() const;
- TQVariant::Type type() const;
- int length() const;
- int precision() const;
- TQVariant defaultValue() const;
- TQString name() const;
- int typeID() const;
- bool isGenerated() const;
- bool isTrim() const;
- bool isCalculated() const;
-
- virtual void setTrim( bool trim );
- virtual void setGenerated( bool gen );
- virtual void setCalculated( bool calc );
-
-private:
- TQSqlFieldInfoPrivate* d;
-};
-
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlform.cpp b/tqtinterface/qt4/src/sql/tqsqlform.cpp
deleted file mode 100644
index 95c125f..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlform.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlForm class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlform.h"
-
-#ifndef TQT_NO_STQL_FORM
-
-#include "tqsqlfield.h"
-#include "tqsqlpropertymap.h"
-#include "tqsqlrecord.h"
-#include "tqstringlist.h"
-#include "tqwidget.h"
-#include "tqdict.h"
-
-class TQSqlFormPrivate
-{
-public:
- TQSqlFormPrivate() : propertyMap( 0 ), buf( 0 ), dirty( FALSE ) {}
- ~TQSqlFormPrivate() { if ( propertyMap ) delete propertyMap; }
- TQStringList fld;
- TQDict<TQWidget> wgt;
- TQMap< TQWidget *, TQSqlField * > map;
- TQSqlPropertyMap * propertyMap;
- TQSqlRecord* buf;
- bool dirty;
-};
-
-/*!
- \class TQSqlForm
- \brief The TQSqlForm class creates and manages data entry forms
- tied to SQL databases.
-
- \ingroup database
- \mainclass
- \module sql
-
- Typical use of a TQSqlForm consists of the following steps:
- \list
- \i Create the widgets you want to appear in the form.
- \i Create a cursor and navigate to the record to be edited.
- \i Create the TQSqlForm.
- \i Set the form's record buffer to the cursor's update buffer.
- \i Insert each widget and the field it is to edit into the form.
- \i Use readFields() to update the editor widgets with values from
- the database's fields.
- \i Display the form and let the user edit values etc.
- \i Use writeFields() to update the database's field values with
- the values in the editor widgets.
- \endlist
-
- Note that a TQSqlForm does not access the database directly, but
- most often via TQSqlFields which are part of a TQSqlCursor. A
- TQSqlCursor::insert(), TQSqlCursor::update() or TQSqlCursor::del()
- call is needed to actually write values to the database.
-
- Some sample code to initialize a form successfully:
-
- \code
- TQLineEdit myEditor( this );
- TQSqlForm myForm( this );
- TQSqlCursor myCursor( "mytable" );
-
- // Execute a query to make the cursor valid
- myCursor.select();
- // Move the cursor to a valid record (the first record)
- myCursor.next();
- // Set the form's record pointer to the cursor's edit buffer (which
- // contains the current record's values)
- myForm.setRecord( myCursor.primeUpdate() );
-
- // Insert a field into the form that uses myEditor to edit the
- // field 'somefield' in 'mytable'
- myForm.insert( &myEditor, "somefield" );
-
- // Update myEditor with the value from the mapped database field
- myForm.readFields();
- ...
- // Let the user edit the form
- ...
- // Update the database
- myForm.writeFields(); // Update the cursor's edit buffer from the form
- myCursor.update(); // Update the database from the cursor's buffer
- \endcode
-
- If you want to use custom editors for displaying and editing data
- fields, you must install a custom TQSqlPropertyMap. The form
- uses this object to get or set the value of a widget.
-
- Note that \link designer-manual.book TQt Designer\endlink provides
- a visual means of creating data-aware forms.
-
- \sa installPropertyMap(), TQSqlPropertyMap
-*/
-
-
-/*!
- Constructs a TQSqlForm with parent \a parent and called \a name.
-*/
-TQSqlForm::TQSqlForm( TQObject * parent, const char * name )
- : TQObject( parent, name )
-{
- d = new TQSqlFormPrivate();
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-TQSqlForm::~TQSqlForm()
-{
- delete d;
-}
-
-/*!
- Installs a custom TQSqlPropertyMap. This is useful if you plan to
- create your own custom editor widgets.
-
- TQSqlForm takes ownership of \a pmap, so \a pmap is deleted when
- TQSqlForm goes out of scope.
-
- \sa TQDataTable::installEditorFactory()
-*/
-void TQSqlForm::installPropertyMap( TQSqlPropertyMap * pmap )
-{
- if( d->propertyMap )
- delete d->propertyMap;
- d->propertyMap = pmap;
-}
-
-/*!
- Sets \a buf as the record buffer for the form. To force the
- display of the data from \a buf, use readFields().
-
- \sa readFields() writeFields()
-*/
-
-void TQSqlForm::setRecord( TQSqlRecord* buf )
-{
- d->dirty = TRUE;
- d->buf = buf;
-}
-
-/*!
- Inserts a \a widget, and the name of the \a field it is to be
- mapped to, into the form. To actually associate inserted widgets
- with an edit buffer, use setRecord().
-
- \sa setRecord()
-*/
-
-void TQSqlForm::insert( TQWidget * widget, const TQString& field )
-{
- d->dirty = TRUE;
- d->wgt.insert( field, widget );
- d->fld += field;
-}
-
-/*!
- \overload
-
- Removes \a field from the form.
-*/
-
-void TQSqlForm::remove( const TQString& field )
-{
- d->dirty = TRUE;
- if ( d->fld.find( field ) != d->fld.end() )
- d->fld.remove( d->fld.find( field ) );
- d->wgt.remove( field );
-}
-
-/*!
- \overload
-
- Inserts a \a widget, and the \a field it is to be mapped to, into
- the form.
-*/
-
-void TQSqlForm::insert( TQWidget * widget, TQSqlField * field )
-{
- d->map[widget] = field;
-}
-
-/*!
- Removes a \a widget, and hence the field it's mapped to, from the
- form.
-*/
-
-void TQSqlForm::remove( TQWidget * widget )
-{
- d->map.remove( widget );
-}
-
-/*!
- Clears the values in all the widgets, and the fields they are
- mapped to, in the form. If \a nullify is TRUE (the default is
- FALSE), each field is also set to NULL.
-*/
-void TQSqlForm::clearValues( bool nullify )
-{
- TQMap< TQWidget *, TQSqlField * >::Iterator it;
- for( it = d->map.begin(); it != d->map.end(); ++it ){
- TQSqlField* f = (*it);
- if ( f )
- f->clear( nullify );
- }
- readFields();
-}
-
-/*!
- Removes every widget, and the fields they're mapped to, from the form.
-*/
-void TQSqlForm::clear()
-{
- d->dirty = TRUE;
- d->fld.clear();
- clearMap();
-}
-
-/*!
- Returns the number of widgets in the form.
-*/
-uint TQSqlForm::count() const
-{
- return (uint)d->map.count();
-}
-
-/*!
- Returns the \a{i}-th widget in the form. Useful for traversing
- the widgets in the form.
-*/
-TQWidget * TQSqlForm::widget( uint i ) const
-{
- TQMap< TQWidget *, TQSqlField * >::ConstIterator it;
- uint cnt = 0;
-
- if( i > d->map.count() ) return 0;
- for( it = d->map.begin(); it != d->map.end(); ++it ){
- if( cnt++ == i )
- return it.key();
- }
- return 0;
-}
-
-/*!
- Returns the widget that field \a field is mapped to.
-*/
-TQWidget * TQSqlForm::fieldToWidget( TQSqlField * field ) const
-{
- TQMap< TQWidget *, TQSqlField * >::ConstIterator it;
- for( it = d->map.begin(); it != d->map.end(); ++it ){
- if( *it == field )
- return it.key();
- }
- return 0;
-}
-
-/*!
- Returns the SQL field that widget \a widget is mapped to.
-*/
-TQSqlField * TQSqlForm::widgetToField( TQWidget * widget ) const
-{
- if( d->map.contains( widget ) )
- return d->map[widget];
- else
- return 0;
-}
-
-/*!
- Updates the widgets in the form with current values from the SQL
- fields they are mapped to.
-*/
-void TQSqlForm::readFields()
-{
- sync();
- TQSqlField * f;
- TQMap< TQWidget *, TQSqlField * >::Iterator it;
- TQSqlPropertyMap * pmap = (d->propertyMap == 0) ?
- TQSqlPropertyMap::defaultMap() : d->propertyMap;
- for(it = d->map.begin() ; it != d->map.end(); ++it ){
- f = widgetToField( it.key() );
- if( !f )
- continue;
- pmap->setProperty( it.key(), f->value() );
- }
-}
-
-/*!
- Updates the SQL fields with values from the widgets they are
- mapped to. To actually update the database with the contents of
- the record buffer, use TQSqlCursor::insert(), TQSqlCursor::update()
- or TQSqlCursor::del() as appropriate.
-*/
-void TQSqlForm::writeFields()
-{
- sync();
- TQSqlField * f;
- TQMap< TQWidget *, TQSqlField * >::Iterator it;
- TQSqlPropertyMap * pmap = (d->propertyMap == 0) ?
- TQSqlPropertyMap::defaultMap() : d->propertyMap;
-
- for(it = d->map.begin() ; it != d->map.end(); ++it ){
- f = widgetToField( it.key() );
- if( !f )
- continue;
- f->setValue( pmap->property( it.key() ) );
- }
-}
-
-/*!
- Updates the widget \a widget with the value from the SQL field it
- is mapped to. Nothing happens if no SQL field is mapped to the \a
- widget.
-*/
-void TQSqlForm::readField( TQWidget * widget )
-{
- sync();
- TQSqlField * field = 0;
- TQSqlPropertyMap * pmap = (d->propertyMap == 0) ?
- TQSqlPropertyMap::defaultMap() : d->propertyMap;
- field = widgetToField( widget );
- if( field )
- pmap->setProperty( widget, field->value() );
-}
-
-/*!
- Updates the SQL field with the value from the \a widget it is
- mapped to. Nothing happens if no SQL field is mapped to the \a
- widget.
-*/
-void TQSqlForm::writeField( TQWidget * widget )
-{
- sync();
- TQSqlField * field = 0;
- TQSqlPropertyMap * pmap = (d->propertyMap == 0) ?
- TQSqlPropertyMap::defaultMap() : d->propertyMap;
- field = widgetToField( widget );
- if( field )
- field->setValue( pmap->property( widget ) );
-}
-
-/*! \internal
-*/
-
-void TQSqlForm::sync()
-{
- if ( d->dirty ) {
- clearMap();
- if ( d->buf ) {
- for ( uint i = 0; i < d->fld.count(); ++i )
- insert( d->wgt[ d->fld[ i ] ], d->buf->field( d->fld[ i ] ) );
- }
- }
- d->dirty = FALSE;
-}
-
-/*! \internal
-
- Clears the internal map of widget/field associations
-*/
-
-void TQSqlForm::clearMap()
-{
- d->map.clear();
-}
-
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqlform.h b/tqtinterface/qt4/src/sql/tqsqlform.h
deleted file mode 100644
index 14087eb..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlform.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlForm class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLFORM_H
-#define TQSQLFORM_H
-
-#ifndef TQT_H
-#include "tqobject.h"
-#include "tqmap.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_STQL_FORM
-
-class TQSqlField;
-class TQSqlRecord;
-class TQSqlEditorFactory;
-class TQSqlPropertyMap;
-class TQWidget;
-class TQSqlFormPrivate;
-
-class TQM_EXPORT_SQL TQSqlForm : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- TQSqlForm( TQObject * parent = 0, const char * name = 0 );
- ~TQSqlForm();
-
- virtual void insert( TQWidget * widget, const TQString& field );
- virtual void remove( const TQString& field );
- uint count() const;
-
- TQWidget * widget( uint i ) const;
- TQSqlField * widgetToField( TQWidget * widget ) const;
- TQWidget * fieldToWidget( TQSqlField * field ) const;
-
- void installPropertyMap( TQSqlPropertyMap * map );
-
- virtual void setRecord( TQSqlRecord* buf );
-
-public Q_SLOTS:
- virtual void readField( TQWidget * widget );
- virtual void writeField( TQWidget * widget );
- virtual void readFields();
- virtual void writeFields();
-
- virtual void clear();
- virtual void clearValues( bool nullify = FALSE );
-
-protected:
- virtual void insert( TQWidget * widget, TQSqlField * field );
- virtual void remove( TQWidget * widget );
- void clearMap();
-
-private:
- virtual void sync();
- TQSqlFormPrivate* d;
-
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQSqlForm( const TQSqlForm & );
- TQSqlForm &operator=( const TQSqlForm & );
-#endif
-};
-
-#endif // TQT_NO_SQL
-#endif // TQSQLFORM_H
diff --git a/tqtinterface/qt4/src/sql/tqsqlindex.cpp b/tqtinterface/qt4/src/sql/tqsqlindex.cpp
deleted file mode 100644
index 9d5880c..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlindex.cpp
+++ /dev/null
@@ -1,301 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlIndex 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 "tqsqlindex.h"
-
-#ifndef TQT_NO_SQL
-
-#include "tqsqlcursor.h"
-
-/*!
- \class TQSqlIndex tqsqlindex.h
- \brief The TQSqlIndex class provides functions to manipulate and
- describe TQSqlCursor and TQSqlDatabase indexes.
-
- \ingroup database
- \module sql
-
- This class is used to describe and manipulate TQSqlCursor and
- TQSqlDatabase indexes. An index refers to a single table or view
- in a database. Information about the fields that comprise the
- index can be used to generate SQL statements, or to affect the
- behavior of a \l TQSqlCursor object.
-
- Normally, TQSqlIndex objects are created by \l TQSqlDatabase or
- TQSqlCursor.
-*/
-
-/*!
- Constructs an empty index using the cursor name \a cursorname and
- index name \a name.
-*/
-
-TQSqlIndex::TQSqlIndex( const TQString& cursorname, const TQString& name )
- : TQSqlRecord(), cursor(cursorname), nm(name)
-{
-
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-
-TQSqlIndex::TQSqlIndex( const TQSqlIndex& other )
- : TQSqlRecord(other), cursor(other.cursor), nm(other.nm), sorts(other.sorts)
-{
-}
-
-/*!
- Sets the index equal to \a other.
-*/
-
-TQSqlIndex& TQSqlIndex::operator=( const TQSqlIndex& other )
-{
- cursor = other.cursor;
- nm = other.nm;
- sorts = other.sorts;
- TQSqlRecord::operator=( other );
- return *this;
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlIndex::~TQSqlIndex()
-{
-
-}
-
-/*!
- Sets the name of the index to \a name.
-*/
-
-void TQSqlIndex::setName( const TQString& name )
-{
- nm = name;
-}
-
-/*!
- \fn TQString TQSqlIndex::name() const
-
- Returns the name of the index.
-*/
-
-/*!
- Appends the field \a field to the list of indexed fields. The
- field is appended with an ascending sort order.
-*/
-
-void TQSqlIndex::append( const TQSqlField& field )
-{
- append( field, FALSE );
-}
-
-/*!
- \overload
-
- Appends the field \a field to the list of indexed fields. The
- field is appended with an ascending sort order, unless \a desc is
- TRUE.
-*/
-
-void TQSqlIndex::append( const TQSqlField& field, bool desc )
-{
- sorts.append( desc );
- TQSqlRecord::append( field );
-}
-
-
-/*!
- Returns TRUE if field \a i in the index is sorted in descending
- order; otherwise returns FALSE.
-*/
-
-bool TQSqlIndex::isDescending( int i ) const
-{
- if ( sorts.at( i ) != sorts.end() )
- return sorts[i];
- return FALSE;
-}
-
-/*!
- If \a desc is TRUE, field \a i is sorted in descending order.
- Otherwise, field \a i is sorted in ascending order (the default).
- If the field does not exist, nothing happens.
-*/
-
-void TQSqlIndex::setDescending( int i, bool desc )
-{
- if ( sorts.at( i ) != sorts.end() )
- sorts[i] = desc;
-}
-
-/*!
- \reimp
-
- Returns a comma-separated list of all the index's field names as a
- string. This string is suitable, for example, for generating a
- SQL SELECT statement. Only generated fields are included in the
- list (see \l{isGenerated()}). If a \a prefix is specified, e.g. a
- table name, it is prepended before all field names in the form:
-
- "\a{prefix}.<fieldname>"
-
- If \a sep is specified, each field is separated by \a sep. If \a
- verbose is TRUE (the default), each field contains a suffix
- indicating an ASCending or DESCending sort order.
-*/
-
-TQString TQSqlIndex::toString( const TQString& prefix, const TQString& sep, bool verbose ) const
-{
- TQString s;
- bool comma = FALSE;
- for ( uint i = 0; i < count(); ++i ) {
- if( comma )
- s += sep + " ";
- s += createField( i, prefix, verbose );
- comma = TRUE;
- }
- return s;
-}
-
-/*!
- \reimp
-
- Returns a list of all the index's field names. Only generated
- fields are included in the list (see \l{isGenerated()}). If a \a
- prefix is specified, e.g. a table name, all fields are prefixed in
- the form:
-
- "\a{prefix}.<fieldname>"
-
- If \a verbose is TRUE (the default), each field contains a suffix
- indicating an ASCending or DESCending sort order.
-
- Note that if you want to iterate over the list, you should iterate
- over a copy, e.g.
- \code
- TQStringList list = myIndex.toStringList();
- TQStringList::Iterator it = list.begin();
- while( it != list.end() ) {
- myProcessing( *it );
- ++it;
- }
- \endcode
-
-*/
-TQStringList TQSqlIndex::toStringList( const TQString& prefix, bool verbose ) const
-{
- TQStringList s;
- for ( uint i = 0; i < count(); ++i )
- s += createField( i, prefix, verbose );
- return s;
-}
-
-/*! \internal
-
- Creates a string representing the field number \a i using prefix \a
- prefix. If \a verbose is TRUE, ASC or DESC is included in the field
- description if the field is sorted in ASCending or DESCending order.
-*/
-
-TQString TQSqlIndex::createField( int i, const TQString& prefix, bool verbose ) const
-{
- TQString f;
- if ( !prefix.isEmpty() )
- f += prefix + ".";
- f += field( i )->name();
- if ( verbose )
- f += " " + TQString( ( isDescending( i ) ? "DESC" : "ASC" ) );
- return f;
-}
-
-/*!
- Returns an index based on the field descriptions in \a l and the
- cursor \a cursor. The field descriptions should be in the same
- format that toStringList() produces, for example, a surname field
- in the people table might be in one of these forms: "surname",
- "surname DESC" or "people.surname ASC".
-
- \sa toStringList()
-*/
-
-TQSqlIndex TQSqlIndex::fromStringList( const TQStringList& l, const TQSqlCursor* cursor )
-{
- TQSqlIndex newSort;
- for ( uint i = 0; i < l.count(); ++i ) {
- TQString f = l[ i ];
- bool desc = FALSE;
- if ( f.mid( f.length()-3 ) == "ASC" )
- f = f.mid( 0, f.length()-3 );
- if ( f.mid( f.length()-4 ) == "DESC" ) {
- desc = TRUE;
- f = f.mid( 0, f.length()-4 );
- }
- int dot = f.findRev( '.' );
- if ( dot != -1 )
- f = f.mid( dot+1 );
- const TQSqlField* field = cursor->field( f.simplifyWhiteSpace() );
- if ( field )
- newSort.append( *field, desc );
- else
- qWarning( "TQSqlIndex::fromStringList: unknown field: '%s'", f.latin1());
- }
- return newSort;
-}
-
-/*!
- \fn TQString TQSqlIndex::cursorName() const
-
- Returns the name of the cursor which the index is associated with.
-*/
-
-
-/*!
- Sets the name of the cursor that the index is associated with to
- \a cursorName.
-*/
-void TQSqlIndex::setCursorName( const TQString& cursorName )
-{
- cursor = cursorName;
-}
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlindex.h b/tqtinterface/qt4/src/sql/tqsqlindex.h
deleted file mode 100644
index 4f22cd4..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlindex.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlIndex class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLINDEX_H
-#define TQSQLINDEX_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#include "tqstringlist.h"
-#include "tqsqlfield.h"
-#include "tqsqlrecord.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#define TQM_TEMPLATE_EXTERN_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#define TQM_TEMPLATE_EXTERN_SQL TQ_TEMPLATE_EXTERN
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlCursor;
-
-class TQM_EXPORT_SQL TQSqlIndex : public TQSqlRecord
-{
-public:
- TQSqlIndex( const TQString& cursorName = TQString::null, const TQString& name = TQString::null );
- TQSqlIndex( const TQSqlIndex& other );
- ~TQSqlIndex();
- TQSqlIndex& operator=( const TQSqlIndex& other );
- virtual void setCursorName( const TQString& cursorName );
- TQString cursorName() const { return cursor; }
- virtual void setName( const TQString& name );
- TQString name() const { return nm; }
-
- void append( const TQSqlField& field );
- virtual void append( const TQSqlField& field, bool desc );
-
- bool isDescending( int i ) const;
- virtual void setDescending( int i, bool desc );
-
- TQString toString( const TQString& prefix = TQString::null,
- const TQString& sep = ",",
- bool verbose = TRUE ) const;
- TQStringList toStringList( const TQString& prefix = TQString::null,
- bool verbose = TRUE ) const;
-
- static TQSqlIndex fromStringList( const TQStringList& l, const TQSqlCursor* cursor );
-
-private:
- TQString createField( int i, const TQString& prefix, bool verbose ) const;
- TQString cursor;
- TQString nm;
- TQValueList<bool> sorts;
-};
-
-#define TQ_DEFINED_TQSQLINDEX
-#include "tqwinexport.h"
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlmanager_p.cpp b/tqtinterface/qt4/src/sql/tqsqlmanager_p.cpp
deleted file mode 100644
index b70f1b5..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlmanager_p.cpp
+++ /dev/null
@@ -1,941 +0,0 @@
-/****************************************************************************
-**
-** Implementation of sql manager classes
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlmanager_p.h"
-
-#ifndef TQT_NO_SQL
-
-#include "tqapplication.h"
-#include "tqwidget.h"
-#include "tqsqlcursor.h"
-#include "tqsqlform.h"
-#include "tqsqldriver.h"
-#include "tqstring.h"
-#include "tqmessagebox.h"
-#include "tqbitarray.h"
-
-//#define TQT_DEBUG_DATAMANAGER
-
-class TQSqlCursorManagerPrivate
-{
-public:
- TQSqlCursorManagerPrivate()
- : cur( 0 ), autoDelete( FALSE )
- {}
-
- TQString ftr;
- TQStringList srt;
- TQSqlCursor* cur;
- bool autoDelete;
-};
-
-/*!
- \class TQSqlCursorManager qsqlmanager_p.h
- \brief The TQSqlCursorManager class manages a database cursor.
-
- \module sql
-
- \internal
-
- This class provides common cursor management functionality. This
- includes saving and applying sorts and filters, refreshing (i.e.,
- re-selecting) the cursor and searching for records within the
- cursor.
-
-*/
-
-/*! \internal
-
- Constructs a cursor manager.
-
-*/
-
-TQSqlCursorManager::TQSqlCursorManager()
-{
- d = new TQSqlCursorManagerPrivate;
-}
-
-
-/*! \internal
-
- Destroys the object and frees any allocated resources.
-
-*/
-
-TQSqlCursorManager::~TQSqlCursorManager()
-{
- if ( d->autoDelete )
- delete d->cur;
- delete d;
-}
-
-/*! \internal
-
- Sets the manager's sort to the index \a sort. To apply the new
- sort, use refresh().
-
- */
-
-void TQSqlCursorManager::setSort( const TQSqlIndex& sort )
-{
- setSort( sort.toStringList() );
-}
-
-/*! \internal
-
- Sets the manager's sort to the stringlist \a sort. To apply the
- new sort, use refresh().
-
- */
-
-void TQSqlCursorManager::setSort( const TQStringList& sort )
-{
- d->srt = sort;
-}
-
-/*! \internal
-
- Returns the current sort, or an empty stringlist if there is none.
-
-*/
-
-TQStringList TQSqlCursorManager::sort() const
-{
- return d->srt;
-}
-
-/*! \internal
-
- Sets the manager's filter to the string \a filter. To apply the
- new filter, use refresh().
-
-*/
-
-void TQSqlCursorManager::setFilter( const TQString& filter )
-{
- d->ftr = filter;
-}
-
-/*! \internal
-
- Returns the current filter, or an empty string if there is none.
-
-*/
-
-TQString TQSqlCursorManager::filter() const
-{
- return d->ftr;
-}
-
-/*! \internal
-
- Sets auto-delete to \a enable. If TRUE, the default cursor will
- be deleted when necessary.
-
- \sa autoDelete()
-*/
-
-void TQSqlCursorManager::setAutoDelete( bool enable )
-{
- d->autoDelete = enable;
-}
-
-
-/*! \internal
-
- Returns TRUE if auto-deletion is enabled, otherwise FALSE.
-
- \sa setAutoDelete()
-
-*/
-
-bool TQSqlCursorManager::autoDelete() const
-{
- return d->autoDelete;
-}
-
-/*! \internal
-
- Sets the default cursor used by the manager to \a cursor. If \a
- autoDelete is TRUE (the default is FALSE), the manager takes
- ownership of the \a cursor pointer, which will be deleted when the
- manager is destroyed, or when setCursor() is called again. To
- activate the \a cursor use refresh().
-
- \sa cursor()
-
-*/
-
-void TQSqlCursorManager::setCursor( TQSqlCursor* cursor, bool autoDelete )
-{
- if ( d->autoDelete )
- delete d->cur;
- d->cur = cursor;
- d->autoDelete = autoDelete;
-}
-
-/*! \internal
-
- Returns a pointer to the default cursor used for navigation, or 0
- if there is no default cursor.
-
- \sa setCursor()
-
-*/
-
-TQSqlCursor* TQSqlCursorManager::cursor() const
-{
- return d->cur;
-}
-
-
-/*! \internal
-
- Refreshes the manager using the default cursor. The manager's
- filter and sort are applied. Returns TRUE on success, FALSE if an
- error occurred or there is no current cursor.
-
- \sa setFilter() setSort()
-
-*/
-
-bool TQSqlCursorManager::refresh()
-{
- TQSqlCursor* cur = cursor();
- if ( !cur )
- return FALSE;
- TQString currentFilter = d->ftr;
- TQStringList currentSort = d->srt;
- TQSqlIndex newSort = TQSqlIndex::fromStringList( currentSort, cur );
- return cur->select( currentFilter, newSort );
-}
-
-/* \internal
-
- Returns TRUE if the \a buf field values that correspond to \a idx
- match the field values in \a cur that correspond to \a idx.
-*/
-
-static bool index_matches( const TQSqlCursor* cur, const TQSqlRecord* buf,
- const TQSqlIndex& idx )
-{
- bool indexEquals = FALSE;
- for ( uint i = 0; i < idx.count(); ++i ) {
- const TQString fn( idx.field(i)->name() );
- if ( cur->value( fn ) == buf->value( fn ) )
- indexEquals = TRUE;
- else {
- indexEquals = FALSE;
- break;
- }
- }
- return indexEquals;
-}
-
-/*
- Return less than, equal to or greater than 0 if buf1 is less than,
- equal to or greater than buf2 according to fields described in idx.
- (### Currently only uses first field.)
-*/
-
-static int compare_recs( const TQSqlRecord* buf1, const TQSqlRecord* buf2,
- const TQSqlIndex& idx )
-{
- int cmp = 0;
-
- int i = 0;
- const TQString fn( idx.field(i)->name() );
- const TQSqlField* f1 = buf1->field( fn );
-
- if ( f1 ) {
- switch ( f1->type() ) { // ### more types?
- case TQVariant::String:
- case TQVariant::CString:
- cmp = TQT_TQSTRING(f1->value().toString()).simplifyWhiteSpace().compare(
- TQT_TQSTRING(buf2->value(fn).toString()).simplifyWhiteSpace() );
- break;
- default:
- if ( f1->value().toDouble() < buf2->value( fn ).toDouble() )
- cmp = -1;
- else if ( f1->value().toDouble() > buf2->value( fn ).toDouble() )
- cmp = 1;
- }
- }
-
- if ( idx.isDescending(i) )
- cmp = -cmp;
- return cmp;
-}
-
-#ifdef TQT_DEBUG_DATAMANAGER
-static void debug_datamanager_buffer( const TQString& msg, TQSqlRecord* cursor )
-{
- qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- qDebug( "%s", msg.latin1() );
- for ( uint j = 0; j < cursor->count(); ++j ) {
- qDebug( "%s", (cursor->field(j)->name() + " type:"
- + TQString(cursor->field(j)->value().typeName())
- + " value:" + cursor->field(j)->value().toString())
- .latin1() );
- }
-}
-#endif
-
-
-/*! \internal
-
- Relocates the default cursor to the record matching the cursor's
-edit buffer. Only the field names specified by \a idx are used to
-determine an exact match of the cursor to the edit buffer. However,
-other fields in the edit buffer are also used during the search,
-therefore all fields in the edit buffer should be primed with desired
-values for the record being sought. This function is typically used
-to relocate a cursor to the correct position after an insert or
-update. For example:
-
-\code
- TQSqlCursor* myCursor = myManager.cursor();
- ...
- TQSqlRecord* buf = myCursor->primeUpdate();
- buf->setValue( "name", "Ola" );
- buf->setValue( "city", "Oslo" );
- ...
- myCursor->update(); // update current record
- myCursor->select(); // refresh the cursor
- myManager.findBuffer( myCursor->primaryIndex() ); // go to the updated record
-\endcode
-
-*/
-
-//## possibly add tqsizeHint parameter
-bool TQSqlCursorManager::findBuffer( const TQSqlIndex& idx, int atHint )
-{
-#ifdef TQT_DEBUG_DATAMANAGER
- qDebug("TQSqlCursorManager::findBuffer:");
-#endif
- TQSqlCursor* cur = cursor();
- if ( !cur )
- return FALSE;
- if ( !cur->isActive() )
- return FALSE;
- if ( !idx.count() ) {
- if ( cur->at() == TQSql::BeforeFirst )
- cur->next();
- return FALSE;
- }
- TQSqlRecord* buf = cur->editBuffer();
- bool indexEquals = FALSE;
-#ifdef TQT_DEBUG_DATAMANAGER
- qDebug(" Checking hint...");
-#endif
- /* check the hint */
- if ( cur->seek( atHint ) )
- indexEquals = index_matches( cur, buf, idx );
-
- if ( !indexEquals ) {
-#ifdef TQT_DEBUG_DATAMANAGER
- qDebug(" Checking current page...");
-#endif
- /* check current page */
- int pageSize = 20;
- int startIdx = TQMAX( atHint - pageSize, 0 );
- int endIdx = atHint + pageSize;
- for ( int j = startIdx; j <= endIdx; ++j ) {
- if ( cur->seek( j ) ) {
- indexEquals = index_matches( cur, buf, idx );
- if ( indexEquals )
- break;
- }
- }
- }
-
- if ( !indexEquals && cur->driver()->hasFeature( TQSqlDriver::QuerySize )
- && cur->sort().count() ) {
-#ifdef TQT_DEBUG_DATAMANAGER
- qDebug(" Using binary search...");
-#endif
- // binary search based on record buffer and current sort fields
- int lo = 0;
- int hi = cur->size();
- int mid;
- if ( compare_recs( buf, cur, cur->sort() ) >= 0 )
- lo = cur->at();
- while ( lo != hi ) {
- mid = lo + (hi - lo) / 2;
- if ( !cur->seek( mid ) )
- break;
- if ( index_matches( cur, buf, idx ) ) {
- indexEquals = TRUE;
- break;
- }
- int c = compare_recs( buf, cur, cur->sort() );
- if ( c < 0 ) {
- hi = mid;
- } else if ( c == 0 ) {
- // found it, but there may be duplicates
- int at = mid;
- do {
- mid--;
- if ( !cur->seek( mid ) )
- break;
- if ( index_matches( cur, buf, idx ) ) {
- indexEquals = TRUE;
- break;
- }
- } while ( compare_recs( buf, cur, cur->sort() ) == 0 );
-
- if ( !indexEquals ) {
- mid = at;
- do {
- mid++;
- if ( !cur->seek( mid ) )
- break;
- if ( index_matches( cur, buf, idx ) ) {
- indexEquals = TRUE;
- break;
- }
- } while ( compare_recs( buf, cur, cur->sort() ) == 0 );
- }
- break;
- } else if ( c > 0 ) {
- lo = mid + 1;
- }
- }
- }
-
- if ( !indexEquals ) {
-#ifdef TQT_DEBUG_DATAMANAGER
- qDebug(" Using brute search...");
-#endif
-#ifndef TQT_NO_CURSOR
- TQApplication::setOverrideCursor( TQt::WaitCursor );
-#endif
- /* give up, use brute force */
- int startIdx = 0;
- if ( cur->at() != startIdx ) {
- cur->seek( startIdx );
- }
- for ( ;; ) {
- indexEquals = FALSE;
- indexEquals = index_matches( cur, buf, idx );
- if ( indexEquals )
- break;
- if ( !cur->next() )
- break;
- }
-#ifndef TQT_NO_CURSOR
- TQApplication::restoreOverrideCursor();
-#endif
- }
-#ifdef TQT_DEBUG_DATAMANAGER
- qDebug(" Done, result:" + TQString::number( indexEquals ) );
-#endif
- return indexEquals;
-}
-
-#ifndef TQT_NO_STQL_FORM
-
-class TQSqlFormManagerPrivate
-{
-public:
- TQSqlFormManagerPrivate() : frm(0), rcd(0) {}
- TQSqlForm* frm;
- TQSqlRecord* rcd;
-};
-
-
-/*! \internal
-
- Creates a form manager.
-
-*/
-
-TQSqlFormManager::TQSqlFormManager()
-{
- d = new TQSqlFormManagerPrivate();
-}
-
-/*! \internal
-
- Destroys the object and frees any allocated resources.
-
-*/
-
-TQSqlFormManager::~TQSqlFormManager()
-{
- delete d;
-}
-
-/*! \internal
-
- Clears the default form values. If there is no default form,
- nothing happens,
-
-*/
-
-void TQSqlFormManager::clearValues()
-{
- if ( form() )
- form()->clearValues();
-}
-
-/*! \internal
-
- Sets the form used by the form manager to \a form. If a record has
- already been assigned to the form manager, that record is also used by
- the \a form to display data.
-
- \sa form()
-
-*/
-
-void TQSqlFormManager::setForm( TQSqlForm* form )
-{
- d->frm = form;
- if ( d->rcd && d->frm )
- d->frm->setRecord( d->rcd );
-}
-
-
-/*! \internal
-
- Returns the default form used by the form manager, or 0 if there is
- none.
-
- \sa setForm()
-
-*/
-
-TQSqlForm* TQSqlFormManager::form()
-{
- return d->frm;
-}
-
-
-/*! \internal
-
- Sets the record used by the form manager to \a record. If a form has
- already been assigned to the form manager, \a record is also used by
- the default form to display data.
-
- \sa record()
-
-*/
-
-void TQSqlFormManager::setRecord( TQSqlRecord* record )
-{
- d->rcd = record;
- if ( d->frm ) {
- d->frm->setRecord( d->rcd );
- }
-}
-
-
-/*! \internal
-
- Returns the default record used by the form manager, or 0 if there is
- none.
-
- \sa setRecord()
-*/
-
-TQSqlRecord* TQSqlFormManager::record()
-{
- return d->rcd;
-}
-
-
-/*! \internal
-
- Causes the default form to read its fields . If there is no
- default form, nothing happens.
-
- \sa setForm()
-
-*/
-
-void TQSqlFormManager::readFields()
-{
- if ( d->frm ) {
- d->frm->readFields();
- }
-}
-
-/*! \internal
-
- Causes the default form to write its fields . If there is no
- default form, nothing happens.
-
- \sa setForm()
-
-*/
-
-void TQSqlFormManager::writeFields()
-{
- if ( d->frm ) {
- d->frm->writeFields();
- }
-}
-
-#endif // TQT_NO_STQL_FORM
-
-class TQDataManagerPrivate
-{
-public:
- TQDataManagerPrivate()
- : mode( TQSql::None ), autoEd( TRUE ), confEdits( 3 ),
- confCancs( FALSE ) {}
- TQSql::Op mode;
- bool autoEd;
- TQBitArray confEdits;
- bool confCancs;
-
-};
-
-/*!
- \class TQDataManager qsqlmanager_p.h
- \ingroup database
-
- \brief The TQDataManager class is an internal class for implementing
- the data-aware widgets.
-
- \internal
-
- TQDataManager is a strictly internal class that acts as a base class
- for other data-aware widgets.
-
-*/
-
-
-/*! \internal
-
- Constructs an empty data handler.
-
-*/
-
-TQDataManager::TQDataManager()
-{
- d = new TQDataManagerPrivate();
-}
-
-
-/*! \internal
-
- Destroys the object and frees any allocated resources.
-
-*/
-
-TQDataManager::~TQDataManager()
-{
- delete d;
-}
-
-
-/*! \internal
-
- Virtual function which is called when an error has occurred The
- default implementation displays a warning message to the user with
- information about the error.
-
-*/
-void TQDataManager::handleError( TQWidget* parent, const TQSqlError& e )
-{
-#ifndef TQT_NO_MESSAGEBOX
- if (e.driverText().isEmpty() && e.databaseText().isEmpty()) {
- TQMessageBox::warning ( parent, "Warning", "An error occurred while accessing the database");
- } else {
- TQMessageBox::warning ( parent, "Warning", e.driverText() + "\n" + e.databaseText(),
- 0, 0 );
- }
-#endif // TQT_NO_MESSAGEBOX
-}
-
-
-/*! \internal
-
- Sets the internal mode to \a m.
-
-*/
-
-void TQDataManager::setMode( TQSql::Op m )
-{
- d->mode = m;
-}
-
-
-/*! \internal
-
- Returns the current mode.
-
-*/
-
-TQSql::Op TQDataManager::mode() const
-{
- return d->mode;
-}
-
-
-/*! \internal
-
- Sets the auto-edit mode to \a auto.
-
-*/
-
-void TQDataManager::setAutoEdit( bool autoEdit )
-{
- d->autoEd = autoEdit;
-}
-
-
-
-/*! \internal
-
- Returns TRUE if auto-edit mode is enabled; otherwise returns FALSE.
-
-*/
-
-bool TQDataManager::autoEdit() const
-{
- return d->autoEd;
-}
-
-/*! \internal
-
- If \a confirm is TRUE, all edit operations (inserts, updates and
- deletes) will be confirmed by the user. If \a confirm is FALSE (the
- default), all edits are posted to the database immediately.
-
-*/
-void TQDataManager::setConfirmEdits( bool confirm )
-{
- d->confEdits.fill( confirm );
-}
-
-/*! \internal
-
- If \a confirm is TRUE, all inserts will be confirmed by the user.
- If \a confirm is FALSE (the default), all edits are posted to the
- database immediately.
-
-*/
-
-void TQDataManager::setConfirmInsert( bool confirm )
-{
- d->confEdits[ TQSql::Insert ] = confirm;
-}
-
-/*! \internal
-
- If \a confirm is TRUE, all updates will be confirmed by the user.
- If \a confirm is FALSE (the default), all edits are posted to the
- database immediately.
-
-*/
-
-void TQDataManager::setConfirmUpdate( bool confirm )
-{
- d->confEdits[ TQSql::Update ] = confirm;
-}
-
-/*! \internal
-
- If \a confirm is TRUE, all deletes will be confirmed by the user.
- If \a confirm is FALSE (the default), all edits are posted to the
- database immediately.
-
-*/
-
-void TQDataManager::setConfirmDelete( bool confirm )
-{
- d->confEdits[ TQSql::Delete ] = confirm;
-}
-
-/*! \internal
-
- Returns TRUE if the table confirms all edit operations (inserts,
- updates and deletes), otherwise returns FALSE.
-*/
-
-bool TQDataManager::confirmEdits() const
-{
- return ( confirmInsert() && confirmUpdate() && confirmDelete() );
-}
-
-/*! \internal
-
- Returns TRUE if the table confirms inserts, otherwise returns
- FALSE.
-*/
-
-bool TQDataManager::confirmInsert() const
-{
- return d->confEdits[ TQSql::Insert ];
-}
-
-/*! \internal
-
- Returns TRUE if the table confirms updates, otherwise returns
- FALSE.
-*/
-
-bool TQDataManager::confirmUpdate() const
-{
- return d->confEdits[ TQSql::Update ];
-}
-
-/*! \internal
-
- Returns TRUE if the table confirms deletes, otherwise returns
- FALSE.
-*/
-
-bool TQDataManager::confirmDelete() const
-{
- return d->confEdits[ TQSql::Delete ];
-}
-
-/*! \internal
-
- If \a confirm is TRUE, all cancels will be confirmed by the user
- through a message box. If \a confirm is FALSE (the default), all
- cancels occur immediately.
-*/
-
-void TQDataManager::setConfirmCancels( bool confirm )
-{
- d->confCancs = confirm;
-}
-
-/*! \internal
-
- Returns TRUE if the table confirms cancels, otherwise returns FALSE.
-*/
-
-bool TQDataManager::confirmCancels() const
-{
- return d->confCancs;
-}
-
-/*! \internal
-
- Virtual function which returns a confirmation for an edit of mode \a
- m. Derived classes can reimplement this function and provide their
- own confirmation dialog. The default implementation uses a message
- box which prompts the user to confirm the edit action. The dialog
- is centered over \a parent.
-
-*/
-
-TQSql::Confirm TQDataManager::confirmEdit( TQWidget* parent, TQSql::Op m )
-{
- int ans = 2;
- if ( m == TQSql::Delete ) {
-#ifndef TQT_NO_MESSAGEBOX
- ans = TQMessageBox::information( parent,
- tqApp->translate( "TQSql", "Delete" ),
- tqApp->translate( "TQSql", "Delete this record?" ),
- tqApp->translate( "TQSql", "Yes" ),
- tqApp->translate( "TQSql", "No" ),
- TQString::null, 0, 1 );
-#else
- ans = TQSql::No;
-#endif // TQT_NO_MESSAGEBOX
- } else if ( m != TQSql::None ) {
- TQString caption;
- if ( m == TQSql::Insert ) {
- caption = tqApp->translate( "TQSql", "Insert" );
- } else { // TQSql::Update
- caption = tqApp->translate( "TQSql", "Update" );
- }
-#ifndef TQT_NO_MESSAGEBOX
- ans = TQMessageBox::information( parent, caption,
- tqApp->translate( "TQSql", "Save edits?" ),
- tqApp->translate( "TQSql", "Yes" ),
- tqApp->translate( "TQSql", "No" ),
- tqApp->translate( "TQSql", "Cancel" ),
- 0, 2 );
-#else
- ans = TQSql::No;
-#endif // TQT_NO_MESSAGEBOX
- }
-
- switch ( ans ) {
- case 0:
- return TQSql::Yes;
- case 1:
- return TQSql::No;
- default:
- return TQSql::Cancel;
- }
-}
-
-/*! \internal
-
- Virtual function which returns a confirmation for cancelling an edit
- mode \a m. Derived classes can reimplement this function and
- provide their own confirmation dialog. The default implementation
- uses a message box which prompts the user to confirm the edit
- action. The dialog is centered over \a parent.
-
-
-*/
-
-TQSql::Confirm TQDataManager::confirmCancel( TQWidget* parent, TQSql::Op )
-{
-#ifndef TQT_NO_MESSAGEBOX
- switch ( TQMessageBox::information( parent,
- tqApp->translate( "TQSql", "Confirm" ),
- tqApp->translate( "TQSql", "Cancel your edits?" ),
- tqApp->translate( "TQSql", "Yes" ),
- tqApp->translate( "TQSql", "No" ),
- TQString::null, 0, 1 ) ) {
- case 0:
- return TQSql::Yes;
- case 1:
- return TQSql::No;
- default:
- return TQSql::Cancel;
- }
-#else
- return TQSql::Yes;
-#endif // TQT_NO_MESSAGEBOX
-}
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlmanager_p.h b/tqtinterface/qt4/src/sql/tqsqlmanager_p.h
deleted file mode 100644
index da00830..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlmanager_p.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlManager class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLMANAGER_P_H
-#define TQSQLMANAGER_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the TQt API. It exists for the convenience
-// of other TQt classes. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-//
-
-#ifndef TQT_H
-#include "tqglobal.h"
-#include "tqstring.h"
-#include "tqstringlist.h"
-#include "tqsql.h"
-#include "tqsqlerror.h"
-#include "tqsqlindex.h"
-#include "tqsqlcursor.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlCursor;
-class TQSqlForm;
-class TQSqlCursorManagerPrivate;
-
-class TQM_EXPORT_SQL TQSqlCursorManager
-{
-public:
- TQSqlCursorManager();
- virtual ~TQSqlCursorManager();
-
- virtual void setSort( const TQSqlIndex& sort );
- virtual void setSort( const TQStringList& sort );
- TQStringList sort() const;
- virtual void setFilter( const TQString& filter );
- TQString filter() const;
- virtual void setCursor( TQSqlCursor* cursor, bool autoDelete = FALSE );
- TQSqlCursor* cursor() const;
-
- virtual void setAutoDelete( bool enable );
- bool autoDelete() const;
-
- virtual bool refresh();
- virtual bool findBuffer( const TQSqlIndex& idx, int atHint = 0 );
-
-private:
- TQSqlCursorManagerPrivate* d;
-};
-
-#ifndef TQT_NO_STQL_FORM
-
-class TQSqlFormManagerPrivate;
-
-class TQM_EXPORT_SQL TQSqlFormManager
-{
-public:
- TQSqlFormManager();
- virtual ~TQSqlFormManager();
-
- virtual void setForm( TQSqlForm* form );
- TQSqlForm* form();
- virtual void setRecord( TQSqlRecord* record );
- TQSqlRecord* record();
-
- virtual void clearValues();
- virtual void readFields();
- virtual void writeFields();
-
-private:
- TQSqlFormManagerPrivate* d;
-};
-
-#endif
-
-class TQWidget;
-class TQDataManagerPrivate;
-
-class TQM_EXPORT_SQL TQDataManager
-{
-public:
- TQDataManager();
- virtual ~TQDataManager();
-
- virtual void setMode( TQSql::Op m );
- TQSql::Op mode() const;
- virtual void setAutoEdit( bool autoEdit );
- bool autoEdit() const;
-
- virtual void handleError( TQWidget* parent, const TQSqlError& error );
- virtual TQSql::Confirm confirmEdit( TQWidget* parent, TQSql::Op m );
- virtual TQSql::Confirm confirmCancel( TQWidget* parent, TQSql::Op m );
-
- virtual void setConfirmEdits( bool confirm );
- virtual void setConfirmInsert( bool confirm );
- virtual void setConfirmUpdate( bool confirm );
- virtual void setConfirmDelete( bool confirm );
- virtual void setConfirmCancels( bool confirm );
-
- bool confirmEdits() const;
- bool confirmInsert() const;
- bool confirmUpdate() const;
- bool confirmDelete() const;
- bool confirmCancels() const;
-
-private:
- TQDataManagerPrivate* d;
-};
-
-
-#endif
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlpropertymap.cpp b/tqtinterface/qt4/src/sql/tqsqlpropertymap.cpp
deleted file mode 100644
index d1498d9..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlpropertymap.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlPropertyMap class
-**
-** Created : 2000-11-20
-**
-** Copyright (C) 2005-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 "tqsqlpropertymap.h"
-
-#ifndef TQT_NO_STQL_FORM
-
-#include "tqwidget.h"
-#include "tqcleanuphandler.h"
-#include "tqmetaobject.h"
-#include "tqmap.h"
-
-class TQSqlPropertyMapPrivate
-{
-public:
- TQSqlPropertyMapPrivate() {}
- TQMap< TQString, TQString > propertyMap;
-};
-
-/*!
- \class TQSqlPropertyMap tqsqlpropertymap.h
- \brief The TQSqlPropertyMap class is used to map widgets to SQL fields.
-
- \ingroup database
- \module sql
-
- The SQL module uses TQt \link properties.html object
- properties\endlink to insert and extract values from editor
- widgets.
-
- This class is used to map editors to SQL fields. This works by
- associating SQL editor class names to the properties used to
- insert and extract values to/from the editor.
-
- For example, a TQLineEdit can be used to edit text strings and
- other data types in TQDataTables or TQSqlForms. Several properties
- are defined in TQLineEdit, but only the \e text property is used to
- insert and extract text from a TQLineEdit. Both TQDataTable and
- TQSqlForm use the global TQSqlPropertyMap for inserting and
- extracting values to and from an editor widget. The global
- property map defines several common widgets and properties that
- are suitable for many applications. You can add and remove widget
- properties to suit your specific needs.
-
- If you want to use custom editors with your TQDataTable or
- TQSqlForm, you must install your own TQSqlPropertyMap for that table
- or form. Example:
-
- \code
- TQSqlPropertyMap *myMap = new TQSqlPropertyMap();
- TQSqlForm *myForm = new TQSqlForm( this );
- MyEditor myEditor( this );
-
- // Set the TQSqlForm's record buffer to the update buffer of
- // a pre-existing TQSqlCursor called 'cur'.
- myForm->setRecord( cur->primeUpdate() );
-
- // Install the customized map
- myMap->insert( "MyEditor", "content" );
- myForm->installPropertyMap( myMap ); // myForm now owns myMap
- ...
- // Insert a field into the form that uses a myEditor to edit the
- // field 'somefield'
- myForm->insert( &myEditor, "somefield" );
-
- // Update myEditor with the value from the mapped database field
- myForm->readFields();
- ...
- // Let the user edit the form
- ...
- // Update the database fields with the values in the form
- myForm->writeFields();
- ...
- \endcode
-
- You can also replace the global TQSqlPropertyMap that is used by
- default. (Bear in mind that TQSqlPropertyMap takes ownership of the
- new default map.)
-
- \code
- TQSqlPropertyMap *myMap = new TQSqlPropertyMap;
-
- myMap->insert( "MyEditor", "content" );
- TQSqlPropertyMap::installDefaultMap( myMap );
- ...
- \endcode
-
- \sa TQDataTable, TQSqlForm, TQSqlEditorFactory
-*/
-
-/*!
-
-Constructs a TQSqlPropertyMap.
-
-The default property mappings used by TQt widgets are:
-\table
-\header \i Widgets \i Property
-\row \i \l TQCheckBox,
- \l TQRadioButton
- \i checked
-\row \i \l TQComboBox,
- \l TQListBox
- \i currentItem
-\row \i \l TQDateEdit
- \i date
-\row \i \l TQDateTimeEdit
- \i dateTime
-\row \i \l TQTextBrowser
- \i source
-\row \i \l TQButton,
- \l TQDial,
- \l TQLabel,
- \l TQLineEdit,
- \l TQMultiLineEdit,
- \l TQPushButton,
- \l TQTextEdit,
- \i text
-\row \i \l TQTimeEdit
- \i time
-\row \i \l TQLCDNumber,
- \l TQScrollBar
- \l TQSlider,
- \l TQSpinBox
- \i value
-\endtable
-*/
-
-TQSqlPropertyMap::TQSqlPropertyMap()
-{
- d = new TQSqlPropertyMapPrivate();
- const struct MapData {
- const char *classname;
- const char *property;
- } mapData[] = {
- { "TQButton", "text" },
- { "TQCheckBox", "checked" },
- { "TQRadioButton", "checked" },
- { "TQComboBox", "currentItem" },
- { "TQDateEdit", "date" },
- { "TQDateTimeEdit", "dateTime" },
- { "TQDial", "value" },
- { "TQLabel", "text" },
- { "TQLCDNumber", "value" },
- { "TQLineEdit", "text" },
- { "TQListBox", "currentItem" },
- { "TQMultiLineEdit", "text" },
- { "TQPushButton", "text" },
- { "TQScrollBar", "value" },
- { "TQSlider", "value" },
- { "TQSpinBox", "value" },
- { "TQTextBrowser", "source" },
- { "TQTextEdit", "text" },
- { "TQTextView", "text" },
- { "TQTimeEdit", "time" }
- };
-
- const MapData *m = mapData;
- for ( uint i = 0; i < sizeof(mapData)/sizeof(MapData); i++, m++ )
- d->propertyMap.insert( m->classname, m->property );
-}
-
-/*!
- Destroys the TQSqlPropertyMap.
-
- Note that if the TQSqlPropertyMap is installed with
- installPropertyMap() the object it was installed into, e.g. the
- TQSqlForm, takes ownership and will delete the TQSqlPropertyMap when
- necessary.
-*/
-TQSqlPropertyMap::~TQSqlPropertyMap()
-{
- delete d;
-}
-
-/*!
- Returns the mapped property of \a widget as a TQVariant.
-*/
-TQVariant TQSqlPropertyMap::property( TQWidget * widget )
-{
- if( !widget ) return TQVariant();
- const QMetaObject* mo = widget->metaObject();
- while ( mo && !d->propertyMap.contains( TQString( mo->className() ) ) )
- mo = mo->superClass();
-
- if ( !mo ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlPropertyMap::property: %s does not exist", widget->metaObject()->className() );
-#endif
- return TQVariant();
- }
- return TQT_TQVARIANT_OBJECT(widget->property( d->propertyMap[ mo->className() ] ));
-}
-
-/*!
- Sets the property of \a widget to \a value.
-*/
-void TQSqlPropertyMap::setProperty( TQWidget * widget, const TQVariant & value )
-{
- if( !widget ) return;
-
- QMetaObject* mo = const_cast<QMetaObject*>(widget->metaObject());
- while ( mo && !d->propertyMap.contains( TQString( mo->className() ) ) )
- mo = const_cast<QMetaObject*>(mo->superClass());
- if ( !mo ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlPropertyMap::setProperty: %s not handled by TQSqlPropertyMap", widget->metaObject()->className() );
-#endif
- return;
- }
-
- widget->setProperty( d->propertyMap[ mo->className() ], value );
-}
-
-/*!
- Insert a new classname/property pair, which is used for custom SQL
- field editors. There \e must be a \c Q_PROPERTY clause in the \a
- classname class declaration for the \a property.
-*/
-void TQSqlPropertyMap::insert( const TQString & classname,
- const TQString & property )
-{
- d->propertyMap[ classname ] = property;
-}
-
-/*!
- Removes \a classname from the map.
-*/
-void TQSqlPropertyMap::remove( const TQString & classname )
-{
- d->propertyMap.remove( classname );
-}
-
-static TQSqlPropertyMap * defaultmap = 0;
-static TQCleanupHandler< TQSqlPropertyMap > qsql_cleanup_property_map;
-
-/*!
- Returns the application global TQSqlPropertyMap.
-*/
-TQSqlPropertyMap * TQSqlPropertyMap::defaultMap()
-{
- if( defaultmap == 0 ){
- defaultmap = new TQSqlPropertyMap();
- qsql_cleanup_property_map.add( &defaultmap );
- }
- return defaultmap;
-}
-
-/*!
- Replaces the global default property map with \a map. All
- TQDataTable and TQSqlForm instantiations will use this new map for
- inserting and extracting values to and from editors.
- \e{TQSqlPropertyMap takes ownership of \a map, and destroys it
- when it is no longer needed.}
-*/
-void TQSqlPropertyMap::installDefaultMap( TQSqlPropertyMap * map )
-{
- if( map == 0 ) return;
-
- if( defaultmap != 0 ){
- qsql_cleanup_property_map.remove( &defaultmap );
- delete defaultmap;
- }
- defaultmap = map;
- qsql_cleanup_property_map.add( &defaultmap );
-}
-
-#endif // TQT_NO_STQL_FORM
diff --git a/tqtinterface/qt4/src/sql/tqsqlpropertymap.h b/tqtinterface/qt4/src/sql/tqsqlpropertymap.h
deleted file mode 100644
index c356f5e..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlpropertymap.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlPropertyMap class
-**
-** Created : 2000-11-20
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLPROPERTYMAP_H
-#define TQSQLPROPERTYMAP_H
-
-#ifndef TQT_H
-#include "tqvariant.h"
-#include "tqstring.h"
-#endif // TQT_H
-
-#ifndef TQT_NO_STQL_FORM
-
-class TQWidget;
-class TQSqlPropertyMapPrivate;
-
-class TQ_EXPORT TQSqlPropertyMap {
-public:
- TQSqlPropertyMap();
- virtual ~TQSqlPropertyMap();
-
- TQVariant property( TQWidget * widget );
- virtual void setProperty( TQWidget * widget, const TQVariant & value );
-
- void insert( const TQString & classname, const TQString & property );
- void remove( const TQString & classname );
-
- static TQSqlPropertyMap * defaultMap();
- static void installDefaultMap( TQSqlPropertyMap * map );
-
-private: // Disabled copy constructor and operator=
-#if defined(TQ_DISABLE_COPY)
- TQSqlPropertyMap( const TQSqlPropertyMap & );
- TQSqlPropertyMap &operator=( const TQSqlPropertyMap & );
-#endif
- TQSqlPropertyMapPrivate* d;
-
-};
-
-#endif // TQT_NO_STQL_FORM
-#endif // TQSQLPROPERTYMAP_H
diff --git a/tqtinterface/qt4/src/sql/tqsqlquery.cpp b/tqtinterface/qt4/src/sql/tqsqlquery.cpp
deleted file mode 100644
index a1a7632..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlquery.cpp
+++ /dev/null
@@ -1,1215 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlQuery 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 "tqsqlquery.h"
-
-#ifndef TQT_NO_SQL
-
-//#define TQT_DEBUG_SQL
-
-#include "tqsqlresult.h"
-#include "tqsqldriver.h"
-#include "tqsqldatabase.h"
-#include "tqsql.h"
-#include "tqregexp.h"
-#include "private/tqsqlextension_p.h"
-
-
-/*!
-\internal
-*/
-TQSqlResultShared::TQSqlResultShared( TQSqlResult* result ): sqlResult(result)
-{
- if ( result )
- connect( result->driver(), TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotResultDestroyed()) );
-}
-
-/*!
-\internal
-*/
-TQSqlResultShared::~TQSqlResultShared()
-{
- delete sqlResult;
-}
-
-/*!
-\internal
-
-In case a plugin gets unloaded the pointer to the sqlResult gets invalid
-*/
-void TQSqlResultShared::slotResultDestroyed()
-{
- delete sqlResult;
- sqlResult = 0;
-}
-
-/*!
- \class TQSqlQuery tqsqlquery.h
- \brief The TQSqlQuery class provides a means of executing and
- manipulating SQL statements.
-
- \ingroup database
- \mainclass
- \module sql
-
- TQSqlQuery encapsulates the functionality involved in creating,
- navigating and retrieving data from SQL queries which are executed
- on a \l TQSqlDatabase. It can be used to execute DML (data
- manipulation language) statements, e.g. \c SELECT, \c INSERT, \c
- UPDATE and \c DELETE, and also DDL (data definition language)
- statements, e.g. \c{CREATE TABLE}. It can also be used to
- execute database-specific commands which are not standard SQL
- (e.g. \c{SET DATESTYLE=ISO} for PostgreSQL).
-
- Successfully executed SQL statements set the query's state to
- active (isActive() returns TRUE); otherwise the query's state is
- set to inactive. In either case, when executing a new SQL
- statement, the query is positioned on an invalid record; an active
- query must be navigated to a valid record (so that isValid()
- returns TRUE) before values can be retrieved.
-
- Navigating records is performed with the following functions:
-
- \list
- \i \c next()
- \i \c prev()
- \i \c first()
- \i \c last()
- \i \c \link TQSqlQuery::seek() seek\endlink(int)
- \endlist
-
- These functions allow the programmer to move forward, backward or
- arbitrarily through the records returned by the query. If you only
- need to move forward through the results, e.g. using next() or
- using seek() with a positive offset, you can use setForwardOnly()
- and save a significant amount of memory overhead. Once an active
- query is positioned on a valid record, data can be retrieved using
- value(). All data is transferred from the SQL backend using
- TQVariants.
-
- For example:
-
- \code
- TQSqlQuery query( "SELECT name FROM customer" );
- while ( query.next() ) {
- TQString name = query.value(0).toString();
- doSomething( name );
- }
- \endcode
-
- To access the data returned by a query, use the value() method.
- Each field in the data returned by a SELECT statement is accessed
- by passing the field's position in the statement, starting from 0.
- Information about the fields can be obtained via TQSqlDatabase::record().
- For the sake of efficiency there are no functions to access a field
- by name. (The \l TQSqlCursor class provides a higher-level interface
- with field access by name and automatic SQL generation.)
-
- TQSqlQuery supports prepared query execution and the binding of
- parameter values to placeholders. Some databases don't support
- these features, so for them TQt emulates the required
- functionality. For example, the Oracle and ODBC drivers have
- proper prepared query support, and TQt makes use of it; but for
- databases that don't have this support, TQt implements the feature
- itself, e.g. by replacing placeholders with actual values when a
- query is executed. The exception is positional binding using named
- placeholders, which requires that the database supports prepared
- queries.
-
- Oracle databases identify placeholders by using a colon-name
- syntax, e.g \c{:name}. ODBC simply uses \c ? characters. TQt
- supports both syntaxes (although you can't mix them in the same
- query).
-
- Below we present the same example using each of the four different
- binding approaches.
-
- <b>Named binding using named placeholders</b>
- \code
- TQSqlQuery query;
- query.prepare( "INSERT INTO atable (id, forename, surname) "
- "VALUES (:id, :forename, :surname)" );
- query.bindValue( ":id", 1001 );
- query.bindValue( ":forename", "Bart" );
- query.bindValue( ":surname", "Simpson" );
- query.exec();
- \endcode
-
- <b>Positional binding using named placeholders</b>
- \code
- TQSqlQuery query;
- query.prepare( "INSERT INTO atable (id, forename, surname) "
- "VALUES (:id, :forename, :surname)" );
- query.bindValue( 0, 1001 );
- query.bindValue( 1, "Bart" );
- query.bindValue( 2, "Simpson" );
- query.exec();
- \endcode
- <b>Note:</b> Using positional binding with named placeholders will
- only work if the database supports prepared queries. This can be
- checked with TQSqlDriver::hasFeature() using TQSqlDriver::PreparedQueries
- as argument for driver feature.
-
- <b>Binding values using positional placeholders #1</b>
- \code
- TQSqlQuery query;
- query.prepare( "INSERT INTO atable (id, forename, surname) "
- "VALUES (?, ?, ?)" );
- query.bindValue( 0, 1001 );
- query.bindValue( 1, "Bart" );
- query.bindValue( 2, "Simpson" );
- query.exec();
- \endcode
-
- <b>Binding values using positional placeholders #2</b>
- \code
- query.prepare( "INSERT INTO atable (id, forename, surname) "
- "VALUES (?, ?, ?)" );
- query.addBindValue( 1001 );
- query.addBindValue( "Bart" );
- query.addBindValue( "Simpson" );
- query.exec();
- \endcode
-
- <b>Binding values to a stored procedure</b>
- This code calls a stored procedure called \c AsciiToInt(), passing
- it a character through its in parameter, and taking its result in
- the out parameter.
- \code
- TQSqlQuery query;
- query.prepare( "call AsciiToInt(?, ?)" );
- query.bindValue( 0, "A" );
- query.bindValue( 1, 0, TQSql::Out );
- query.exec();
- int i = query.boundValue( 1 ).toInt(); // i is 65.
- \endcode
-
- \sa TQSqlDatabase TQSqlCursor TQVariant
-*/
-
-/*!
- Creates a TQSqlQuery object which uses the TQSqlResult \a r to
- communicate with a database.
-*/
-
-TQSqlQuery::TQSqlQuery( TQSqlResult * r )
-{
- d = new TQSqlResultShared( r );
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlQuery::~TQSqlQuery()
-{
- if (d->deref()) {
- delete d;
- }
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-
-TQSqlQuery::TQSqlQuery( const TQSqlQuery& other )
- : d(other.d)
-{
- d->ref();
-}
-
-/*!
- Creates a TQSqlQuery object using the SQL \a query and the database
- \a db. If \a db is 0, (the default), the application's default
- database is used. If \a query is not a null string, it will be
- executed.
-
- \sa TQSqlDatabase
-*/
-TQSqlQuery::TQSqlQuery( const TQString& query, TQSqlDatabase* db )
-{
- init( query, db );
-}
-
-/*!
- Creates a TQSqlQuery object using the database \a db. If \a db is
- 0, the application's default database is used.
-
- \sa TQSqlDatabase
-*/
-
-TQSqlQuery::TQSqlQuery( TQSqlDatabase* db )
-{
- init( TQString::null, db );
-}
-
-/*! \internal
-*/
-
-void TQSqlQuery::init( const TQString& query, TQSqlDatabase* db )
-{
- d = new TQSqlResultShared( 0 );
- TQSqlDatabase* database = db;
- if ( !database )
- database = TQSqlDatabase::database( TQSqlDatabase::defaultConnection, FALSE );
- if ( database )
- *this = database->driver()->createQuery();
- if ( !query.isNull() )
- exec( query );
-}
-
-/*!
- Assigns \a other to the query.
-*/
-
-TQSqlQuery& TQSqlQuery::operator=( const TQSqlQuery& other )
-{
- other.d->ref();
- deref();
- d = other.d;
- return *this;
-}
-
-/*!
- Returns TRUE if the query is active and positioned on a valid
- record and the \a field is NULL; otherwise returns FALSE. Note
- that for some drivers isNull() will not return accurate
- information until after an attempt is made to retrieve data.
-
- \sa isActive() isValid() value()
-*/
-
-bool TQSqlQuery::isNull( int field ) const
-{
- if ( !d->sqlResult )
- return FALSE;
- if ( d->sqlResult->isActive() && d->sqlResult->isValid() )
- return d->sqlResult->isNull( field );
- return FALSE;
-}
-
-/*!
- Executes the SQL in \a query. Returns TRUE and sets the query
- state to active if the query was successful; otherwise returns
- FALSE and sets the query state to inactive. The \a query string
- must use syntax appropriate for the SQL database being queried,
- for example, standard SQL.
-
- After the query is executed, the query is positioned on an \e
- invalid record, and must be navigated to a valid record before
- data values can be retrieved, e.g. using next().
-
- Note that the last error for this query is reset when exec() is
- called.
-
- \sa isActive() isValid() next() prev() first() last() seek()
-*/
-
-bool TQSqlQuery::exec ( const TQString& query )
-{
- if ( !d->sqlResult )
- return FALSE;
- if ( d->sqlResult->extension() && driver()->hasFeature( TQSqlDriver::PreparedQueries ) )
- d->sqlResult->extension()->clear();
- d->sqlResult->setActive( FALSE );
- d->sqlResult->setLastError( TQSqlError() );
- d->sqlResult->setAt( TQSql::BeforeFirst );
- if ( !driver() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::exec: no driver" );
-#endif
- return FALSE;
- }
- if ( d->count > 1 )
- *this = driver()->createQuery();
- d->sqlResult->setQuery( query.stripWhiteSpace() );
- d->executedQuery = d->sqlResult->lastQuery();
- if ( !driver()->isOpen() || driver()->isOpenError() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::exec: database not open" );
-#endif
- return FALSE;
- }
- if ( query.isNull() || query.length() == 0 ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::exec: empty query" );
-#endif
- return FALSE;
- }
-#ifdef TQT_DEBUG_SQL
- qDebug( "\n TQSqlQuery: " + query );
-#endif
- return d->sqlResult->reset( query );
-}
-
-/*!
- Returns the value of the \a{i}-th field in the query (zero based).
-
- The fields are numbered from left to right using the text of the
- \c SELECT statement, e.g. in \c{SELECT forename, surname FROM people},
- field 0 is \c forename and field 1 is \c surname. Using \c{SELECT *}
- is not recommended because the order of the fields in the query is
- undefined.
-
- An invalid TQVariant is returned if field \a i does not exist, if
- the query is inactive, or if the query is positioned on an invalid
- record.
-
- \sa prev() next() first() last() seek() isActive() isValid()
-*/
-
-TQVariant TQSqlQuery::value( int i ) const
-{
- if ( !d->sqlResult )
- return TQVariant();
- if ( isActive() && isValid() && ( i > TQSql::BeforeFirst ) ) {
- return d->sqlResult->data( i );
- } else {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQSqlQuery::value: not positioned on a valid record" );
-#endif
- }
- return TQVariant();
-}
-
-/*!
- Returns the current internal position of the query. The first
- record is at position zero. If the position is invalid, a
- TQSql::Location will be returned indicating the invalid position.
-
- \sa prev() next() first() last() seek() isActive() isValid()
-*/
-
-int TQSqlQuery::at() const
-{
- if ( !d->sqlResult )
- return TQSql::BeforeFirst;
- return d->sqlResult->at();
-}
-
-/*!
- Returns the text of the current query being used, or TQString::null
- if there is no current query text.
-
- \sa executedQuery()
-*/
-
-TQString TQSqlQuery::lastQuery() const
-{
- if ( !d->sqlResult )
- return TQString::null;
- return d->sqlResult->lastQuery();
-}
-
-/*!
- Returns the database driver associated with the query.
-*/
-
-const TQSqlDriver* TQSqlQuery::driver() const
-{
- if ( !d->sqlResult )
- return 0;
- return d->sqlResult->driver();
-}
-
-/*!
- Returns the result associated with the query.
-*/
-
-const TQSqlResult* TQSqlQuery::result() const
-{
- return d->sqlResult;
-}
-
-/*!
- Retrieves the record at position (offset) \a i, if available, and
- positions the query on the retrieved record. The first record is
- at position 0. Note that the query must be in an active state and
- isSelect() must return TRUE before calling this function.
-
- If \a relative is FALSE (the default), the following rules apply:
-
- \list
- \i If \a i is negative, the result is positioned before the
- first record and FALSE is returned.
- \i Otherwise, an attempt is made to move to the record at position
- \a i. If the record at position \a i could not be retrieved, the
- result is positioned after the last record and FALSE is returned. If
- the record is successfully retrieved, TRUE is returned.
- \endlist
-
- If \a relative is TRUE, the following rules apply:
-
- \list
- \i If the result is currently positioned before the first
- record or on the first record, and \a i is negative, there is no
- change, and FALSE is returned.
- \i If the result is currently located after the last record, and
- \a i is positive, there is no change, and FALSE is returned.
- \i If the result is currently located somewhere in the middle,
- and the relative offset \a i moves the result below zero, the
- result is positioned before the first record and FALSE is
- returned.
- \i Otherwise, an attempt is made to move to the record \a i
- records ahead of the current record (or \a i records behind the
- current record if \a i is negative). If the record at offset \a i
- could not be retrieved, the result is positioned after the last
- record if \a i >= 0, (or before the first record if \a i is
- negative), and FALSE is returned. If the record is successfully
- retrieved, TRUE is returned.
- \endlist
-
- \sa next() prev() first() last() at() isActive() isValid()
-*/
-bool TQSqlQuery::seek( int i, bool relative )
-{
- if ( !isSelect() || !isActive() )
- return FALSE;
- beforeSeek();
- checkDetach();
- int actualIdx;
- if ( !relative ) { // arbitrary seek
- if ( i < 0 ) {
- d->sqlResult->setAt( TQSql::BeforeFirst );
- afterSeek();
- return FALSE;
- }
- actualIdx = i;
- } else {
- switch ( at() ) { // relative seek
- case TQSql::BeforeFirst:
- if ( i > 0 )
- actualIdx = i;
- else {
- afterSeek();
- return FALSE;
- }
- break;
- case TQSql::AfterLast:
- if ( i < 0 ) {
- d->sqlResult->fetchLast();
- actualIdx = at() + i;
- } else {
- afterSeek();
- return FALSE;
- }
- break;
- default:
- if ( ( at() + i ) < 0 ) {
- d->sqlResult->setAt( TQSql::BeforeFirst );
- afterSeek();
- return FALSE;
- }
- actualIdx = at() + i;
- break;
- }
- }
- // let drivers optimize
- if ( isForwardOnly() && actualIdx < at() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::seek: cannot seek backwards in a forward only query" );
-#endif
- afterSeek();
- return FALSE;
- }
- if ( actualIdx == ( at() + 1 ) && at() != TQSql::BeforeFirst ) {
- if ( !d->sqlResult->fetchNext() ) {
- d->sqlResult->setAt( TQSql::AfterLast );
- afterSeek();
- return FALSE;
- }
- afterSeek();
- return TRUE;
- }
- if ( actualIdx == ( at() - 1 ) ) {
- if ( !d->sqlResult->fetchPrev() ) {
- d->sqlResult->setAt( TQSql::BeforeFirst );
- afterSeek();
- return FALSE;
- }
- afterSeek();
- return TRUE;
- }
- if ( !d->sqlResult->fetch( actualIdx ) ) {
- d->sqlResult->setAt( TQSql::AfterLast );
- afterSeek();
- return FALSE;
- }
- afterSeek();
- return TRUE;
-}
-
-/*!
- Retrieves the next record in the result, if available, and
- positions the query on the retrieved record. Note that the result
- must be in an active state and isSelect() must return TRUE before
- calling this function or it will do nothing and return FALSE.
-
- The following rules apply:
-
- \list
- \i If the result is currently located before the first
- record, e.g. immediately after a query is executed, an attempt is
- made to retrieve the first record.
-
- \i If the result is currently located after the last record,
- there is no change and FALSE is returned.
-
- \i If the result is located somewhere in the middle, an attempt
- is made to retrieve the next record.
- \endlist
-
- If the record could not be retrieved, the result is positioned after
- the last record and FALSE is returned. If the record is successfully
- retrieved, TRUE is returned.
-
- \sa prev() first() last() seek() at() isActive() isValid()
-*/
-
-bool TQSqlQuery::next()
-{
- if ( !isSelect() || !isActive() )
- return FALSE;
- beforeSeek();
- checkDetach();
- bool b = FALSE;
- switch ( at() ) {
- case TQSql::BeforeFirst:
- b = d->sqlResult->fetchFirst();
- afterSeek();
- return b;
- case TQSql::AfterLast:
- afterSeek();
- return FALSE;
- default:
- if ( !d->sqlResult->fetchNext() ) {
- d->sqlResult->setAt( TQSql::AfterLast );
- afterSeek();
- return FALSE;
- }
- afterSeek();
- return TRUE;
- }
-}
-
-/*!
- Retrieves the previous record in the result, if available, and
- positions the query on the retrieved record. Note that the result
- must be in an active state and isSelect() must return TRUE before
- calling this function or it will do nothing and return FALSE.
-
- The following rules apply:
-
- \list
- \i If the result is currently located before the first record,
- there is no change and FALSE is returned.
-
- \i If the result is currently located after the last record, an
- attempt is made to retrieve the last record.
-
- \i If the result is somewhere in the middle, an attempt is made
- to retrieve the previous record.
- \endlist
-
- If the record could not be retrieved, the result is positioned
- before the first record and FALSE is returned. If the record is
- successfully retrieved, TRUE is returned.
-
- \sa next() first() last() seek() at() isActive() isValid()
-*/
-
-bool TQSqlQuery::prev()
-{
- if ( !isSelect() || !isActive() )
- return FALSE;
- if ( isForwardOnly() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::seek: cannot seek backwards in a forward only query" );
-#endif
- return FALSE;
- }
-
- beforeSeek();
- checkDetach();
- bool b = FALSE;
- switch ( at() ) {
- case TQSql::BeforeFirst:
- afterSeek();
- return FALSE;
- case TQSql::AfterLast:
- b = d->sqlResult->fetchLast();
- afterSeek();
- return b;
- default:
- if ( !d->sqlResult->fetchPrev() ) {
- d->sqlResult->setAt( TQSql::BeforeFirst );
- afterSeek();
- return FALSE;
- }
- afterSeek();
- return TRUE;
- }
-}
-
-/*!
- Retrieves the first record in the result, if available, and
- positions the query on the retrieved record. Note that the result
- must be in an active state and isSelect() must return TRUE before
- calling this function or it will do nothing and return FALSE.
- Returns TRUE if successful. If unsuccessful the query position is
- set to an invalid position and FALSE is returned.
-
- \sa next() prev() last() seek() at() isActive() isValid()
-*/
-
-bool TQSqlQuery::first()
-{
- if ( !isSelect() || !isActive() )
- return FALSE;
- if ( isForwardOnly() && at() > TQSql::BeforeFirst ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::seek: cannot seek backwards in a forward only query" );
-#endif
- return FALSE;
- }
- beforeSeek();
- checkDetach();
- bool b = FALSE;
- b = d->sqlResult->fetchFirst();
- afterSeek();
- return b;
-}
-
-/*!
- Retrieves the last record in the result, if available, and
- positions the query on the retrieved record. Note that the result
- must be in an active state and isSelect() must return TRUE before
- calling this function or it will do nothing and return FALSE.
- Returns TRUE if successful. If unsuccessful the query position is
- set to an invalid position and FALSE is returned.
-
- \sa next() prev() first() seek() at() isActive() isValid()
-*/
-
-bool TQSqlQuery::last()
-{
- if ( !isSelect() || !isActive() )
- return FALSE;
- beforeSeek();
- checkDetach();
- bool b = FALSE;
- b = d->sqlResult->fetchLast();
- afterSeek();
- return b;
-}
-
-/*!
- Returns the size of the result, (number of rows returned), or -1
- if the size cannot be determined or if the database does not
- support reporting information about query sizes. Note that for
- non-\c SELECT statements (isSelect() returns FALSE), size() will
- return -1. If the query is not active (isActive() returns FALSE),
- -1 is returned.
-
- To determine the number of rows affected by a non-SELECT
- statement, use numRowsAffected().
-
- \sa isActive() numRowsAffected() TQSqlDriver::hasFeature()
-*/
-int TQSqlQuery::size() const
-{
- if ( !d->sqlResult )
- return -1;
- if ( isActive() && d->sqlResult->driver()->hasFeature( TQSqlDriver::QuerySize ) )
- return d->sqlResult->size();
- return -1;
-}
-
-/*!
- Returns the number of rows affected by the result's SQL statement,
- or -1 if it cannot be determined. Note that for \c SELECT
- statements, the value is undefined; see size() instead. If the
- query is not active (isActive() returns FALSE), -1 is returned.
-
- \sa size() TQSqlDriver::hasFeature()
-*/
-
-int TQSqlQuery::numRowsAffected() const
-{
- if ( !d->sqlResult )
- return -1;
- if ( isActive() )
- return d->sqlResult->numRowsAffected();
- return -1;
-}
-
-/*!
- Returns error information about the last error (if any) that
- occurred.
-
- \sa TQSqlError
-*/
-
-TQSqlError TQSqlQuery::lastError() const
-{
- if ( !d->sqlResult )
- return TQSqlError();
- return d->sqlResult->lastError();
-}
-
-/*!
- Returns TRUE if the query is currently positioned on a valid
- record; otherwise returns FALSE.
-*/
-
-bool TQSqlQuery::isValid() const
-{
- if ( !d->sqlResult )
- return FALSE;
- return d->sqlResult->isValid();
-}
-
-/*!
- Returns TRUE if the query is currently active; otherwise returns
- FALSE.
-*/
-
-bool TQSqlQuery::isActive() const
-{
- if ( !d->sqlResult )
- return FALSE;
- return d->sqlResult->isActive();
-}
-
-/*!
- Returns TRUE if the current query is a \c SELECT statement;
- otherwise returns FALSE.
-*/
-
-bool TQSqlQuery::isSelect() const
-{
- if ( !d->sqlResult )
- return FALSE;
- return d->sqlResult->isSelect();
-}
-
-/*!
- Returns TRUE if you can only scroll \e forward through a result
- set; otherwise returns FALSE.
-
- \sa setForwardOnly()
-*/
-bool TQSqlQuery::isForwardOnly() const
-{
- if ( !d->sqlResult )
- return FALSE;
- return d->sqlResult->isForwardOnly();
-}
-
-/*!
- Sets forward only mode to \a forward. If forward is TRUE only
- next(), and seek() with positive values, are allowed for
- navigating the results. Forward only mode needs far less memory
- since results do not need to be cached.
-
- Forward only mode is off by default.
-
- Forward only mode cannot be used with data aware widgets like
- TQDataTable, since they must to be able to scroll backward as well
- as forward.
-
- \sa isForwardOnly(), next(), seek()
-*/
-void TQSqlQuery::setForwardOnly( bool forward )
-{
- if ( d->sqlResult )
- d->sqlResult->setForwardOnly( forward );
-}
-
-/*!
- \internal
-*/
-
-void TQSqlQuery::deref()
-{
- if ( d->deref() ) {
- delete d;
- d = 0;
- }
-}
-
-/*!
- \internal
-*/
-
-bool TQSqlQuery::checkDetach()
-{
- if ( d->count > 1 && d->sqlResult ) {
- TQString sql = d->sqlResult->lastQuery();
- *this = driver()->createQuery();
- exec( sql );
- return TRUE;
- }
- return FALSE;
-}
-
-
-/*!
- Protected virtual function called before the internal record
- pointer is moved to a new record. The default implementation does
- nothing.
-*/
-
-void TQSqlQuery::beforeSeek()
-{
-
-}
-
-
-/*!
- Protected virtual function called after the internal record
- pointer is moved to a new record. The default implementation does
- nothing.
-*/
-
-void TQSqlQuery::afterSeek()
-{
-
-}
-
-// XXX: Hack to keep BCI - remove in 4.0. TQSqlExtension should be
-// removed, and the prepare(), exec() etc. fu's should be
-// made virtual members of TQSqlQuery/TQSqlResult
-
-/*!
- Prepares the SQL query \a query for execution. The query may
- contain placeholders for binding values. Both Oracle style
- colon-name (e.g. \c{:surname}), and ODBC style (e.g. \c{?})
- placeholders are supported; but they cannot be mixed in the same
- query. See the \link #details Description\endlink for examples.
-
- \sa exec(), bindValue(), addBindValue()
-*/
-bool TQSqlQuery::prepare( const TQString& query )
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return FALSE;
- d->sqlResult->setActive( FALSE );
- d->sqlResult->setLastError( TQSqlError() );
- d->sqlResult->setAt( TQSql::BeforeFirst );
- d->sqlResult->extension()->clear();
- if ( !driver() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::prepare: no driver" );
-#endif
- return FALSE;
- }
- if ( d->count > 1 )
- *this = driver()->createQuery();
- d->sqlResult->setQuery( query.stripWhiteSpace() );
- if ( !driver()->isOpen() || driver()->isOpenError() ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::prepare: database not open" );
-#endif
- return FALSE;
- }
- if ( query.isNull() || query.length() == 0 ) {
-#ifdef TQT_CHECK_RANGE
- qWarning("TQSqlQuery::prepare: empty query" );
-#endif
- return FALSE;
- }
-#ifdef TQT_DEBUG_SQL
- qDebug( "\n TQSqlQuery: " + query );
-#endif
- TQString q = query;
- TQRegExp rx(TQString::tqfromLatin1("'[^']*'|:([a-zA-Z0-9_]+)"));
- if ( driver()->hasFeature( TQSqlDriver::PreparedQueries ) ) {
- // below we substitute Oracle placeholders with ODBC ones and
- // vice versa to make this db independent
- int i = 0, cnt = 0;
- if ( driver()->hasFeature( TQSqlDriver::NamedPlaceholders ) ) {
- TQRegExp rx(TQString::tqfromLatin1("'[^']*'|\\?"));
- while ( (i = rx.search( q, i )) != -1 ) {
- if ( rx.cap(0) == "?" ) {
- q = q.replace( i, 1, ":f" + TQString::number(cnt) );
- cnt++;
- }
- i += rx.matchedLength();
- }
- } else if ( driver()->hasFeature( TQSqlDriver::PositionalPlaceholders ) ) {
- while ( (i = rx.search( q, i )) != -1 ) {
- if ( rx.cap(1).isEmpty() ) {
- i += rx.matchedLength();
- } else {
- // record the index of the placeholder - needed
- // for emulating named bindings with ODBC
- d->sqlResult->extension()->index[ cnt ]= rx.cap(0);
- q = q.replace( i, rx.matchedLength(), "?" );
- i++;
- cnt++;
- }
- }
- }
- d->executedQuery = q;
- return d->sqlResult->extension()->prepare( q );
- } else {
- int i = 0;
- while ( (i = rx.search( q, i )) != -1 ) {
- if ( !rx.cap(1).isEmpty() )
- d->sqlResult->extension()->holders.append( Holder( rx.cap(0), i ) );
- i += rx.matchedLength();
- }
- return TRUE; // fake prepares should always succeed
- }
-}
-
-/*!
- \overload
-
- Executes a previously prepared SQL query. Returns TRUE if the
- query executed successfully; otherwise returns FALSE.
-
- \sa prepare(), bindValue(), addBindValue()
-*/
-bool TQSqlQuery::exec()
-{
- bool ret;
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return FALSE;
- if ( driver()->hasFeature( TQSqlDriver::PreparedQueries ) ) {
- ret = d->sqlResult->extension()->exec();
- } else {
- // fake preparation - just replace the placeholders..
- TQString query = d->sqlResult->lastQuery();
- if ( d->sqlResult->extension()->bindMethod() == TQSqlExtension::BindByName ) {
- int i;
- TQVariant val;
- TQString holder;
- for ( i = (int)d->sqlResult->extension()->holders.count() - 1; i >= 0; --i ) {
- holder = d->sqlResult->extension()->holders[ (uint)i ].holderName;
- val = d->sqlResult->extension()->values[ holder ].value;
- TQSqlField f( "", val.type() );
- if ( val.isNull() )
- f.setNull();
- else
- f.setValue( val );
- query = query.replace( (uint)d->sqlResult->extension()->holders[ (uint)i ].holderPos,
- holder.length(), driver()->formatValue( &f ) );
- }
- } else {
- TQMap<int, TQString>::ConstIterator it;
- TQString val;
- int i = 0;
- for ( it = d->sqlResult->extension()->index.begin();
- it != d->sqlResult->extension()->index.end(); ++it ) {
- i = query.find( '?', i );
- if ( i > -1 ) {
- TQSqlField f( "", d->sqlResult->extension()->values[ it.data() ].value.type() );
- if ( d->sqlResult->extension()->values[ it.data() ].value.isNull() )
- f.setNull();
- else
- f.setValue( d->sqlResult->extension()->values[ it.data() ].value );
- val = driver()->formatValue( &f );
- query = query.replace( i, 1, driver()->formatValue( &f ) );
- i += val.length();
- }
- }
- }
- // have to retain the original query w/placeholders..
- TQString orig = d->sqlResult->lastQuery();
- ret = exec( query );
- d->executedQuery = query;
- d->sqlResult->setQuery( orig );
- }
- d->sqlResult->extension()->resetBindCount();
- return ret;
-}
-
-/*!
- Set the placeholder \a placeholder to be bound to value \a val in
- the prepared statement. Note that the placeholder mark (e.g \c{:})
- must be included when specifying the placeholder name. If \a type
- is \c TQSql::Out or \c TQSql::InOut, the placeholder will be
- overwritten with data from the database after the exec() call.
-
- \sa addBindValue(), prepare(), exec()
-*/
-void TQSqlQuery::bindValue( const TQString& placeholder, const TQVariant& val, TQSql::ParameterType type )
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return;
- d->sqlResult->extension()->bindValue( placeholder, val, type );
-}
-
-/*!
- \overload
-
- Set the placeholder in position \a pos to be bound to value \a val
- in the prepared statement. Field numbering starts at 0. If \a type
- is \c TQSql::Out or \c TQSql::InOut, the placeholder will be
- overwritten with data from the database after the exec() call.
-
- \sa addBindValue(), prepare(), exec()
-*/
-void TQSqlQuery::bindValue( int pos, const TQVariant& val, TQSql::ParameterType type )
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return;
- d->sqlResult->extension()->bindValue( pos, val, type );
-}
-
-/*!
- Adds the value \a val to the list of values when using positional
- value binding. The order of the addBindValue() calls determines
- which placeholder a value will be bound to in the prepared query.
- If \a type is \c TQSql::Out or \c TQSql::InOut, the placeholder will
- be overwritten with data from the database after the exec() call.
-
- \sa bindValue(), prepare(), exec()
-*/
-void TQSqlQuery::addBindValue( const TQVariant& val, TQSql::ParameterType type )
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return;
- d->sqlResult->extension()->addBindValue( val, type );
-}
-
-
-/*!
- \overload
-
- Binds the placeholder with type \c TQSql::In.
-*/
-void TQSqlQuery::bindValue( const TQString& placeholder, const TQVariant& val )
-{
- bindValue( placeholder, val, TQSql::In );
-}
-
-/*!
- \overload
-
- Binds the placeholder at position \a pos with type \c TQSql::In.
-*/
-void TQSqlQuery::bindValue( int pos, const TQVariant& val )
-{
- bindValue( pos, val, TQSql::In );
-}
-
-/*!
- \overload
-
- Binds the placeholder with type \c TQSql::In.
-*/
-void TQSqlQuery::addBindValue( const TQVariant& val )
-{
- addBindValue( val, TQSql::In );
-}
-
-/*!
- Returns the value for the \a placeholder.
-*/
-TQVariant TQSqlQuery::boundValue( const TQString& placeholder ) const
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return TQVariant();
- return d->sqlResult->extension()->boundValue( placeholder );
-}
-
-/*!
- \overload
-
- Returns the value for the placeholder at position \a pos.
-*/
-TQVariant TQSqlQuery::boundValue( int pos ) const
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return TQVariant();
- return d->sqlResult->extension()->boundValue( pos );
-}
-
-/*!
- Returns a map of the bound values.
-
- The bound values can be examined in the following way:
- \code
- TQSqlQuery query;
- ...
- // Examine the bound values - bound using named binding
- TQMap<TQString, TQVariant>::ConstIterator it;
- TQMap<TQString, TQVariant> vals = query.boundValues();
- for ( it = vals.begin(); it != vals.end(); ++it )
- qWarning( "Placeholder: " + it.key() + ", Value: " + (*it).toString() );
- ...
-
- // Examine the bound values - bound using positional binding
- TQValueList<TQVariant>::ConstIterator it;
- TQValueList<TQVariant> list = query.boundValues().values();
- int i = 0;
- for ( it = list.begin(); it != list.end(); ++it )
- qWarning( "Placeholder pos: %d, Value: " + (*it).toString(), i++ );
- ...
-
- \endcode
-*/
-TQMap<TQString,TQVariant> TQSqlQuery::boundValues() const
-{
- if ( !d->sqlResult || !d->sqlResult->extension() )
- return TQMap<TQString,TQVariant>();
- return d->sqlResult->extension()->boundValues();
-}
-
-/*!
- Returns the last query that was executed.
-
- In most cases this function returns the same as lastQuery(). If a
- prepared query with placeholders is executed on a DBMS that does
- not support it, the preparation of this query is emulated. The
- placeholders in the original query are replaced with their bound
- values to form a new query. This function returns the modified
- query. Useful for debugging purposes.
-
- \sa lastQuery()
-*/
-TQString TQSqlQuery::executedQuery() const
-{
- return d->executedQuery;
-}
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqlquery.h b/tqtinterface/qt4/src/sql/tqsqlquery.h
deleted file mode 100644
index 4fac1f2..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlquery.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlQuery class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSQLTQUERY_H
-#define TQSQLTQUERY_H
-
-#ifndef TQT_H
-#include "tqobject.h"
-#include "tqstring.h"
-#include "tqvariant.h"
-#include "tqvaluelist.h"
-#include "tqsqlerror.h"
-#include "tqsqlfield.h"
-#include "tqsql.h"
-#endif // TQT_H
-
-#ifndef TQT_NO_SQL
-
-class TQSqlDriver;
-class TQSqlResult;
-class TQSqlDatabase;
-
-class TQ_EXPORT TQSqlResultShared : public TQObject, public TQShared
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- TQSqlResultShared( TQSqlResult* result );
- virtual ~TQSqlResultShared();
- TQSqlResult* sqlResult;
- TQString executedQuery;
-private Q_SLOTS:
- void slotResultDestroyed();
-};
-
-class TQ_EXPORT TQSqlQuery
-{
-public:
- TQSqlQuery( TQSqlResult * r );
- TQSqlQuery( const TQString& query = TQString::null, TQSqlDatabase* db = 0 );
- TQ_EXPLICIT TQSqlQuery( TQSqlDatabase* db );
- TQSqlQuery( const TQSqlQuery& other );
- TQSqlQuery& operator=( const TQSqlQuery& other );
- virtual ~TQSqlQuery();
-
- bool isValid() const;
- bool isActive() const;
- bool isNull( int field ) const;
- int at() const;
- TQString lastQuery() const;
- int numRowsAffected() const;
- TQSqlError lastError() const;
- bool isSelect() const;
- int size() const;
- const TQSqlDriver* driver() const;
- const TQSqlResult* result() const;
- bool isForwardOnly() const;
- void setForwardOnly( bool forward );
-
- virtual bool exec ( const TQString& query );
- virtual TQVariant value( int i ) const;
-
- virtual bool seek( int i, bool relative = FALSE );
- virtual bool next();
- virtual bool prev();
- virtual bool first();
- virtual bool last();
-
- // prepared query support
- bool exec();
- bool prepare( const TQString& query );
- void bindValue( const TQString& placeholder, const TQVariant& val );
- void bindValue( int pos, const TQVariant& val );
- void addBindValue( const TQVariant& val );
- // remove these overloads in 4.0
- void bindValue( const TQString& placeholder, const TQVariant& val, TQSql::ParameterType type );
- void bindValue( int pos, const TQVariant& val, TQSql::ParameterType type );
- void addBindValue( const TQVariant& val, TQSql::ParameterType type );
- TQVariant boundValue( const TQString& placeholder ) const;
- TQVariant boundValue( int pos ) const;
- TQMap<TQString, TQVariant> boundValues() const;
- TQString executedQuery() const;
-
-protected:
- virtual void beforeSeek();
- virtual void afterSeek();
-
-private:
- void init( const TQString& query, TQSqlDatabase* db );
- void deref();
- bool checkDetach();
- TQSqlResultShared* d;
-};
-
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlrecord.cpp b/tqtinterface/qt4/src/sql/tqsqlrecord.cpp
deleted file mode 100644
index 00a7acc..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlrecord.cpp
+++ /dev/null
@@ -1,774 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlRecord class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlrecord.h"
-
-#ifndef TQT_NO_SQL
-
-#include "tqregexp.h"
-#include "tqvaluevector.h"
-#include "tqshared.h"
-#include "tqnamespace.h"
-
-class TQSqlRecordPrivate
-{
-public:
- class info {
- public:
- info() : nogen(FALSE){}
- ~info() {}
- info( const info& other )
- : field( other.field ), nogen( other.nogen )
- {
- }
- info& operator=(const info& other)
- {
- field = other.field;
- nogen = other.nogen;
- return *this;
- }
- bool isValid() const
- {
- return !field.name().isNull();
- }
- TQ_DUMMY_COMPARISON_OPERATOR(info)
- TQSqlField field;
- bool nogen;
- };
-
- TQSqlRecordPrivate(): cnt(0)
- {
- }
- TQSqlRecordPrivate( const TQSqlRecordPrivate& other )
- {
- *this = other;
- }
- ~TQSqlRecordPrivate() {};
- TQSqlRecordPrivate& operator=( const TQSqlRecordPrivate& other )
- {
- fi = other.fi;
- cnt = other.cnt;
- return *this;
- }
- void append( const TQSqlField& field )
- {
- info i;
- i.field = field;
- fi.append( i );
- cnt++;
- }
- void insert( int pos, const TQSqlField& field )
- {
- info i;
- i.field = field;
- if ( pos == (int)fi.size() )
- append( field );
- if ( pos > (int)fi.size() ) {
- fi.resize( pos + 1 );
- cnt++;
- }
- fi[ pos ] = i;
- }
- void remove( int i )
- {
- info inf;
- if ( i >= (int)fi.count() )
- return;
- if ( fi[ i ].isValid() )
- cnt--;
- fi[ i ] = inf;
- // clean up some memory
- while ( fi.count() && !fi.back().isValid() )
- fi.pop_back();
- }
- void clear()
- {
- fi.clear();
- cnt = 0;
- }
- bool isEmpty()
- {
- return cnt == 0;
- }
- info* fieldInfo( int i )
- {
- if ( i < (int)fi.count() )
- return &fi[i];
- return 0;
- }
- uint count() const
- {
- return cnt;
- }
- bool contains( int i ) const
- {
- return i >= 0 && i < (int)fi.count() && fi[ i ].isValid();
- }
-private:
- TQValueVector< info > fi;
- uint cnt;
-};
-
-TQSqlRecordShared::~TQSqlRecordShared()
-{
- if ( d )
- delete d;
-}
-
-/*!
- \class TQSqlRecord tqsqlfield.h
- \brief The TQSqlRecord class encapsulates a database record, i.e. a
- set of database fields.
-
- \ingroup database
- \module sql
-
- The TQSqlRecord class encapsulates the functionality and
- characteristics of a database record (usually a table or view within
- the database). TQSqlRecords support adding and removing fields as
- well as setting and retrieving field values.
-
- TQSqlRecord is implicitly shared. This means you can make copies of
- the record in time O(1). If multiple TQSqlRecord instances share
- the same data and one is modifying the record's data then this
- modifying instance makes a copy and modifies its private copy -
- thus it does not affect other instances.
-
- \sa TQSqlRecordInfo
-*/
-
-
-/*!
- Constructs an empty record.
-*/
-
-TQSqlRecord::TQSqlRecord()
-{
- sh = new TQSqlRecordShared( new TQSqlRecordPrivate() );
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-
-TQSqlRecord::TQSqlRecord( const TQSqlRecord& other )
- : sh( other.sh )
-{
- sh->ref();
-}
-
-/*!
- Sets the record equal to \a other.
-*/
-
-TQSqlRecord& TQSqlRecord::operator=( const TQSqlRecord& other )
-{
- other.sh->ref();
- deref();
- sh = other.sh;
- return *this;
-}
-
-/*! \internal
-*/
-
-void TQSqlRecord::deref()
-{
- if ( sh->deref() ) {
- delete sh;
- sh = 0;
- }
-}
-
-/*! \internal
-*/
-
-bool TQSqlRecord::checkDetach()
-{
- if ( sh->count > 1 ) {
- sh->deref();
- sh = new TQSqlRecordShared( new TQSqlRecordPrivate( *sh->d ) );
- return TRUE;
- }
- return FALSE;
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlRecord::~TQSqlRecord()
-{
- deref();
-}
-
-/*!
- Returns the value of the field located at position \a i in the
- record. If field \a i does not exist the resultant behaviour is
- undefined.
-
- This function should be used with \l{TQSqlQuery}s. When working
- with a TQSqlCursor the \link TQSqlCursor::value() value(const
- TQString&)\endlink overload which uses field names is more
- appropriate.
-*/
-
-TQVariant TQSqlRecord::value( int i ) const
-{
- const TQSqlField * f = field(i);
-
- if( f )
- return f->value();
- return TQVariant();
-}
-
-/*!
- \overload
-
- Returns the value of the field called \a name in the record. If
- field \a name does not exist the resultant behaviour is undefined.
-*/
-
-TQVariant TQSqlRecord::value( const TQString& name ) const
-{
- const TQSqlField * f = field( name );
-
- if( f )
- return f->value();
- return TQVariant();
-}
-
-/*!
- Returns the name of the field at position \a i. If the field does
- not exist, TQString::null is returned.
-*/
-
-TQString TQSqlRecord::fieldName( int i ) const
-{
- const TQSqlField* f = field( i );
- if ( f )
- return f->name();
- return TQString::null;
-}
-
-/*!
- Returns the position of the field called \a name within the
- record, or -1 if it cannot be found. Field names are not
- case-sensitive. If more than one field matches, the first one is
- returned.
-*/
-
-int TQSqlRecord::position( const TQString& name ) const
-{
- for ( uint i = 0; i < count(); ++i ) {
- if ( fieldName(i).upper() == name.upper() )
- return i;
- }
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQSqlRecord::position: unable to find field %s", name.latin1() );
-#endif
- return -1;
-}
-
-/*!
- Returns the field at position \a i within the record, or 0 if it
- cannot be found.
-*/
-
-TQSqlField* TQSqlRecord::field( int i )
-{
- checkDetach();
- if ( !sh->d->contains( i ) ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQSqlRecord::field: index out of range: %d", i );
-#endif
- return 0;
- }
- return &sh->d->fieldInfo( i )->field;
-}
-
-/*!
- \overload
-
- Returns the field called \a name within the record, or 0 if it
- cannot be found. Field names are not case-sensitive.
-*/
-
-TQSqlField* TQSqlRecord::field( const TQString& name )
-{
- checkDetach();
- if ( !sh->d->contains( position( name ) ) )
- return 0;
- return &sh->d->fieldInfo( position( name ) )->field;
-}
-
-
-/*!
- \overload
-*/
-
-const TQSqlField* TQSqlRecord::field( int i ) const
-{
- if ( !sh->d->contains( i ) ) {
-#ifdef TQT_CHECK_RANGE
- qWarning( "TQSqlRecord::field: index out of range: %d", i );
-#endif // TQT_CHECK_RANGE
- return 0;
- }
- return &sh->d->fieldInfo( i )->field;
-}
-
-/*!
- \overload
-
- Returns the field called \a name within the record, or 0 if it
- cannot be found. Field names are not case-sensitive.
-*/
-
-const TQSqlField* TQSqlRecord::field( const TQString& name ) const
-{
- if( !sh->d->contains( position( name ) ) )
- return 0;
- return &sh->d->fieldInfo( position( name ) )->field;
-}
-
-/*!
- Append a copy of field \a field to the end of the record.
-*/
-
-void TQSqlRecord::append( const TQSqlField& field )
-{
- checkDetach();
- sh->d->append( field );
-}
-
-/*!
- Insert a copy of \a field at position \a pos. If a field already
- exists at \a pos, it is removed.
-*/
-
-void TQSqlRecord::insert( int pos, const TQSqlField& field ) // ### 4.0: rename to ::replace
-{
- checkDetach();
- sh->d->insert( pos, field );
-}
-
-/*!
- Removes the field at \a pos. If \a pos does not exist, nothing
- happens.
-*/
-
-void TQSqlRecord::remove( int pos )
-{
- checkDetach();
- sh->d->remove( pos );
-}
-
-/*!
- Removes all the record's fields.
-
- \sa clearValues()
-*/
-
-void TQSqlRecord::clear()
-{
- checkDetach();
- sh->d->clear();
-}
-
-/*!
- Returns TRUE if there are no fields in the record; otherwise
- returns FALSE.
-*/
-
-bool TQSqlRecord::isEmpty() const
-{
- return sh->d->isEmpty();
-}
-
-
-/*!
- Returns TRUE if there is a field in the record called \a name;
- otherwise returns FALSE.
-*/
-
-bool TQSqlRecord::contains( const TQString& name ) const
-{
- for ( uint i = 0; i < count(); ++i ) {
- if ( fieldName(i).upper() == name.upper() )
- return TRUE;
- }
- return FALSE;
-}
-
-/*!
- Clears the value of all fields in the record. If \a nullify is
- TRUE, (the default is FALSE), each field is set to NULL.
-*/
-
-void TQSqlRecord::clearValues( bool nullify )
-{
- checkDetach();
- int cnt = (int)count();
- int i;
- for ( i = 0; i < cnt; ++i ) {
- field( i )->clear( nullify );
- }
-}
-
-/*!
- Sets the generated flag for the field called \a name to \a
- generated. If the field does not exist, nothing happens. Only
- fields that have \a generated set to TRUE are included in the SQL
- that is generated, e.g. by TQSqlCursor.
-
- \sa isGenerated()
-*/
-
-void TQSqlRecord::setGenerated( const TQString& name, bool generated )
-{
- setGenerated( position( name ), generated );
-}
-
-/*!
- \overload
-
- Sets the generated flag for the field \a i to \a generated.
-
- \sa isGenerated()
-*/
-
-void TQSqlRecord::setGenerated( int i, bool generated )
-{
- checkDetach();
- if ( !field( i ) )
- return;
- sh->d->fieldInfo( i )->nogen = !generated;
-}
-
-/*!
- \internal
- ### Remove in 4.0
-*/
-bool TQSqlRecord::isNull( int i )
-{
- checkDetach();
- TQSqlField* f = field( i );
- if ( f ) {
- return f->isNull();
- }
- return TRUE;
-}
-
-/*!
- \internal
- ### Remove in 4.0
-*/
-bool TQSqlRecord::isNull( const TQString& name )
-{
- return isNull( position( name ) );
-}
-
-/*!
- \overload
-
- Returns TRUE if the field \a i is NULL or if there is no field at
- position \a i; otherwise returns FALSE.
-
- \sa fieldName()
-*/
-bool TQSqlRecord::isNull( int i ) const
-{
- const TQSqlField* f = field( i );
- if ( f ) {
- return f->isNull();
- }
- return TRUE;
-}
-
-/*!
- Returns TRUE if the field called \a name is NULL or if there is no
- field called \a name; otherwise returns FALSE.
-
- \sa position()
-*/
-bool TQSqlRecord::isNull( const TQString& name ) const
-{
- return isNull( position( name ) );
-}
-
-/*!
- Sets the value of field \a i to NULL. If the field does not exist,
- nothing happens.
-*/
-void TQSqlRecord::setNull( int i )
-{
- checkDetach();
- TQSqlField* f = field( i );
- if ( f ) {
- f->setNull();
- }
-}
-
-/*!
- \overload
-
- Sets the value of the field called \a name to NULL. If the field
- does not exist, nothing happens.
-*/
-void TQSqlRecord::setNull( const TQString& name )
-{
- setNull( position( name ) );
-}
-
-
-/*!
- Returns TRUE if the record has a field called \a name and this
- field is to be generated (the default); otherwise returns FALSE.
-
- \sa setGenerated()
-*/
-bool TQSqlRecord::isGenerated( const TQString& name ) const
-{
- return isGenerated( position( name ) );
-}
-
-/*!
- \overload
-
- Returns TRUE if the record has a field at position \a i and this
- field is to be generated (the default); otherwise returns FALSE.
-
- \sa setGenerated()
-*/
-bool TQSqlRecord::isGenerated( int i ) const
-{
- if ( !field( i ) )
- return FALSE;
- return !sh->d->fieldInfo( i )->nogen;
-}
-
-
-/*!
- Returns a list of all the record's field names as a string
- separated by \a sep.
-
- Note that fields which are not generated are \e not included (see
- \l{isGenerated()}). The returned string is suitable, for example, for
- generating SQL SELECT statements. If a \a prefix is specified,
- e.g. a table name, all fields are prefixed in the form:
-
- "\a{prefix}.\<fieldname\>"
-*/
-
-TQString TQSqlRecord::toString( const TQString& prefix, const TQString& sep ) const
-{
- TQString pflist;
- bool comma = FALSE;
- for ( uint i = 0; i < count(); ++i ){
- if ( isGenerated( field(i)->name() ) ) {
- if( comma )
- pflist += sep + " ";
- pflist += createField( i, prefix );
- comma = TRUE;
- }
- }
- return pflist;
-}
-
-/*!
- Returns a list of all the record's field names, each having the
- prefix \a prefix.
-
- Note that fields which have generated set to FALSE are \e not
- included. (See \l{isGenerated()}). If \a prefix is supplied, e.g.
- a table name, all fields are prefixed in the form:
-
- "\a{prefix}.\<fieldname\>"
-*/
-
-TQStringList TQSqlRecord::toStringList( const TQString& prefix ) const
-{
- TQStringList s;
- for ( uint i = 0; i < count(); ++i ) {
- if ( isGenerated( field(i)->name() ) )
- s += createField( i, prefix );
- }
- return s;
-}
-
-/*! \internal
-*/
-
-TQString TQSqlRecord::createField( int i, const TQString& prefix ) const
-{
- TQString f;
- if ( !prefix.isEmpty() )
- f = prefix + ".";
- f += field( i )->name();
- return f;
-}
-
-/*!
- Returns the number of fields in the record.
-*/
-
-uint TQSqlRecord::count() const
-{
- return sh->d->count();
-}
-
-/*!
- Sets the value of the field at position \a i to \a val. If the
- field does not exist, nothing happens.
-*/
-
-void TQSqlRecord::setValue( int i, const TQVariant& val )
-{
- checkDetach();
- TQSqlField* f = field( i );
- if ( f ) {
- f->setValue( val );
- }
-}
-
-
-/*!
- \overload
-
- Sets the value of the field called \a name to \a val. If the field
- does not exist, nothing happens.
-*/
-
-void TQSqlRecord::setValue( const TQString& name, const TQVariant& val )
-{
- setValue( position( name ), val );
-}
-
-
-/******************************************/
-/******* TQSqlRecordInfo Impl ******/
-/******************************************/
-
-/*!
- \class TQSqlRecordInfo tqsqlrecord.h
- \brief The TQSqlRecordInfo class encapsulates a set of database field meta data.
-
- \ingroup database
- \module sql
-
- This class is a TQValueList that holds a set of database field meta
- data. Use contains() to see if a given field name exists in the
- record, and use find() to get a TQSqlFieldInfo record for a named
- field.
-
- \sa TQValueList, TQSqlFieldInfo
-*/
-
-
-/*!
- Constructs a TQSqlRecordInfo object based on the fields in the
- TQSqlRecord \a other.
-*/
-TQSqlRecordInfo::TQSqlRecordInfo( const TQSqlRecord& other )
-{
- for ( uint i = 0; i < other.count(); ++i ) {
- push_back( TQSqlFieldInfo( *(other.field( i )), other.isGenerated( i ) ) );
- }
-}
-
-/*!
- Returns the number of times a field called \a fieldName occurs in
- the record. Returns 0 if no field by that name could be found.
-*/
-TQSqlRecordInfo::size_type TQSqlRecordInfo::contains( const TQString& fieldName ) const
-{
- size_type i = 0;
- TQString fName = fieldName.upper();
- for( const_iterator it = begin(); it != end(); ++it ) {
- if ( (*it).name().upper() == fName ) {
- ++i;
- }
- }
- return i;
-}
-
-/*!
- Returns a TQSqlFieldInfo object for the first field in the record
- which has the field name \a fieldName. If no matching field is
- found then an empty TQSqlFieldInfo object is returned.
-*/
-TQSqlFieldInfo TQSqlRecordInfo::find( const TQString& fieldName ) const
-{
- TQString fName = fieldName.upper();
- for( const_iterator it = begin(); it != end(); ++it ) {
- if ( (*it).name().upper() == fName ) {
- return *it;
- }
- }
- return TQSqlFieldInfo();
-}
-
-/*!
- Returns an empty TQSqlRecord based on the field information
- in this TQSqlRecordInfo.
-*/
-TQSqlRecord TQSqlRecordInfo::toRecord() const
-{
- TQSqlRecord buf;
- for( const_iterator it = begin(); it != end(); ++it ) {
- buf.append( (*it).toField() );
- }
- return buf;
-}
-
-/*!
- \fn TQSqlRecordInfo::TQSqlRecordInfo()
-
- Constructs an empty record info object
-*/
-
-/*!
- \fn TQSqlRecordInfo::TQSqlRecordInfo( const TQSqlFieldInfoList& other )
-
- Constructs a copy of \a other.
-*/
-
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlrecord.h b/tqtinterface/qt4/src/sql/tqsqlrecord.h
deleted file mode 100644
index 60c4a30..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlrecord.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlRecord class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSTQLRECORD_H
-#define TQSTQLRECORD_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#include "tqstringlist.h"
-#include "tqvariant.h"
-#include "tqsqlfield.h"
-#endif // TQT_H
-
-#ifndef TQT_NO_SQL
-
-class TQSqlRecordPrivate;
-
-class TQSqlRecordShared : public TQShared
-{
-public:
- TQSqlRecordShared( TQSqlRecordPrivate* sqlRecordPrivate )
- : d( sqlRecordPrivate )
- {}
- virtual ~TQSqlRecordShared();
- TQSqlRecordPrivate* d;
-};
-
-class TQ_EXPORT TQSqlRecord
-{
-public:
- TQSqlRecord();
- TQSqlRecord( const TQSqlRecord& other );
- TQSqlRecord& operator=( const TQSqlRecord& other );
- virtual ~TQSqlRecord();
- virtual TQVariant value( int i ) const;
- virtual TQVariant value( const TQString& name ) const;
- virtual void setValue( int i, const TQVariant& val );
- virtual void setValue( const TQString& name, const TQVariant& val );
- bool isGenerated( int i ) const;
- bool isGenerated( const TQString& name ) const;
- virtual void setGenerated( const TQString& name, bool generated );
- virtual void setGenerated( int i, bool generated );
- virtual void setNull( int i );
- virtual void setNull( const TQString& name );
- bool isNull( int i ); // remove in 4.0
- bool isNull( const TQString& name ); // remove in 4.0
- bool isNull( int i ) const;
- bool isNull( const TQString& name ) const;
-
- int position( const TQString& name ) const;
- TQString fieldName( int i ) const;
- TQSqlField* field( int i );
- TQSqlField* field( const TQString& name );
- const TQSqlField* field( int i ) const;
- const TQSqlField* field( const TQString& name ) const;
-
- virtual void append( const TQSqlField& field );
- virtual void insert( int pos, const TQSqlField& field );
- virtual void remove( int pos );
-
- bool isEmpty() const;
- bool contains( const TQString& name ) const;
- virtual void clear();
- virtual void clearValues( bool nullify = FALSE );
- uint count() const;
- virtual TQString toString( const TQString& prefix = TQString::null,
- const TQString& sep = "," ) const;
- virtual TQStringList toStringList( const TQString& prefix = TQString::null ) const;
-
-private:
- TQString createField( int i, const TQString& prefix ) const;
- void deref();
- bool checkDetach();
- TQSqlRecordShared* sh;
-};
-
-/******************************************/
-/******* TQSqlRecordInfo Class ******/
-/******************************************/
-
-#if defined(TQ_TEMPLATEDLL)
-// TQMOC_SKIP_BEGIN
-TQ_TEMPLATE_EXTERN template class TQ_EXPORT TQValueList<TQSqlFieldInfo>;
-// TQMOC_SKIP_END
-#endif
-
-typedef TQValueList<TQSqlFieldInfo> TQSqlFieldInfoList;
-
-class TQ_EXPORT TQSqlRecordInfo: public TQSqlFieldInfoList
-{
-public:
- TQSqlRecordInfo(): TQSqlFieldInfoList() {}
- TQSqlRecordInfo( const TQSqlFieldInfoList& other ): TQSqlFieldInfoList( other ) {}
- TQSqlRecordInfo( const TQSqlRecord& other );
-
- size_type contains( const TQString& fieldName ) const;
- TQSqlFieldInfo find( const TQString& fieldName ) const;
- TQSqlRecord toRecord() const;
-
-};
-
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlresult.cpp b/tqtinterface/qt4/src/sql/tqsqlresult.cpp
deleted file mode 100644
index 0555929..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlresult.cpp
+++ /dev/null
@@ -1,368 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQSqlResult class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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 "tqsqlresult.h"
-#include "private/tqsqlextension_p.h"
-
-#ifndef TQT_NO_SQL
-
-class TQSqlResultPrivate
-{
-public:
- const TQSqlDriver* sqldriver;
- int idx;
- TQString sql;
- bool active;
- bool isSel;
- TQSqlError error;
- TQSqlExtension * ext;
-};
-
-/*!
- \class TQSqlResult
- \brief The TQSqlResult class provides an abstract interface for
- accessing data from SQL databases.
-
- \ingroup database
- \module sql
-
- Normally you would use TQSqlQuery instead of TQSqlResult since TQSqlQuery
- provides a generic wrapper for database-specific implementations of
- TQSqlResult.
-
- \sa TQSql
-*/
-
-
-/*!
- Protected constructor which creates a TQSqlResult using database \a
- db. The object is initialized to an inactive state.
-*/
-
-TQSqlResult::TQSqlResult( const TQSqlDriver * db ): forwardOnly( FALSE )
-{
- d = new TQSqlResultPrivate();
- d->sqldriver = db;
- d->idx = TQSql::BeforeFirst;
- d->isSel = FALSE;
- d->active = FALSE;
- d->ext = new TQSqlExtension();
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-
-TQSqlResult::~TQSqlResult()
-{
- if ( d->ext )
- delete d->ext;
- delete d;
-}
-
-/*!
- Sets the current query for the result to \a query. The result must
- be reset() in order to execute the query on the database.
-*/
-
-void TQSqlResult::setQuery( const TQString& query )
-{
- d->sql = query;
-}
-
-/*!
- Returns the current SQL query text, or TQString::null if there is none.
-*/
-
-TQString TQSqlResult::lastQuery() const
-{
- return d->sql;
-}
-
-/*!
- Returns the current (zero-based) position of the result.
-*/
-
-int TQSqlResult::at() const
-{
- return d->idx;
-}
-
-
-/*!
- Returns TRUE if the result is positioned on a valid record (that
- is, the result is not positioned before the first or after the
- last record); otherwise returns FALSE.
-*/
-
-bool TQSqlResult::isValid() const
-{
- return ( d->idx != TQSql::BeforeFirst && \
- d->idx != TQSql::AfterLast ) ? TRUE : FALSE;
-}
-
-/*!
- \fn bool TQSqlResult::isNull( int i )
-
- Returns TRUE if the field at position \a i is NULL; otherwise
- returns FALSE.
-*/
-
-
-/*!
- Returns TRUE if the result has records to be retrieved; otherwise
- returns FALSE.
-*/
-
-bool TQSqlResult::isActive() const
-{
- return d->active;
-}
-
-/*!
- Protected function provided for derived classes to set the
- internal (zero-based) result index to \a at.
-
- \sa at()
-*/
-
-void TQSqlResult::setAt( int at )
-{
- d->idx = at;
-}
-
-
-/*!
- Protected function provided for derived classes to indicate
- whether or not the current statement is a SQL SELECT statement.
- The \a s parameter should be TRUE if the statement is a SELECT
- statement, or FALSE otherwise.
-*/
-
-void TQSqlResult::setSelect( bool s )
-{
- d->isSel = s;
-}
-
-/*!
- Returns TRUE if the current result is from a SELECT statement;
- otherwise returns FALSE.
-*/
-
-bool TQSqlResult::isSelect() const
-{
- return d->isSel;
-}
-
-/*!
- Returns the driver associated with the result.
-*/
-
-const TQSqlDriver* TQSqlResult::driver() const
-{
- return d->sqldriver;
-}
-
-
-/*!
- Protected function provided for derived classes to set the
- internal active state to the value of \a a.
-
- \sa isActive()
-*/
-
-void TQSqlResult::setActive( bool a )
-{
- d->active = a;
-}
-
-/*!
- Protected function provided for derived classes to set the last
- error to the value of \a e.
-
- \sa lastError()
-*/
-
-void TQSqlResult::setLastError( const TQSqlError& e )
-{
- d->error = e;
-}
-
-
-/*!
- Returns the last error associated with the result.
-*/
-
-TQSqlError TQSqlResult::lastError() const
-{
- return d->error;
-}
-
-/*!
- \fn int TQSqlResult::size()
-
- Returns the size of the result or -1 if it cannot be determined.
-*/
-
-/*!
- \fn int TQSqlResult::numRowsAffected()
-
- Returns the number of rows affected by the last query executed.
-*/
-
-/*!
- \fn TQVariant TQSqlResult::data( int i )
-
- Returns the data for field \a i (zero-based) as a TQVariant. This
- function is only called if the result is in an active state and is
- positioned on a valid record and \a i is non-negative.
- Derived classes must reimplement this function and return the value
- of field \a i, or TQVariant() if it cannot be determined.
-*/
-
-/*!
- \fn bool TQSqlResult::reset( const TQString& query )
-
- Sets the result to use the SQL statement \a query for subsequent
- data retrieval. Derived classes must reimplement this function and
- apply the \a query to the database. This function is called only
- after the result is set to an inactive state and is positioned
- before the first record of the new result. Derived classes should
- return TRUE if the query was successful and ready to be used,
- or FALSE otherwise.
-*/
-
-/*!
- \fn bool TQSqlResult::fetch( int i )
-
- Positions the result to an arbitrary (zero-based) index \a i. This
- function is only called if the result is in an active state. Derived
- classes must reimplement this function and position the result to the
- index \a i, and call setAt() with an appropriate value. Return TRUE
- to indicate success, or FALSE to signify failure.
-*/
-
-/*!
- \fn bool TQSqlResult::fetchFirst()
-
- Positions the result to the first record in the result. This
- function is only called if the result is in an active state.
- Derived classes must reimplement this function and position the result
- to the first record, and call setAt() with an appropriate value.
- Return TRUE to indicate success, or FALSE to signify failure.
-*/
-
-/*!
- \fn bool TQSqlResult::fetchLast()
-
- Positions the result to the last record in the result. This
- function is only called if the result is in an active state.
- Derived classes must reimplement this function and position the result
- to the last record, and call setAt() with an appropriate value.
- Return TRUE to indicate success, or FALSE to signify failure.
-*/
-
-/*!
- Positions the result to the next available record in the result.
- This function is only called if the result is in an active state.
- The default implementation calls fetch() with the next index.
- Derived classes can reimplement this function and position the result
- to the next record in some other way, and call setAt() with an
- appropriate value. Return TRUE to indicate success, or FALSE to
- signify failure.
-*/
-
-bool TQSqlResult::fetchNext()
-{
- return fetch( at() + 1 );
-}
-
-/*!
- Positions the result to the previous available record in the
- result. This function is only called if the result is in an active
- state. The default implementation calls fetch() with the previous
- index. Derived classes can reimplement this function and position the
- result to the next record in some other way, and call setAt() with
- an appropriate value. Return TRUE to indicate success, or FALSE to
- signify failure.
-*/
-
-bool TQSqlResult::fetchPrev()
-{
- return fetch( at() - 1 );
-}
-
-/*!
- Returns TRUE if you can only scroll forward through a result set;
- otherwise returns FALSE.
-*/
-bool TQSqlResult::isForwardOnly() const
-{
- return forwardOnly;
-}
-
-/*!
- Sets forward only mode to \a forward. If forward is TRUE only
- fetchNext() is allowed for navigating the results. Forward only
- mode needs far less memory since results do not have to be cached.
- forward only mode is off by default.
-
- \sa fetchNext()
-*/
-void TQSqlResult::setForwardOnly( bool forward )
-{
- forwardOnly = forward;
-}
-
-// XXX BCI HACK - remove in 4.0
-/*! \internal */
-void TQSqlResult::setExtension( TQSqlExtension * ext )
-{
- if ( d->ext )
- delete d->ext;
- d->ext = ext;
-}
-
-/*! \internal */
-TQSqlExtension * TQSqlResult::extension()
-{
- return d->ext;
-}
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqlresult.h b/tqtinterface/qt4/src/sql/tqsqlresult.h
deleted file mode 100644
index 5da9bc6..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlresult.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlResult class
-**
-** Created : 2000-11-03
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSTQLRESULT_H
-#define TQSTQLRESULT_H
-
-#ifndef TQT_H
-#include "tqstring.h"
-#include "tqvariant.h"
-#include "tqsqlerror.h"
-#include "tqsqlfield.h"
-#include "tqsql.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlDriver;
-class TQSql;
-class TQSqlResultPrivate;
-class TQSqlExtension;
-
-class TQM_EXPORT_SQL TQSqlResult
-{
-friend class TQSqlQuery;
-friend class TQSqlResultShared;
-public:
- virtual ~TQSqlResult();
-
- // BCI HACK - remove in 4.0
- void setExtension( TQSqlExtension * ext );
- TQSqlExtension * extension();
-
-protected:
- TQSqlResult(const TQSqlDriver * db );
- int at() const;
- TQString lastQuery() const;
- TQSqlError lastError() const;
- bool isValid() const;
- bool isActive() const;
- bool isSelect() const;
- bool isForwardOnly() const;
- const TQSqlDriver* driver() const;
- virtual void setAt( int at );
- virtual void setActive( bool a );
- virtual void setLastError( const TQSqlError& e );
- virtual void setQuery( const TQString& query );
- virtual void setSelect( bool s );
- virtual void setForwardOnly( bool forward );
-
- virtual TQVariant data( int i ) = 0;
- virtual bool isNull( int i ) = 0;
- virtual bool reset ( const TQString& sqlquery ) = 0;
- virtual bool fetch( int i ) = 0;
- virtual bool fetchNext();
- virtual bool fetchPrev();
- virtual bool fetchFirst() = 0;
- virtual bool fetchLast() = 0;
- virtual int size() = 0;
- virtual int numRowsAffected() = 0;
-private:
- TQSqlResultPrivate* d;
- bool forwardOnly;
-
-private: // Disabled copy constructor and operator=
-#if defined(TQ_DISABLE_COPY)
- TQSqlResult( const TQSqlResult & );
- TQSqlResult &operator=( const TQSqlResult & );
-#endif
-};
-
-#endif // TQT_NO_SQL
-#endif
diff --git a/tqtinterface/qt4/src/sql/tqsqlselectcursor.cpp b/tqtinterface/qt4/src/sql/tqsqlselectcursor.cpp
deleted file mode 100644
index 77d0548..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlselectcursor.cpp
+++ /dev/null
@@ -1,249 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlSelectCursor class
-**
-** Created : 2002-11-13
-**
-** Copyright (C) 2005-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 "tqsqlselectcursor.h"
-#include "tqsqldriver.h"
-
-#ifndef TQT_NO_SQL
-
-class TQSqlSelectCursorPrivate
-{
-public:
- TQSqlSelectCursorPrivate() : populated( FALSE ) {}
- TQString query;
- bool populated : 1;
-};
-
-/*!
- \class TQSqlSelectCursor tqsqlselectcursor.h
- \brief The TQSqlSelectCursor class provides browsing of general SQL
- SELECT statements.
-
- \ingroup database
- \module sql
-
- TQSqlSelectCursor is a convenience class that makes it possible to
- display result sets from general SQL \c SELECT statements in
- data-aware TQt widgets. TQSqlSelectCursor is read-only and does not
- support \c INSERT, \c UPDATE or \c DELETE operations.
-
- Pass the query in at construction time, or use the
- TQSqlSelectCursor::exec() function.
-
- Example:
- \code
- ...
- TQSqlSelectCursor* cur = new TQSqlSelectCursor( "SELECT id, firstname, lastname FROM author" );
- TQDataTable* table = new TQDataTable( this );
- table->setSqlCursor( cur, TRUE, TRUE );
- table->refresh();
- ...
- cur->exec( "SELECT * FROM books" );
- table->refresh();
- ...
- \endcode
-*/
-
-/*!
- Constructs a read only cursor on database \a db using the query \a query.
- */
-TQSqlSelectCursor::TQSqlSelectCursor( const TQString& query, TQSqlDatabase* db )
- : TQSqlCursor( TQString::null, FALSE, db )
-{
- d = new TQSqlSelectCursorPrivate;
- d->query = query;
- TQSqlCursor::setMode( ReadOnly );
- if ( !query.isNull() )
- exec( query );
-}
-
-/*! Constructs a copy of \a other */
-TQSqlSelectCursor::TQSqlSelectCursor( const TQSqlSelectCursor& other )
- : TQSqlCursor( other )
-{
- d = new TQSqlSelectCursorPrivate;
- d->query = other.d->query;
- d->populated = other.d->populated;
-}
-
-/*! Destroys the object and frees any allocated resources */
-TQSqlSelectCursor::~TQSqlSelectCursor()
-{
- delete d;
-}
-
-/*! \reimp */
-bool TQSqlSelectCursor::exec( const TQString& query )
-{
- d->query = query;
- bool ret = TQSqlCursor::exec( query );
- if ( ret ) {
- TQSqlCursor::clear();
- populateCursor();
- }
- return ret;
-}
-
-/*! \fn bool TQSqlSelectCursor::select()
- \reimp
-*/
-
-/*! \reimp */
-bool TQSqlSelectCursor::select( const TQString&, const TQSqlIndex& )
-{
- bool ret = TQSqlCursor::exec( d->query );
- if ( ret && !d->populated )
- populateCursor();
- return ret;
-}
-
-/*! \internal */
-void TQSqlSelectCursor::populateCursor()
-{
- TQSqlRecordInfo inf = driver()->recordInfo( *(TQSqlQuery*)this );
- for ( TQSqlRecordInfo::const_iterator it = inf.begin(); it != inf.end(); ++it )
- TQSqlCursor::append( *it );
- d->populated = TRUE;
-}
-
-/*! \fn TQSqlIndex TQSqlSelectCursor::primaryIndex( bool ) const
- \reimp
-*/
-
-/*! \fn TQSqlIndex TQSqlSelectCursor::index( const TQStringList& ) const
- \reimp
-*/
-
-/*! \fn TQSqlIndex TQSqlSelectCursor::index( const TQString& ) const
- \reimp
-*/
-
-/*! \fn TQSqlIndex TQSqlSelectCursor::index( const char* ) const
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setPrimaryIndex( const TQSqlIndex& )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::append( const TQSqlFieldInfo& )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::insert( int, const TQSqlFieldInfo& )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::remove( int )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::clear()
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setGenerated( const TQString&, bool )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setGenerated( int, bool )
- \reimp
-*/
-
-/*! \fn TQSqlRecord* TQSqlSelectCursor::editBuffer( bool )
- \reimp
-*/
-
-/*! \fn TQSqlRecord* TQSqlSelectCursor::primeInsert()
- \reimp
-*/
-
-/*! \fn TQSqlRecord* TQSqlSelectCursor::primeUpdate()
- \reimp
-*/
-
-/*! \fn TQSqlRecord* TQSqlSelectCursor::primeDelete()
- \reimp
-*/
-
-/*! \fn int TQSqlSelectCursor::insert( bool )
- \reimp
-*/
-
-/*! \fn int TQSqlSelectCursor::update( bool )
- \reimp
-*/
-
-/*! \fn int TQSqlSelectCursor::del( bool )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setMode( int )
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setSort( const TQSqlIndex& )
- \reimp
-*/
-
-/*! \fn TQSqlIndex TQSqlSelectCursor::sort() const
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setFilter( const TQString& )
- \reimp
-*/
-
-/*! \fn TQString TQSqlSelectCursor::filter() const
- \reimp
-*/
-
-/*! \fn void TQSqlSelectCursor::setName( const TQString&, bool )
- \reimp
-*/
-
-/*! \fn TQString TQSqlSelectCursor::name() const
- \reimp
-*/
-
-/*! \fn TQString TQSqlSelectCursor::toString( const TQString&, const TQString& ) const
- \reimp
-*/
-#endif // TQT_NO_SQL
diff --git a/tqtinterface/qt4/src/sql/tqsqlselectcursor.h b/tqtinterface/qt4/src/sql/tqsqlselectcursor.h
deleted file mode 100644
index db72664..0000000
--- a/tqtinterface/qt4/src/sql/tqsqlselectcursor.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQSqlSelectCursor class
-**
-** Created : 2002-11-13
-**
-** Copyright (C) 2005-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.
-**
-**********************************************************************/
-
-#ifndef TQSTQLSELECTCURSOR_H
-#define TQSTQLSELECTCURSOR_H
-
-#ifndef TQT_H
-#include "tqsqlcursor.h"
-#endif // TQT_H
-
-#if !defined( TQT_MODULE_SQL ) || defined( TQT_LICENSE_PROFESSIONAL )
-#define TQM_EXPORT_SQL
-#else
-#define TQM_EXPORT_SQL TQ_EXPORT
-#endif
-
-#ifndef TQT_NO_SQL
-
-class TQSqlSelectCursorPrivate;
-
-class TQM_EXPORT_SQL TQSqlSelectCursor : public TQSqlCursor
-{
-public:
- TQSqlSelectCursor( const TQString& query = TQString::null, TQSqlDatabase* db = 0 );
- TQSqlSelectCursor( const TQSqlSelectCursor& other );
- ~TQSqlSelectCursor();
- bool exec( const TQString& query );
- bool select() { return TQSqlCursor::select(); }
-
-protected:
- TQSqlIndex primaryIndex( bool = TRUE ) const { return TQSqlIndex(); }
- TQSqlIndex index( const TQStringList& ) const { return TQSqlIndex(); }
- TQSqlIndex index( const TQString& ) const { return TQSqlIndex(); }
- TQSqlIndex index( const char* ) const { return TQSqlIndex(); }
- void setPrimaryIndex( const TQSqlIndex& ) {}
- void append( const TQSqlFieldInfo& ) {}
- void insert( int, const TQSqlFieldInfo& ) {}
- void remove( int ) {}
- void clear() {}
- void setGenerated( const TQString&, bool ) {}
- void setGenerated( int, bool ) {}
- TQSqlRecord* editBuffer( bool = FALSE ) { return 0; }
- TQSqlRecord* primeInsert() { return 0; }
- TQSqlRecord* primeUpdate() { return 0; }
- TQSqlRecord* primeDelete() { return 0; }
- int insert( bool = TRUE ) { return 0; }
- int update( bool = TRUE ) { return 0; }
- int del( bool = TRUE ) { return 0; }
- void setMode( int ) {}
-
- void setSort( const TQSqlIndex& ) {}
- TQSqlIndex sort() const { return TQSqlIndex(); }
- void setFilter( const TQString& ) {}
- TQString filter() const { return TQString::null; }
- void setName( const TQString&, bool = TRUE ) {}
- TQString name() const { return TQString::null; }
- TQString toString( const TQString& = TQString::null, const TQString& = "," ) const { return TQString::null; }
- bool select( const TQString &, const TQSqlIndex& = TQSqlIndex() );
-
-private:
- void populateCursor();
-
- TQSqlSelectCursorPrivate * d;
-};
-
-#endif // TQT_NO_SQL
-#endif // TQSTQLSELECTCURSOR_H