summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;