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)
int numRowsAffected();
QSqlRecord record() const;
void virtual_hook(int id, void *data);
+ void detachFromResultSet();
bool nextResult();
private:
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);
}
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);
}
int numRowsAffected();
QSqlRecord record() const;
QVariant lastInsertId() const;
+ bool execBatch(bool arrayBind = false);
void virtual_hook(int id, void *data);
private:
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;
int numRowsAffected();
QSqlRecord record() const;
void virtual_hook(int id, void *data);
+ void detachFromResultSet();
bool nextResult();
private:
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);
}
return d->rInf;
}
+void QSQLiteResult::detachFromResultSet()
+{
+ if (d->stmt)
+ sqlite3_reset(d->stmt);
+}
+
QVariant QSQLiteResult::handle() const
{
return QVariant::fromValue(d->stmt);
int numRowsAffected();
QVariant lastInsertId() const;
QSqlRecord record() const;
+ void detachFromResultSet();
void virtual_hook(int id, void *data);
private:
void QSQLite2Result::virtual_hook(int id, void *data)
{
switch (id) {
- case QSqlResult::DetachFromResultSet:
- d->finalize();
- break;
default:
QSqlCachedResult::virtual_hook(id, data);
}
return d->rInf;
}
+void QSQLite2Result::detachFromResultSet()
+{
+ d->finalize();
+}
+
QVariant QSQLite2Result::handle() const
{
return QVariant::fromValue(d->currentMachine);
int size();
int numRowsAffected();
QSqlRecord record() const;
+ void detachFromResultSet();
void virtual_hook(int id, void *data);
private:
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
ValueCache &cache();
void virtual_hook(int id, void *data);
+ void detachFromResultSet();
+ void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy);
private:
bool cacheNext();
QSqlCachedResultPrivate *d;
*/
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
void QSqlResult::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy)
{
d->precisionPolicy = policy;
- virtual_hook(SetNumericalPrecision, &policy);
}
/*! \internal
*/
bool QSqlResult::nextResult()
{
- if (driver()->hasFeature(QSqlDriver::MultipleResultSets)) {
- bool result = false;
- virtual_hook(NextResult, &result);
- return result;
- }
return false;
}
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;