summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-06-05 13:50:03 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-06 13:23:51 +0200
commitfc15a1d5e2cb064df7b6e7b9e821e9db20a91b85 (patch)
tree45355e4d5426f63c158353b0dea18457c76dbf6c /src
parent637ecd571f10bbab36b3321edb0479d79a542ddb (diff)
QSqlResult: replace virtual hooks with virtual functions
Instead of virtual functions which would have broken binary compatibility, virtual_hook() was used to implement the virtual functionality. Now, since the step to Qt 5.0 allows breaking binary compatibility, we take the opporunity to simplify the code using real virtual functions. SetNumericalPrecision --> setNumericalPrecisionPolicy() NextResult --> nextResult() DetachFromResultSet --> detachFromResultSet() BatchOperation --> execBatch() Task-number: QTBUG-25252 Change-Id: Idd3a870f876d8b8a7457559d5f31ec2073786a75 Reviewed-by: Bill King <bill.king@nokia.com> Reviewed-by: Harald Fernengel <harald.fernengel@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/sql/drivers/db2/qsql_db2.cpp14
-rw-r--r--src/sql/drivers/db2/qsql_db2.h1
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp4
-rw-r--r--src/sql/drivers/oci/qsql_oci.cpp10
-rw-r--r--src/sql/drivers/oci/qsql_oci.h1
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.cpp14
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.h1
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp10
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.h1
-rw-r--r--src/sql/drivers/sqlite2/qsql_sqlite2.cpp8
-rw-r--r--src/sql/drivers/sqlite2/qsql_sqlite2.h1
-rw-r--r--src/sql/kernel/qsqlcachedresult.cpp15
-rw-r--r--src/sql/kernel/qsqlcachedresult_p.h2
-rw-r--r--src/sql/kernel/qsqlresult.cpp34
-rw-r--r--src/sql/kernel/qsqlresult.h10
15 files changed, 63 insertions, 63 deletions
diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp
index d5d02ff20b..8ee65fd536 100644
--- a/src/sql/drivers/db2/qsql_db2.cpp
+++ b/src/sql/drivers/db2/qsql_db2.cpp
@@ -1120,19 +1120,17 @@ bool QDB2Result::nextResult()
void QDB2Result::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::NextResult:
- Q_ASSERT(data);
- *static_cast<bool*>(data) = nextResult();
- break;
- case QSqlResult::DetachFromResultSet:
- if (d->hStmt)
- SQLCloseCursor(d->hStmt);
- break;
default:
QSqlResult::virtual_hook(id, data);
}
}
+void QDB2Result::detachFromResultSet()
+{
+ if (d->hStmt)
+ SQLCloseCursor(d->hStmt);
+}
+
/************************************/
QDB2Driver::QDB2Driver(QObject* parent)
diff --git a/src/sql/drivers/db2/qsql_db2.h b/src/sql/drivers/db2/qsql_db2.h
index a2462a3435..cf25dee096 100644
--- a/src/sql/drivers/db2/qsql_db2.h
+++ b/src/sql/drivers/db2/qsql_db2.h
@@ -80,6 +80,7 @@ protected:
int numRowsAffected();
QSqlRecord record() const;
void virtual_hook(int id, void *data);
+ void detachFromResultSet();
bool nextResult();
private:
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index 9bd1de1851..84648ae815 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -839,10 +839,6 @@ bool QMYSQLResult::nextResult()
void QMYSQLResult::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::NextResult:
- Q_ASSERT(data);
- *static_cast<bool*>(data) = nextResult();
- break;
default:
QSqlResult::virtual_hook(id, data);
}
diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp
index 1e001f77b2..02eda36c9a 100644
--- a/src/sql/drivers/oci/qsql_oci.cpp
+++ b/src/sql/drivers/oci/qsql_oci.cpp
@@ -2042,14 +2042,18 @@ QVariant QOCIResult::lastInsertId() const
return QVariant();
}
+bool QOCIResult::execBatch(bool arrayBind)
+{
+ QOCICols::execBatch(d, boundValues(), arrayBind);
+ d->resetBindCount();
+ return d->error.type() == QSqlError::NoError;
+}
+
void QOCIResult::virtual_hook(int id, void *data)
{
Q_ASSERT(data);
switch (id) {
- case QSqlResult::BatchOperation:
- QOCICols::execBatch(d, boundValues(), *reinterpret_cast<bool *>(data));
- break;
default:
QSqlCachedResult::virtual_hook(id, data);
}
diff --git a/src/sql/drivers/oci/qsql_oci.h b/src/sql/drivers/oci/qsql_oci.h
index 9e97c84a7f..42a7c860ad 100644
--- a/src/sql/drivers/oci/qsql_oci.h
+++ b/src/sql/drivers/oci/qsql_oci.h
@@ -83,6 +83,7 @@ protected:
int numRowsAffected();
QSqlRecord record() const;
QVariant lastInsertId() const;
+ bool execBatch(bool arrayBind = false);
void virtual_hook(int id, void *data);
private:
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index 04bc0cc894..05f740cb41 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -1710,19 +1710,17 @@ bool QODBCResult::nextResult()
void QODBCResult::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::DetachFromResultSet:
- if (d->hStmt)
- SQLCloseCursor(d->hStmt);
- break;
- case QSqlResult::NextResult:
- Q_ASSERT(data);
- *static_cast<bool*>(data) = nextResult();
- break;
default:
QSqlResult::virtual_hook(id, data);
}
}
+void QODBCResult::detachFromResultSet()
+{
+ if (d->hStmt)
+ SQLCloseCursor(d->hStmt);
+}
+
void QODBCResult::setForwardOnly(bool forward)
{
d->userForwardOnly = forward;
diff --git a/src/sql/drivers/odbc/qsql_odbc.h b/src/sql/drivers/odbc/qsql_odbc.h
index a89ce0f9b3..6ae65a0805 100644
--- a/src/sql/drivers/odbc/qsql_odbc.h
+++ b/src/sql/drivers/odbc/qsql_odbc.h
@@ -104,6 +104,7 @@ protected:
int numRowsAffected();
QSqlRecord record() const;
void virtual_hook(int id, void *data);
+ void detachFromResultSet();
bool nextResult();
private:
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 168500e5a8..bfd08c9750 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -334,10 +334,6 @@ QSQLiteResult::~QSQLiteResult()
void QSQLiteResult::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::DetachFromResultSet:
- if (d->stmt)
- sqlite3_reset(d->stmt);
- break;
default:
QSqlCachedResult::virtual_hook(id, data);
}
@@ -495,6 +491,12 @@ QSqlRecord QSQLiteResult::record() const
return d->rInf;
}
+void QSQLiteResult::detachFromResultSet()
+{
+ if (d->stmt)
+ sqlite3_reset(d->stmt);
+}
+
QVariant QSQLiteResult::handle() const
{
return QVariant::fromValue(d->stmt);
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.h b/src/sql/drivers/sqlite/qsql_sqlite.h
index 8232be0ebc..0af6f6392f 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.h
+++ b/src/sql/drivers/sqlite/qsql_sqlite.h
@@ -79,6 +79,7 @@ protected:
int numRowsAffected();
QVariant lastInsertId() const;
QSqlRecord record() const;
+ void detachFromResultSet();
void virtual_hook(int id, void *data);
private:
diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
index 53876404c0..70dd178497 100644
--- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
+++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
@@ -267,9 +267,6 @@ QSQLite2Result::~QSQLite2Result()
void QSQLite2Result::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::DetachFromResultSet:
- d->finalize();
- break;
default:
QSqlCachedResult::virtual_hook(id, data);
}
@@ -343,6 +340,11 @@ QSqlRecord QSQLite2Result::record() const
return d->rInf;
}
+void QSQLite2Result::detachFromResultSet()
+{
+ d->finalize();
+}
+
QVariant QSQLite2Result::handle() const
{
return QVariant::fromValue(d->currentMachine);
diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.h b/src/sql/drivers/sqlite2/qsql_sqlite2.h
index 4df870f3ae..83961ec371 100644
--- a/src/sql/drivers/sqlite2/qsql_sqlite2.h
+++ b/src/sql/drivers/sqlite2/qsql_sqlite2.h
@@ -77,6 +77,7 @@ protected:
int size();
int numRowsAffected();
QSqlRecord record() const;
+ void detachFromResultSet();
void virtual_hook(int id, void *data);
private:
diff --git a/src/sql/kernel/qsqlcachedresult.cpp b/src/sql/kernel/qsqlcachedresult.cpp
index 1971a2935d..38d9525c92 100644
--- a/src/sql/kernel/qsqlcachedresult.cpp
+++ b/src/sql/kernel/qsqlcachedresult.cpp
@@ -305,14 +305,21 @@ QSqlCachedResult::ValueCache &QSqlCachedResult::cache()
void QSqlCachedResult::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::DetachFromResultSet:
- case QSqlResult::SetNumericalPrecision:
- cleanup();
- break;
default:
QSqlResult::virtual_hook(id, data);
}
}
+void QSqlCachedResult::detachFromResultSet()
+{
+ cleanup();
+}
+
+void QSqlCachedResult::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy)
+{
+ QSqlResult::setNumericalPrecisionPolicy(policy);
+ cleanup();
+}
+
QT_END_NAMESPACE
diff --git a/src/sql/kernel/qsqlcachedresult_p.h b/src/sql/kernel/qsqlcachedresult_p.h
index 9feaa54999..1fcd62b44f 100644
--- a/src/sql/kernel/qsqlcachedresult_p.h
+++ b/src/sql/kernel/qsqlcachedresult_p.h
@@ -90,6 +90,8 @@ protected:
ValueCache &cache();
void virtual_hook(int id, void *data);
+ void detachFromResultSet();
+ void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy);
private:
bool cacheNext();
QSqlCachedResultPrivate *d;
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp
index 03e227bffc..2abcf85786 100644
--- a/src/sql/kernel/qsqlresult.cpp
+++ b/src/sql/kernel/qsqlresult.cpp
@@ -961,32 +961,24 @@ void QSqlResult::virtual_hook(int, void *)
*/
bool QSqlResult::execBatch(bool arrayBind)
{
- if (driver()->hasFeature(QSqlDriver::BatchOperations)) {
- virtual_hook(BatchOperation, &arrayBind);
- d->resetBindCount();
- return d->error.type() == QSqlError::NoError;
- } else {
- QVector<QVariant> values = d->values;
- if (values.count() == 0)
+ Q_UNUSED(arrayBind);
+
+ QVector<QVariant> values = d->values;
+ if (values.count() == 0)
+ return false;
+ for (int i = 0; i < values.at(0).toList().count(); ++i) {
+ for (int j = 0; j < values.count(); ++j)
+ bindValue(j, values.at(j).toList().at(i), QSql::In);
+ if (!exec())
return false;
- for (int i = 0; i < values.at(0).toList().count(); ++i) {
- for (int j = 0; j < values.count(); ++j)
- bindValue(j, values.at(j).toList().at(i), QSql::In);
- if (!exec())
- return false;
- }
- return true;
}
- return false;
+ return true;
}
/*! \internal
*/
void QSqlResult::detachFromResultSet()
{
- if (driver()->hasFeature(QSqlDriver::FinishQuery)
- || driver()->hasFeature(QSqlDriver::SimpleLocking))
- virtual_hook(DetachFromResultSet, 0);
}
/*! \internal
@@ -994,7 +986,6 @@ void QSqlResult::detachFromResultSet()
void QSqlResult::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy)
{
d->precisionPolicy = policy;
- virtual_hook(SetNumericalPrecision, &policy);
}
/*! \internal
@@ -1008,11 +999,6 @@ QSql::NumericalPrecisionPolicy QSqlResult::numericalPrecisionPolicy() const
*/
bool QSqlResult::nextResult()
{
- if (driver()->hasFeature(QSqlDriver::MultipleResultSets)) {
- bool result = false;
- virtual_hook(NextResult, &result);
- return result;
- }
return false;
}
diff --git a/src/sql/kernel/qsqlresult.h b/src/sql/kernel/qsqlresult.h
index 162451c6dd..9c4213f363 100644
--- a/src/sql/kernel/qsqlresult.h
+++ b/src/sql/kernel/qsqlresult.h
@@ -125,13 +125,13 @@ protected:
virtual QSqlRecord record() const;
virtual QVariant lastInsertId() const;
- enum VirtualHookOperation { BatchOperation, DetachFromResultSet, SetNumericalPrecision, NextResult };
+ enum VirtualHookOperation { };
virtual void virtual_hook(int id, void *data);
- bool execBatch(bool arrayBind = false);
- void detachFromResultSet();
- void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy);
+ virtual bool execBatch(bool arrayBind = false);
+ virtual void detachFromResultSet();
+ virtual void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy);
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
- bool nextResult();
+ virtual bool nextResult();
private:
QSqlResultPrivate* d;