diff options
Diffstat (limited to 'src/sql/kernel')
-rw-r--r-- | src/sql/kernel/qsqlcachedresult.cpp | 48 | ||||
-rw-r--r-- | src/sql/kernel/qsqlcachedresult_p.h | 47 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.cpp | 29 | ||||
-rw-r--r-- | src/sql/kernel/qsqlnulldriver_p.h | 53 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 14 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult.h | 2 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult_p.h | 13 |
7 files changed, 114 insertions, 92 deletions
diff --git a/src/sql/kernel/qsqlcachedresult.cpp b/src/sql/kernel/qsqlcachedresult.cpp index b9611ae8c7..ce93688cb2 100644 --- a/src/sql/kernel/qsqlcachedresult.cpp +++ b/src/sql/kernel/qsqlcachedresult.cpp @@ -36,6 +36,7 @@ #include <qvariant.h> #include <qdatetime.h> #include <qvector.h> +#include <QtSql/private/qsqldriver_p.h> QT_BEGIN_NAMESPACE @@ -53,33 +54,17 @@ QT_BEGIN_NAMESPACE static const uint initial_cache_size = 128; -class QSqlCachedResultPrivate -{ -public: - QSqlCachedResultPrivate(); - bool canSeek(int i) const; - inline int cacheCount() const; - void init(int count, bool fo); - void cleanup(); - int nextIndex(); - void revertLast(); - - QSqlCachedResult::ValueCache cache; - int rowCacheEnd; - int colCount; - bool forwardOnly; - bool atEnd; -}; - -QSqlCachedResultPrivate::QSqlCachedResultPrivate(): - rowCacheEnd(0), colCount(0), forwardOnly(false), atEnd(false) +QSqlCachedResultPrivate::QSqlCachedResultPrivate(QSqlCachedResult *q, const QSqlDriver *drv) + : QSqlResultPrivate(q, drv), + rowCacheEnd(0), + colCount(0), + atEnd(false) { } void QSqlCachedResultPrivate::cleanup() { cache.clear(); - forwardOnly = false; atEnd = false; colCount = 0; rowCacheEnd = 0; @@ -134,23 +119,20 @@ inline int QSqlCachedResultPrivate::cacheCount() const ////////////// -QSqlCachedResult::QSqlCachedResult(const QSqlDriver * db): QSqlResult (db) -{ - d = new QSqlCachedResultPrivate(); -} - -QSqlCachedResult::~QSqlCachedResult() +QSqlCachedResult::QSqlCachedResult(QSqlCachedResultPrivate &d) + : QSqlResult(d) { - delete d; } void QSqlCachedResult::init(int colCount) { + Q_D(QSqlCachedResult); d->init(colCount, isForwardOnly()); } bool QSqlCachedResult::fetch(int i) { + Q_D(QSqlCachedResult); if ((!isActive()) || (i < 0)) return false; if (at() == i) @@ -189,6 +171,7 @@ bool QSqlCachedResult::fetch(int i) bool QSqlCachedResult::fetchNext() { + Q_D(QSqlCachedResult); if (d->canSeek(at() + 1)) { setAt(at() + 1); return true; @@ -203,6 +186,7 @@ bool QSqlCachedResult::fetchPrevious() bool QSqlCachedResult::fetchFirst() { + Q_D(QSqlCachedResult); if (d->forwardOnly && at() != QSql::BeforeFirstRow) { return false; } @@ -215,6 +199,7 @@ bool QSqlCachedResult::fetchFirst() bool QSqlCachedResult::fetchLast() { + Q_D(QSqlCachedResult); if (d->atEnd) { if (d->forwardOnly) return false; @@ -235,6 +220,7 @@ bool QSqlCachedResult::fetchLast() QVariant QSqlCachedResult::data(int i) { + Q_D(const QSqlCachedResult); int idx = d->forwardOnly ? i : at() * d->colCount + i; if (i >= d->colCount || i < 0 || at() < 0 || idx >= d->rowCacheEnd) return QVariant(); @@ -244,6 +230,7 @@ QVariant QSqlCachedResult::data(int i) bool QSqlCachedResult::isNull(int i) { + Q_D(const QSqlCachedResult); int idx = d->forwardOnly ? i : at() * d->colCount + i; if (i >= d->colCount || i < 0 || at() < 0 || idx >= d->rowCacheEnd) return true; @@ -253,6 +240,7 @@ bool QSqlCachedResult::isNull(int i) void QSqlCachedResult::cleanup() { + Q_D(QSqlCachedResult); setAt(QSql::BeforeFirstRow); setActive(false); d->cleanup(); @@ -260,6 +248,7 @@ void QSqlCachedResult::cleanup() void QSqlCachedResult::clearValues() { + Q_D(QSqlCachedResult); setAt(QSql::BeforeFirstRow); d->rowCacheEnd = 0; d->atEnd = false; @@ -267,6 +256,7 @@ void QSqlCachedResult::clearValues() bool QSqlCachedResult::cacheNext() { + Q_D(QSqlCachedResult); if (d->atEnd) return false; @@ -286,11 +276,13 @@ bool QSqlCachedResult::cacheNext() int QSqlCachedResult::colCount() const { + Q_D(const QSqlCachedResult); return d->colCount; } QSqlCachedResult::ValueCache &QSqlCachedResult::cache() { + Q_D(QSqlCachedResult); return d->cache; } diff --git a/src/sql/kernel/qsqlcachedresult_p.h b/src/sql/kernel/qsqlcachedresult_p.h index 798de01f63..a24964bfb2 100644 --- a/src/sql/kernel/qsqlcachedresult_p.h +++ b/src/sql/kernel/qsqlcachedresult_p.h @@ -46,6 +46,7 @@ // #include "QtSql/qsqlresult.h" +#include "QtSql/private/qsqlresult_p.h" QT_BEGIN_NAMESPACE @@ -56,13 +57,13 @@ class QSqlCachedResultPrivate; class Q_SQL_EXPORT QSqlCachedResult: public QSqlResult { -public: - virtual ~QSqlCachedResult(); + Q_DECLARE_PRIVATE(QSqlCachedResult) +public: typedef QVector<QVariant> ValueCache; protected: - QSqlCachedResult(const QSqlDriver * db); + QSqlCachedResult(QSqlCachedResultPrivate &d); void init(int colCount); void cleanup(); @@ -70,23 +71,41 @@ protected: virtual bool gotoNext(ValueCache &values, int index) = 0; - QVariant data(int i); - bool isNull(int i); - bool fetch(int i); - bool fetchNext(); - bool fetchPrevious(); - bool fetchFirst(); - bool fetchLast(); + QVariant data(int i) Q_DECL_OVERRIDE; + bool isNull(int i) Q_DECL_OVERRIDE; + bool fetch(int i) Q_DECL_OVERRIDE; + bool fetchNext() Q_DECL_OVERRIDE; + bool fetchPrevious() Q_DECL_OVERRIDE; + bool fetchFirst() Q_DECL_OVERRIDE; + bool fetchLast() Q_DECL_OVERRIDE; int colCount() const; ValueCache &cache(); - void virtual_hook(int id, void *data); - void detachFromResultSet(); - void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy); + void virtual_hook(int id, void *data) Q_DECL_OVERRIDE; + void detachFromResultSet() Q_DECL_OVERRIDE; + void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy) Q_DECL_OVERRIDE; private: bool cacheNext(); - QSqlCachedResultPrivate *d; +}; + +class Q_SQL_EXPORT QSqlCachedResultPrivate: public QSqlResultPrivate +{ + Q_DECLARE_PUBLIC(QSqlCachedResult) + +public: + QSqlCachedResultPrivate(QSqlCachedResult *q, const QSqlDriver *drv); + bool canSeek(int i) const; + inline int cacheCount() const; + void init(int count, bool fo); + void cleanup(); + int nextIndex(); + void revertLast(); + + QSqlCachedResult::ValueCache cache; + int rowCacheEnd; + int colCount; + bool atEnd; }; QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index ccfc6e04f0..337b093c83 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -157,7 +157,8 @@ QSqlDriver::~QSqlDriver() bool QSqlDriver::isOpen() const { - return d_func()->isOpen; + Q_D(const QSqlDriver); + return d->isOpen; } /*! @@ -167,7 +168,8 @@ bool QSqlDriver::isOpen() const bool QSqlDriver::isOpenError() const { - return d_func()->isOpenError; + Q_D(const QSqlDriver); + return d->isOpenError; } /*! @@ -274,7 +276,8 @@ bool QSqlDriver::isOpenError() const void QSqlDriver::setOpen(bool open) { - d_func()->isOpen = open; + Q_D(QSqlDriver); + d->isOpen = open; } /*! @@ -288,9 +291,10 @@ void QSqlDriver::setOpen(bool open) void QSqlDriver::setOpenError(bool error) { - d_func()->isOpenError = error; + Q_D(QSqlDriver); + d->isOpenError = error; if (error) - d_func()->isOpen = false; + d->isOpen = false; } /*! @@ -341,7 +345,8 @@ bool QSqlDriver::rollbackTransaction() void QSqlDriver::setLastError(const QSqlError &error) { - d_func()->error = error; + Q_D(QSqlDriver); + d->error = error; } /*! @@ -351,7 +356,8 @@ void QSqlDriver::setLastError(const QSqlError &error) QSqlError QSqlDriver::lastError() const { - return d_func()->error; + Q_D(const QSqlDriver); + return d->error; } /*! @@ -766,7 +772,8 @@ QStringList QSqlDriver::subscribedToNotifications() const */ void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) { - d_func()->precisionPolicy = precisionPolicy; + Q_D(QSqlDriver); + d->precisionPolicy = precisionPolicy; } /*! @@ -779,7 +786,8 @@ void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy prec */ QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const { - return d_func()->precisionPolicy; + Q_D(const QSqlDriver); + return d->precisionPolicy; } /*! @@ -789,7 +797,8 @@ QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const */ QSqlDriver::DbmsType QSqlDriver::dbmsType() const { - return d_func()->dbmsType; + Q_D(const QSqlDriver); + return d->dbmsType; } /*! diff --git a/src/sql/kernel/qsqlnulldriver_p.h b/src/sql/kernel/qsqlnulldriver_p.h index fef2942325..3d2cd98931 100644 --- a/src/sql/kernel/qsqlnulldriver_p.h +++ b/src/sql/kernel/qsqlnulldriver_p.h @@ -59,27 +59,27 @@ public: { QSqlResult::setLastError( QSqlError(QLatin1String("Driver not loaded"), QLatin1String("Driver not loaded"), QSqlError::ConnectionError)); } protected: - inline QVariant data(int) { return QVariant(); } - inline bool reset (const QString&) { return false; } - inline bool fetch(int) { return false; } - inline bool fetchFirst() { return false; } - inline bool fetchLast() { return false; } - inline bool isNull(int) { return false; } - inline int size() { return -1; } - inline int numRowsAffected() { return 0; } + inline QVariant data(int) Q_DECL_OVERRIDE { return QVariant(); } + inline bool reset (const QString&) Q_DECL_OVERRIDE { return false; } + inline bool fetch(int) Q_DECL_OVERRIDE { return false; } + inline bool fetchFirst() Q_DECL_OVERRIDE { return false; } + inline bool fetchLast() Q_DECL_OVERRIDE { return false; } + inline bool isNull(int) Q_DECL_OVERRIDE { return false; } + inline int size() Q_DECL_OVERRIDE { return -1; } + inline int numRowsAffected() Q_DECL_OVERRIDE { return 0; } - inline void setAt(int) {} - inline void setActive(bool) {} - inline void setLastError(const QSqlError&) {} - inline void setQuery(const QString&) {} - inline void setSelect(bool) {} - inline void setForwardOnly(bool) {} + inline void setAt(int) Q_DECL_OVERRIDE {} + inline void setActive(bool) Q_DECL_OVERRIDE {} + inline void setLastError(const QSqlError&) Q_DECL_OVERRIDE {} + inline void setQuery(const QString&) Q_DECL_OVERRIDE {} + inline void setSelect(bool) Q_DECL_OVERRIDE {} + inline void setForwardOnly(bool) Q_DECL_OVERRIDE {} - inline bool exec() { return false; } - inline bool prepare(const QString&) { return false; } - inline bool savePrepare(const QString&) { return false; } - inline void bindValue(int, const QVariant&, QSql::ParamType) {} - inline void bindValue(const QString&, const QVariant&, QSql::ParamType) {} + inline bool exec() Q_DECL_OVERRIDE { return false; } + inline bool prepare(const QString&) Q_DECL_OVERRIDE { return false; } + inline bool savePrepare(const QString&) Q_DECL_OVERRIDE { return false; } + inline void bindValue(int, const QVariant&, QSql::ParamType) Q_DECL_OVERRIDE {} + inline void bindValue(const QString&, const QVariant&, QSql::ParamType) Q_DECL_OVERRIDE {} }; class QSqlNullDriver : public QSqlDriver @@ -88,17 +88,16 @@ public: inline QSqlNullDriver(): QSqlDriver() { QSqlDriver::setLastError( QSqlError(QLatin1String("Driver not loaded"), QLatin1String("Driver not loaded"), QSqlError::ConnectionError)); } - inline bool hasFeature(DriverFeature) const { return false; } - inline bool open(const QString &, const QString & , const QString & , - const QString &, int, const QString&) + inline bool hasFeature(DriverFeature) const Q_DECL_OVERRIDE { return false; } + inline bool open(const QString &, const QString &, const QString &, const QString &, int, const QString&) Q_DECL_OVERRIDE { return false; } - inline void close() {} - inline QSqlResult *createResult() const { return new QSqlNullResult(this); } + inline void close() Q_DECL_OVERRIDE {} + inline QSqlResult *createResult() const Q_DECL_OVERRIDE { return new QSqlNullResult(this); } protected: - inline void setOpen(bool) {} - inline void setOpenError(bool) {} - inline void setLastError(const QSqlError&) {} + inline void setOpen(bool) Q_DECL_OVERRIDE {} + inline void setOpenError(bool) Q_DECL_OVERRIDE {} + inline void setLastError(const QSqlError&) Q_DECL_OVERRIDE {} }; QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index c35fca7217..a701f9f669 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -87,7 +87,7 @@ QString QSqlResultPrivate::positionalToNamedBinding(const QString &query) const result.reserve(n * 5 / 4); QChar closingQuote; int count = 0; - bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriver::PostgreSQL); + bool ignoreBraces = (sqldriver->dbmsType() == QSqlDriver::PostgreSQL); for (int i = 0; i < n; ++i) { QChar ch = query.at(i); @@ -128,7 +128,7 @@ QString QSqlResultPrivate::namedToPositionalBinding(const QString &query) QChar closingQuote; int count = 0; int i = 0; - bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriver::PostgreSQL); + bool ignoreBraces = (sqldriver->dbmsType() == QSqlDriver::PostgreSQL); while (i < n) { QChar ch = query.at(i); @@ -218,22 +218,18 @@ QString QSqlResultPrivate::namedToPositionalBinding(const QString &query) QSqlResult::QSqlResult(const QSqlDriver *db) { - d_ptr = new QSqlResultPrivate; + d_ptr = new QSqlResultPrivate(this, db); Q_D(QSqlResult); - d->q_ptr = this; - d->sqldriver = const_cast<QSqlDriver *>(db); if (d->sqldriver) setNumericalPrecisionPolicy(d->sqldriver->numericalPrecisionPolicy()); } /*! \internal */ -QSqlResult::QSqlResult(QSqlResultPrivate &dd, const QSqlDriver *db) +QSqlResult::QSqlResult(QSqlResultPrivate &dd) + : d_ptr(&dd) { - d_ptr = ⅆ Q_D(QSqlResult); - d->q_ptr = this; - d->sqldriver = const_cast<QSqlDriver *>(db); if (d->sqldriver) setNumericalPrecisionPolicy(d->sqldriver->numericalPrecisionPolicy()); } diff --git a/src/sql/kernel/qsqlresult.h b/src/sql/kernel/qsqlresult.h index c86a8f858f..4a4b358a49 100644 --- a/src/sql/kernel/qsqlresult.h +++ b/src/sql/kernel/qsqlresult.h @@ -66,7 +66,7 @@ protected: }; explicit QSqlResult(const QSqlDriver * db); - QSqlResult(QSqlResultPrivate &dd, const QSqlDriver *db); + QSqlResult(QSqlResultPrivate &dd); int at() const; QString lastQuery() const; QSqlError lastError() const; diff --git a/src/sql/kernel/qsqlresult_p.h b/src/sql/kernel/qsqlresult_p.h index 34b260d89b..b158618b78 100644 --- a/src/sql/kernel/qsqlresult_p.h +++ b/src/sql/kernel/qsqlresult_p.h @@ -46,12 +46,17 @@ // #include <QtCore/qpointer.h> -#include <QtSql/qsqldriver.h> #include "qsqlerror.h" #include "qsqlresult.h" +#include "qsqldriver.h" QT_BEGIN_NAMESPACE +// convenience method Q*ResultPrivate::drv_d_func() returns pointer to private driver. Compare to Q_DECLARE_PRIVATE in qglobal.h. +#define Q_DECLARE_SQLDRIVER_PRIVATE(Class) \ + inline const Class##Private* drv_d_func() const { return !sqldriver ? nullptr : reinterpret_cast<const Class *>(static_cast<const QSqlDriver*>(sqldriver))->d_func(); } \ + inline Class##Private* drv_d_func() { return !sqldriver ? nullptr : reinterpret_cast<Class *>(static_cast<QSqlDriver*>(sqldriver))->d_func(); } + struct QHolder { QHolder(const QString &hldr = QString(), int index = -1): holderName(hldr), holderPos(index) { } bool operator==(const QHolder &h) const { return h.holderPos == holderPos && h.holderName == holderName; } @@ -62,10 +67,12 @@ struct QHolder { class Q_SQL_EXPORT QSqlResultPrivate { + Q_DECLARE_PUBLIC(QSqlResult) public: - QSqlResultPrivate() - : q_ptr(0), + QSqlResultPrivate(QSqlResult *q, const QSqlDriver *drv) + : q_ptr(q), + sqldriver(const_cast<QSqlDriver*>(drv)), idx(QSql::BeforeFirstRow), active(false), isSel(false), |