summaryrefslogtreecommitdiffstats
path: root/src/sql/kernel
diff options
context:
space:
mode:
authorMark Brand <[email protected]>2012-06-05 13:50:03 +0200
committerQt by Nokia <[email protected]>2012-06-06 13:23:51 +0200
commitfc15a1d5e2cb064df7b6e7b9e821e9db20a91b85 (patch)
tree45355e4d5426f63c158353b0dea18457c76dbf6c /src/sql/kernel
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 <[email protected]> Reviewed-by: Harald Fernengel <[email protected]>
Diffstat (limited to 'src/sql/kernel')
-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
4 files changed, 28 insertions, 33 deletions
diff --git a/src/sql/kernel/qsqlcachedresult.cpp b/src/sql/kernel/qsqlcachedresult.cpp
index 1971a2935de..38d9525c925 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 9feaa549994..1fcd62b44fd 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 03e227bffc0..2abcf857861 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 162451c6ddc..9c4213f3635 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;