summaryrefslogtreecommitdiffstats
path: root/src/sql/drivers
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2013-02-10 22:21:07 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-04-02 14:31:44 +0200
commitdb6190d6fe261712236b61a208f821c1c0fd7f00 (patch)
tree2ef1837b5039e2a32b49cb63ecbed2f4e3a3f6cc /src/sql/drivers
parent7565f6fe0a759f4c04d2ba30730165348f359692 (diff)
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 <israelins85@yahoo.com.br> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/drivers')
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp35
-rw-r--r--src/sql/drivers/psql/qsql_psql_p.h6
2 files changed, 29 insertions, 12 deletions
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<const QPSQLDriver *>(q->driver())->d; }
+ const QPSQLDriverPrivate * privDriver() const {Q_Q(const QPSQLResult); return reinterpret_cast<const QPSQLDriver *>(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;