MySQL: Free the results when QSqlQuery::finished() is called

Calling mysql_stmt_free_result() frees the results of the last
executed query while keeping the prepared statement valid. This
allows to keep around prepared QSqlQueries without the overhead
of keeping all the results in memory.

Change-Id: I4589e90857cc4e9a6f9612799bfca967a67e2ab2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
bb10
Daniel Vrátil 2018-12-01 17:56:41 +01:00
parent 1986392255
commit 97d8be10cd
1 changed files with 10 additions and 0 deletions

View File

@ -197,6 +197,7 @@ protected:
QSqlRecord record() const override;
void virtual_hook(int id, void *data) override;
bool nextResult() override;
void detachFromResultSet() override;
#if MYSQL_VERSION_ID >= 40108
bool prepare(const QString &stmt) override;
@ -804,6 +805,15 @@ int QMYSQLResult::numRowsAffected()
return d->rowsAffected;
}
void QMYSQLResult::detachFromResultSet()
{
Q_D(QMYSQLResult);
if (d->preparedQuery) {
mysql_stmt_free_result(d->stmt);
}
}
QVariant QMYSQLResult::lastInsertId() const
{
Q_D(const QMYSQLResult);