diff options
Diffstat (limited to 'src/sql/drivers')
-rw-r--r-- | src/sql/drivers/db2/qsql_db2.h | 4 | ||||
-rw-r--r-- | src/sql/drivers/ibase/qsql_ibase.cpp | 26 | ||||
-rw-r--r-- | src/sql/drivers/ibase/qsql_ibase.h | 28 | ||||
-rw-r--r-- | src/sql/drivers/mysql/qsql_mysql.h | 4 | ||||
-rw-r--r-- | src/sql/drivers/oci/qsql_oci.cpp | 28 | ||||
-rw-r--r-- | src/sql/drivers/oci/qsql_oci.h | 32 | ||||
-rw-r--r-- | src/sql/drivers/odbc/qsql_odbc.h | 4 | ||||
-rw-r--r-- | src/sql/drivers/psql/qsql_psql.h | 4 | ||||
-rw-r--r-- | src/sql/drivers/sqlite/qsql_sqlite.cpp | 28 | ||||
-rw-r--r-- | src/sql/drivers/sqlite/qsql_sqlite.h | 31 | ||||
-rw-r--r-- | src/sql/drivers/sqlite2/qsql_sqlite2.cpp | 25 | ||||
-rw-r--r-- | src/sql/drivers/sqlite2/qsql_sqlite2.h | 28 | ||||
-rw-r--r-- | src/sql/drivers/tds/qsql_tds.cpp | 64 | ||||
-rw-r--r-- | src/sql/drivers/tds/qsql_tds.h | 25 |
14 files changed, 153 insertions, 178 deletions
diff --git a/src/sql/drivers/db2/qsql_db2.h b/src/sql/drivers/db2/qsql_db2.h index 4e25c317eb..5d31906096 100644 --- a/src/sql/drivers/db2/qsql_db2.h +++ b/src/sql/drivers/db2/qsql_db2.h @@ -51,8 +51,6 @@ #include <QtSql/qsqlresult.h> #include <QtSql/qsqldriver.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -126,6 +124,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_DB2_H diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp index 5fd07318ec..7aff6f62fc 100644 --- a/src/sql/drivers/ibase/qsql_ibase.cpp +++ b/src/sql/drivers/ibase/qsql_ibase.cpp @@ -47,6 +47,7 @@ #include <qsqlfield.h> #include <qsqlindex.h> #include <qsqlquery.h> +#include <QtSql/private/qsqlcachedresult_p.h> #include <qlist.h> #include <qvector.h> #include <qtextcodec.h> @@ -346,6 +347,31 @@ static void qFreeEventBuffer(QIBaseEventBuffer* eBuffer) delete eBuffer; } +class QIBaseResultPrivate; + +class QIBaseResult : public QSqlCachedResult +{ + friend class QIBaseResultPrivate; + +public: + explicit QIBaseResult(const QIBaseDriver* db); + virtual ~QIBaseResult(); + + bool prepare(const QString& query); + bool exec(); + QVariant handle() const; + +protected: + bool gotoNext(QSqlCachedResult::ValueCache& row, int rowIdx); + bool reset (const QString& query); + int size(); + int numRowsAffected(); + QSqlRecord record() const; + +private: + QIBaseResultPrivate* d; +}; + class QIBaseResultPrivate { public: diff --git a/src/sql/drivers/ibase/qsql_ibase.h b/src/sql/drivers/ibase/qsql_ibase.h index 2ce20966c6..781448b98a 100644 --- a/src/sql/drivers/ibase/qsql_ibase.h +++ b/src/sql/drivers/ibase/qsql_ibase.h @@ -44,11 +44,8 @@ #include <QtSql/qsqlresult.h> #include <QtSql/qsqldriver.h> -#include <QtSql/private/qsqlcachedresult_p.h> #include <ibase.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -57,32 +54,8 @@ QT_BEGIN_NAMESPACE #endif class QIBaseDriverPrivate; -class QIBaseResultPrivate; class QIBaseDriver; -class QIBaseResult : public QSqlCachedResult -{ - friend class QIBaseResultPrivate; - -public: - explicit QIBaseResult(const QIBaseDriver* db); - virtual ~QIBaseResult(); - - bool prepare(const QString& query); - bool exec(); - QVariant handle() const; - -protected: - bool gotoNext(QSqlCachedResult::ValueCache& row, int rowIdx); - bool reset (const QString& query); - int size(); - int numRowsAffected(); - QSqlRecord record() const; - -private: - QIBaseResultPrivate* d; -}; - class QIBaseDriver : public QSqlDriver { Q_OBJECT @@ -132,5 +105,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER #endif // QSQL_IBASE_H diff --git a/src/sql/drivers/mysql/qsql_mysql.h b/src/sql/drivers/mysql/qsql_mysql.h index 37e18c8fb1..953216de9a 100644 --- a/src/sql/drivers/mysql/qsql_mysql.h +++ b/src/sql/drivers/mysql/qsql_mysql.h @@ -57,8 +57,6 @@ #define Q_EXPORT_SQLDRIVER_MYSQL Q_SQL_EXPORT #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -142,6 +140,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_MYSQL_H diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp index e2bb9a4eaf..db73f8f6ea 100644 --- a/src/sql/drivers/oci/qsql_oci.cpp +++ b/src/sql/drivers/oci/qsql_oci.cpp @@ -51,6 +51,7 @@ #include <qsqlfield.h> #include <qsqlindex.h> #include <qsqlquery.h> +#include <QtSql/private/qsqlcachedresult_p.h> #include <qstringlist.h> #include <qvarlengtharray.h> #include <qvector.h> @@ -162,6 +163,33 @@ Q_DECLARE_METATYPE(QOCIRowIdPointer) QT_END_INCLUDE_NAMESPACE class QOCICols; +struct QOCIResultPrivate; + +class Q_EXPORT_SQLDRIVER_OCI QOCIResult : public QSqlCachedResult +{ + friend class QOCIDriver; + friend struct QOCIResultPrivate; + friend class QOCICols; +public: + QOCIResult(const QOCIDriver * db, const QOCIDriverPrivate* p); + ~QOCIResult(); + bool prepare(const QString& query); + bool exec(); + QVariant handle() const; + +protected: + bool gotoNext(ValueCache &values, int index); + bool reset (const QString& query); + int size(); + int numRowsAffected(); + QSqlRecord record() const; + QVariant lastInsertId() const; + bool execBatch(bool arrayBind = false); + void virtual_hook(int id, void *data); + +private: + QOCIResultPrivate *d; +}; struct QOCIResultPrivate { diff --git a/src/sql/drivers/oci/qsql_oci.h b/src/sql/drivers/oci/qsql_oci.h index 2488e696d2..403de623ce 100644 --- a/src/sql/drivers/oci/qsql_oci.h +++ b/src/sql/drivers/oci/qsql_oci.h @@ -44,7 +44,6 @@ #include <QtSql/qsqlresult.h> #include <QtSql/qsqldriver.h> -#include <QtSql/private/qsqlcachedresult_p.h> #ifdef QT_PLUGIN #define Q_EXPORT_SQLDRIVER_OCI @@ -52,8 +51,6 @@ #define Q_EXPORT_SQLDRIVER_OCI Q_SQL_EXPORT #endif -QT_BEGIN_HEADER - typedef struct OCIEnv OCIEnv; typedef struct OCISvcCtx OCISvcCtx; @@ -67,33 +64,6 @@ QT_BEGIN_NAMESPACE class QOCIDriver; class QOCICols; struct QOCIDriverPrivate; -struct QOCIResultPrivate; - -class Q_EXPORT_SQLDRIVER_OCI QOCIResult : public QSqlCachedResult -{ - friend class QOCIDriver; - friend struct QOCIResultPrivate; - friend class QOCICols; -public: - QOCIResult(const QOCIDriver * db, const QOCIDriverPrivate* p); - ~QOCIResult(); - bool prepare(const QString& query); - bool exec(); - QVariant handle() const; - -protected: - bool gotoNext(ValueCache &values, int index); - bool reset (const QString& query); - int size(); - int numRowsAffected(); - QSqlRecord record() const; - QVariant lastInsertId() const; - bool execBatch(bool arrayBind = false); - void virtual_hook(int id, void *data); - -private: - QOCIResultPrivate *d; -}; class Q_EXPORT_SQLDRIVER_OCI QOCIDriver : public QSqlDriver { @@ -131,6 +101,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_OCI_H diff --git a/src/sql/drivers/odbc/qsql_odbc.h b/src/sql/drivers/odbc/qsql_odbc.h index 4fba49b9c5..26f47e6c74 100644 --- a/src/sql/drivers/odbc/qsql_odbc.h +++ b/src/sql/drivers/odbc/qsql_odbc.h @@ -70,8 +70,6 @@ #include <sqlext.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -158,6 +156,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_ODBC_H diff --git a/src/sql/drivers/psql/qsql_psql.h b/src/sql/drivers/psql/qsql_psql.h index 444ef1bccc..d5585a45fa 100644 --- a/src/sql/drivers/psql/qsql_psql.h +++ b/src/sql/drivers/psql/qsql_psql.h @@ -51,8 +51,6 @@ #define Q_EXPORT_SQLDRIVER_PSQL Q_SQL_EXPORT #endif -QT_BEGIN_HEADER - typedef struct pg_conn PGconn; typedef struct pg_result PGresult; @@ -158,6 +156,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_PSQL_H diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index f11279f262..d884bb7b11 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -47,6 +47,7 @@ #include <qsqlfield.h> #include <qsqlindex.h> #include <qsqlquery.h> +#include <QtSql/private/qsqlcachedresult_p.h> #include <qstringlist.h> #include <qvector.h> #include <qdebug.h> @@ -106,6 +107,33 @@ static QSqlError qMakeError(sqlite3 *access, const QString &descr, QSqlError::Er type, errorCode); } +class QSQLiteResultPrivate; + +class QSQLiteResult : public QSqlCachedResult +{ + friend class QSQLiteDriver; + friend class QSQLiteResultPrivate; +public: + explicit QSQLiteResult(const QSQLiteDriver* db); + ~QSQLiteResult(); + QVariant handle() const; + +protected: + bool gotoNext(QSqlCachedResult::ValueCache& row, int idx); + bool reset(const QString &query); + bool prepare(const QString &query); + bool exec(); + int size(); + int numRowsAffected(); + QVariant lastInsertId() const; + QSqlRecord record() const; + void detachFromResultSet(); + void virtual_hook(int id, void *data); + +private: + QSQLiteResultPrivate* d; +}; + class QSQLiteDriverPrivate { public: diff --git a/src/sql/drivers/sqlite/qsql_sqlite.h b/src/sql/drivers/sqlite/qsql_sqlite.h index 0fdcd4e240..bd034b4d6b 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.h +++ b/src/sql/drivers/sqlite/qsql_sqlite.h @@ -44,7 +44,6 @@ #include <QtSql/qsqldriver.h> #include <QtSql/qsqlresult.h> -#include <QtSql/private/qsqlcachedresult_p.h> struct sqlite3; @@ -54,8 +53,6 @@ struct sqlite3; #define Q_EXPORT_SQLDRIVER_SQLITE Q_SQL_EXPORT #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -64,34 +61,8 @@ QT_BEGIN_NAMESPACE #endif class QSQLiteDriverPrivate; -class QSQLiteResultPrivate; class QSQLiteDriver; -class QSQLiteResult : public QSqlCachedResult -{ - friend class QSQLiteDriver; - friend class QSQLiteResultPrivate; -public: - explicit QSQLiteResult(const QSQLiteDriver* db); - ~QSQLiteResult(); - QVariant handle() const; - -protected: - bool gotoNext(QSqlCachedResult::ValueCache& row, int idx); - bool reset(const QString &query); - bool prepare(const QString &query); - bool exec(); - int size(); - int numRowsAffected(); - QVariant lastInsertId() const; - QSqlRecord record() const; - void detachFromResultSet(); - void virtual_hook(int id, void *data); - -private: - QSQLiteResultPrivate* d; -}; - class Q_EXPORT_SQLDRIVER_SQLITE QSQLiteDriver : public QSqlDriver { Q_OBJECT @@ -125,6 +96,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_SQLITE_H diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp index 02e4004901..2666cefb72 100644 --- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp +++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp @@ -50,6 +50,7 @@ #include <qsqlfield.h> #include <qsqlindex.h> #include <qsqlquery.h> +#include <QtSql/private/qsqlcachedresult_p.h> #include <qstringlist.h> #include <qvector.h> @@ -94,6 +95,30 @@ QSQLite2DriverPrivate::QSQLite2DriverPrivate() : access(0) utf8 = (qstrcmp(sqlite_encoding, "UTF-8") == 0); } +class QSQLite2ResultPrivate; + +class QSQLite2Result : public QSqlCachedResult +{ + friend class QSQLite2Driver; + friend class QSQLite2ResultPrivate; +public: + explicit QSQLite2Result(const QSQLite2Driver* db); + ~QSQLite2Result(); + QVariant handle() const; + +protected: + bool gotoNext(QSqlCachedResult::ValueCache& row, int idx); + bool reset (const QString& query); + int size(); + int numRowsAffected(); + QSqlRecord record() const; + void detachFromResultSet(); + void virtual_hook(int id, void *data); + +private: + QSQLite2ResultPrivate* d; +}; + class QSQLite2ResultPrivate { public: diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.h b/src/sql/drivers/sqlite2/qsql_sqlite2.h index f141ad1cc2..c6a8c4cf4f 100644 --- a/src/sql/drivers/sqlite2/qsql_sqlite2.h +++ b/src/sql/drivers/sqlite2/qsql_sqlite2.h @@ -46,7 +46,6 @@ #include <QtSql/qsqlresult.h> #include <QtSql/qsqlrecord.h> #include <QtSql/qsqlindex.h> -#include <QtSql/private/qsqlcachedresult_p.h> #if defined (Q_OS_WIN32) # include <QtCore/qt_windows.h> @@ -54,8 +53,6 @@ struct sqlite; -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -64,31 +61,8 @@ QT_BEGIN_NAMESPACE #endif class QSQLite2DriverPrivate; -class QSQLite2ResultPrivate; class QSQLite2Driver; -class QSQLite2Result : public QSqlCachedResult -{ - friend class QSQLite2Driver; - friend class QSQLite2ResultPrivate; -public: - explicit QSQLite2Result(const QSQLite2Driver* db); - ~QSQLite2Result(); - QVariant handle() const; - -protected: - bool gotoNext(QSqlCachedResult::ValueCache& row, int idx); - bool reset (const QString& query); - int size(); - int numRowsAffected(); - QSqlRecord record() const; - void detachFromResultSet(); - void virtual_hook(int id, void *data); - -private: - QSQLite2ResultPrivate* d; -}; - class QSQLite2Driver : public QSqlDriver { Q_OBJECT @@ -127,6 +101,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_SQLITE2_H diff --git a/src/sql/drivers/tds/qsql_tds.cpp b/src/sql/drivers/tds/qsql_tds.cpp index 45bba42ca7..22773b8eff 100644 --- a/src/sql/drivers/tds/qsql_tds.cpp +++ b/src/sql/drivers/tds/qsql_tds.cpp @@ -58,6 +58,7 @@ #include <qsqlfield.h> #include <qsqlindex.h> #include <qsqlquery.h> +#include <QtSql/private/qsqlcachedresult_p.h> #include <qstringlist.h> #include <qvector.h> @@ -145,6 +146,33 @@ public: bool initialized; }; +struct QTDSColumnData +{ + void *data; + DBINT nullbind; +}; +Q_DECLARE_TYPEINFO(QTDSColumnData, Q_MOVABLE_TYPE); + +class QTDSResultPrivate; + +class QTDSResult : public QSqlCachedResult +{ +public: + explicit QTDSResult(const QTDSDriver* db); + ~QTDSResult(); + QVariant handle() const; + +protected: + void cleanup(); + bool reset (const QString& query); + int size(); + int numRowsAffected(); + bool gotoNext(QSqlCachedResult::ValueCache &values, int index); + QSqlRecord record() const; + +private: + QTDSResultPrivate* d; +}; class QTDSResultPrivate { @@ -156,7 +184,7 @@ public: void addErrorMsg(QString& errMsg) { errorMsgs.append(errMsg); } QString getErrorMsgs() { return errorMsgs.join(QLatin1String("\n")); } void clearErrorMsgs() { errorMsgs.clear(); } - QVector<void *> buffer; + QVector<QTDSColumnData> buffer; QSqlRecord rec; private: @@ -325,8 +353,8 @@ void QTDSResult::cleanup() { d->clearErrorMsgs(); d->rec.clear(); - for (int i = 0; i < d->buffer.size() / 2; ++i) - free(d->buffer.at(i * 2)); + for (int i = 0; i < d->buffer.size(); ++i) + free(d->buffer.at(i * 2).data); d->buffer.clear(); // "can" stands for "cancel"... very clever. dbcanquery(d->dbproc); @@ -340,9 +368,9 @@ QVariant QTDSResult::handle() const return QVariant(qRegisterMetaType<DBPROCESS *>("DBPROCESS*"), &d->dbproc); } -static inline bool qIsNull(const void *ind) +static inline bool qIsNull(const QTDSColumnData &p) { - return *reinterpret_cast<const DBINT *>(&ind) == -1; + return p.nullbind == -1; } bool QTDSResult::gotoNext(QSqlCachedResult::ValueCache &values, int index) @@ -364,33 +392,33 @@ bool QTDSResult::gotoNext(QSqlCachedResult::ValueCache &values, int index) int idx = index + i; switch (d->rec.field(i).type()) { case QVariant::DateTime: - if (qIsNull(d->buffer.at(i * 2 + 1))) { + if (qIsNull(d->buffer.at(i))) { values[idx] = QVariant(QVariant::DateTime); } else { - DBDATETIME *bdt = (DBDATETIME*) d->buffer.at(i * 2); + DBDATETIME *bdt = (DBDATETIME*) d->buffer.at(i).data; QDate date = QDate::fromString(QLatin1String("1900-01-01"), Qt::ISODate); QTime time = QTime::fromString(QLatin1String("00:00:00"), Qt::ISODate); values[idx] = QDateTime(date.addDays(bdt->dtdays), time.addMSecs(int(bdt->dttime / 0.3))); } break; case QVariant::Int: - if (qIsNull(d->buffer.at(i * 2 + 1))) + if (qIsNull(d->buffer.at(i))) values[idx] = QVariant(QVariant::Int); else - values[idx] = *((int*)d->buffer.at(i * 2)); + values[idx] = *((int*)d->buffer.at(i).data); break; case QVariant::Double: case QVariant::String: - if (qIsNull(d->buffer.at(i * 2 + 1))) + if (qIsNull(d->buffer.at(i))) values[idx] = QVariant(QVariant::String); else - values[idx] = QString::fromLocal8Bit((const char*)d->buffer.at(i * 2)).trimmed(); + values[idx] = QString::fromLocal8Bit((const char*)d->buffer.at(i).data).trimmed(); break; case QVariant::ByteArray: { - if (qIsNull(d->buffer.at(i * 2 + 1))) + if (qIsNull(d->buffer.at(i))) values[idx] = QVariant(QVariant::ByteArray); else - values[idx] = QByteArray((const char*)d->buffer.at(i * 2)); + values[idx] = QByteArray((const char*)d->buffer.at(i).data); break; } default: @@ -430,7 +458,7 @@ bool QTDSResult::reset (const QString& query) setSelect((DBCMDROW(d->dbproc) == SUCCEED)); // decide whether or not we are dealing with a SELECT query int numCols = dbnumcols(d->dbproc); if (numCols > 0) { - d->buffer.resize(numCols * 2); + d->buffer.resize(numCols); init(numCols); } for (int i = 0; i < numCols; ++i) { @@ -470,11 +498,11 @@ bool QTDSResult::reset (const QString& query) break; } if (ret == SUCCEED) { - d->buffer[i * 2] = p; - ret = dbnullbind(d->dbproc, i+1, (DBINT*)(&d->buffer[i * 2 + 1])); + d->buffer[i].data = p; + ret = dbnullbind(d->dbproc, i+1, &d->buffer[i].nullbind); } else { - d->buffer[i * 2] = 0; - d->buffer[i * 2 + 1] = 0; + d->buffer[i].data = 0; + d->buffer[i].nullbind = 0; free(p); } if ((ret != SUCCEED) && (ret != -1)) { diff --git a/src/sql/drivers/tds/qsql_tds.h b/src/sql/drivers/tds/qsql_tds.h index 38cb2dc42e..2bbdd0e49c 100644 --- a/src/sql/drivers/tds/qsql_tds.h +++ b/src/sql/drivers/tds/qsql_tds.h @@ -44,7 +44,6 @@ #include <QtSql/qsqlresult.h> #include <QtSql/qsqldriver.h> -#include <QtSql/private/qsqlcachedresult_p.h> #ifdef Q_OS_WIN32 #define WIN32_LEAN_AND_MEAN @@ -67,8 +66,6 @@ #define Q_EXPORT_SQLDRIVER_TDS Q_SQL_EXPORT #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE #if 0 @@ -77,28 +74,8 @@ QT_BEGIN_NAMESPACE #endif class QTDSDriverPrivate; -class QTDSResultPrivate; class QTDSDriver; -class QTDSResult : public QSqlCachedResult -{ -public: - explicit QTDSResult(const QTDSDriver* db); - ~QTDSResult(); - QVariant handle() const; - -protected: - void cleanup(); - bool reset (const QString& query); - int size(); - int numRowsAffected(); - bool gotoNext(QSqlCachedResult::ValueCache &values, int index); - QSqlRecord record() const; - -private: - QTDSResultPrivate* d; -}; - class Q_EXPORT_SQLDRIVER_TDS QTDSDriver : public QSqlDriver { Q_OBJECT @@ -137,6 +114,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSQL_TDS_H |