From db6190d6fe261712236b61a208f821c1c0fd7f00 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Sun, 10 Feb 2013 22:21:07 +0100 Subject: QPSQLResultPrivate inherit QSqlResultPrivate Follow the usual pattern that a subclass's private class inherits its base classes's private class. This will allow the private class to use virtual functions. Change-Id: Iafdf1cb5db672d973ad1f60bdd7e37b9072fbb1b Reviewed-by: Israel Lins Albuquerque Reviewed-by: Konstantin Ritt Reviewed-by: Mark Brand --- src/sql/drivers/psql/qsql_psql.cpp | 35 +++++++++++++++++++++++++++-------- src/sql/drivers/psql/qsql_psql_p.h | 6 ++---- 2 files changed, 29 insertions(+), 12 deletions(-) (limited to 'src/sql/drivers') diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 2cec5b6b5e..6b642dcb15 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -191,15 +191,21 @@ PGresult * QPSQLDriverPrivate::exec(const QString & stmt) const return exec(isUtf8 ? stmt.toUtf8().constData() : stmt.toLocal8Bit().constData()); } -class QPSQLResultPrivate +class QPSQLResultPrivate : public QSqlResultPrivate { + Q_DECLARE_PUBLIC(QPSQLResult) public: - QPSQLResultPrivate(QPSQLResult *qq): q(qq), result(0), currentSize(-1), preparedQueriesEnabled(false) {} + QPSQLResultPrivate() + : QSqlResultPrivate(), + result(0), + currentSize(-1), + preparedQueriesEnabled(false) + { } + static QString fieldSerial(int i) { return QLatin1Char('$') + QString::number(i + 1); } void deallocatePreparedStmt(); - const QPSQLDriverPrivate * privDriver() const { return reinterpret_cast(q->driver())->d; } + const QPSQLDriverPrivate * privDriver() const {Q_Q(const QPSQLResult); return reinterpret_cast(q->driver())->d; } - QPSQLResult *q; PGresult *result; int currentSize; bool preparedQueriesEnabled; @@ -222,6 +228,7 @@ static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, bool QPSQLResultPrivate::processResults() { + Q_Q(QPSQLResult); if (!result) return false; @@ -300,29 +307,30 @@ void QPSQLResultPrivate::deallocatePreparedStmt() } QPSQLResult::QPSQLResult(const QPSQLDriver* db) - : QSqlResult(db) + : QSqlResult(*new QPSQLResultPrivate, db) { - d = new QPSQLResultPrivate(this); + Q_D(QPSQLResult); d->preparedQueriesEnabled = db->hasFeature(QSqlDriver::PreparedQueries); } QPSQLResult::~QPSQLResult() { + Q_D(QPSQLResult); cleanup(); if (d->preparedQueriesEnabled && !d->preparedStmtId.isNull()) d->deallocatePreparedStmt(); - - delete d; } QVariant QPSQLResult::handle() const { + Q_D(const QPSQLResult); return QVariant::fromValue(d->result); } void QPSQLResult::cleanup() { + Q_D(QPSQLResult); if (d->result) PQclear(d->result); d->result = 0; @@ -333,6 +341,7 @@ void QPSQLResult::cleanup() bool QPSQLResult::fetch(int i) { + Q_D(const QPSQLResult); if (!isActive()) return false; if (i < 0) @@ -352,11 +361,13 @@ bool QPSQLResult::fetchFirst() bool QPSQLResult::fetchLast() { + Q_D(const QPSQLResult); return fetch(PQntuples(d->result) - 1); } QVariant QPSQLResult::data(int i) { + Q_D(const QPSQLResult); if (i >= PQnfields(d->result)) { qWarning("QPSQLResult::data: column %d out of range", i); return QVariant(); @@ -457,12 +468,14 @@ QVariant QPSQLResult::data(int i) bool QPSQLResult::isNull(int field) { + Q_D(const QPSQLResult); PQgetvalue(d->result, at(), field); return PQgetisnull(d->result, at(), field); } bool QPSQLResult::reset (const QString& query) { + Q_D(QPSQLResult); cleanup(); if (!driver()) return false; @@ -474,16 +487,19 @@ bool QPSQLResult::reset (const QString& query) int QPSQLResult::size() { + Q_D(const QPSQLResult); return d->currentSize; } int QPSQLResult::numRowsAffected() { + Q_D(const QPSQLResult); return QString::fromLatin1(PQcmdTuples(d->result)).toInt(); } QVariant QPSQLResult::lastInsertId() const { + Q_D(const QPSQLResult); if (d->privDriver()->pro >= QPSQLDriver::Version81) { QSqlQuery qry(driver()->createResult()); // Most recent sequence value obtained from nextval @@ -499,6 +515,7 @@ QVariant QPSQLResult::lastInsertId() const QSqlRecord QPSQLResult::record() const { + Q_D(const QPSQLResult); QSqlRecord info; if (!isActive() || !isSelect()) return info; @@ -567,6 +584,7 @@ QString qMakePreparedStmtId() bool QPSQLResult::prepare(const QString &query) { + Q_D(QPSQLResult); if (!d->preparedQueriesEnabled) return QSqlResult::prepare(query); @@ -595,6 +613,7 @@ bool QPSQLResult::prepare(const QString &query) bool QPSQLResult::exec() { + Q_D(QPSQLResult); if (!d->preparedQueriesEnabled) return QSqlResult::exec(); diff --git a/src/sql/drivers/psql/qsql_psql_p.h b/src/sql/drivers/psql/qsql_psql_p.h index 21c1c84a6d..a20b9de3ef 100644 --- a/src/sql/drivers/psql/qsql_psql_p.h +++ b/src/sql/drivers/psql/qsql_psql_p.h @@ -73,7 +73,8 @@ class QSqlRecordInfo; class QPSQLResult : public QSqlResult { - friend class QPSQLResultPrivate; + Q_DECLARE_PRIVATE(QPSQLResult) + public: QPSQLResult(const QPSQLDriver* db); ~QPSQLResult(); @@ -95,9 +96,6 @@ protected: QVariant lastInsertId() const; bool prepare(const QString& query); bool exec(); - -private: - QPSQLResultPrivate *d; }; class QPSQLDriverPrivate; -- cgit v1.2.3