QSqlQueryModel: add new function to refresh the model data

This function re-executes the query used by QSqlQueryModel and refreshes
the data from the database. The query must not use bound values as these
values are not preserved.

[ChangeLog][QtSql][QSqlQueryModel] Added refresh() to refresh the model
data from the database.

Task-number: QTBUG-123603
Change-Id: I3f1d779e07b88565abe825c31cfc4d7d1b2312c4
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 1bd883dbc15c4016f78d421afac2ac9f31ec4874)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Christian Ehrlicher 2024-12-17 19:54:55 +01:00 committed by Qt Cherry-pick Bot
parent fc29afbe1a
commit 7ab2885594
3 changed files with 14 additions and 28 deletions

View File

@ -473,29 +473,16 @@ void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db)
\since 6.9
Re-executes the current query to fetch the data from the same database connection.
\note \c refreshQuery() is not applicable when the query contains bound values.
\note \c refresh() is not applicable when the query contains bound values.
\sa setQuery(QSqlQuery &&query), QSqlQuery::boundValue()
*/
void QSqlQueryModel::refreshQuery()
void QSqlQueryModel::refresh()
{
Q_D(QSqlQueryModel);
setQuery(d->query.executedQuery());
}
/*!
\overload
\since 6.9
Re-executes the current query to fetch the data from the given database connection \a db.
\note \c refreshQuery(const QSqlDatabase &db) is not applicable when the query contains bound values.
\sa setQuery(const QString &query, const QSqlDatabase &db), QSqlQuery::boundValue()
*/
void QSqlQueryModel::refreshQuery(const QSqlDatabase &db)
{
Q_D(QSqlQueryModel);
setQuery(d->query.executedQuery(), db);
const auto connName = d->query.driver()
? d->query.driver()->connectionName() : QString();
setQuery(d->query.executedQuery(), QSqlDatabase::database(connName));
}
/*!

View File

@ -46,8 +46,7 @@ public:
#endif
void setQuery(QSqlQuery &&query);
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase());
void refreshQuery();
void refreshQuery(const QSqlDatabase &db);
void refresh();
#if QT_SQL_REMOVED_SINCE(6, 5)
QSqlQuery query() const;
#endif

View File

@ -59,10 +59,10 @@ private slots:
void task_180617();
void task_180617_data() { generic_data(); }
void task_QTBUG_4963_setHeaderDataWithProxyModel();
void refreshQuery_data() { generic_data(); }
void refreshQuery();
void refreshQueryWithBoundValues_data() { generic_data(); }
void refreshQueryWithBoundValues();
void refresh_data() { generic_data(); }
void refresh();
void refreshWithBoundValues_data() { generic_data(); }
void refreshWithBoundValues();
private:
void generic_data(const QString &engine = QString());
void dropTestTables(const QSqlDatabase &db);
@ -663,7 +663,7 @@ void tst_QSqlQueryModel::task_QTBUG_4963_setHeaderDataWithProxyModel()
// And it should not crash.
}
void tst_QSqlQueryModel::refreshQuery()
void tst_QSqlQueryModel::refresh()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
@ -677,7 +677,7 @@ void tst_QSqlQueryModel::refreshQuery()
QSqlQuery(db).exec("UPDATE " + qTableName("test", __FILE__, QSqlDatabase::database(dbName))
+ " SET name = 'updated_harry' WHERE id = 1");
model.refreshQuery(db);
model.refresh();
QCOMPARE(model.rowCount(), 2);
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
QCOMPARE(model.data(model.index(0, 1)).toString(), QString("updated_harry"));
@ -688,7 +688,7 @@ void tst_QSqlQueryModel::refreshQuery()
+ " SET name = 'harry' WHERE id = 1");
}
void tst_QSqlQueryModel::refreshQueryWithBoundValues()
void tst_QSqlQueryModel::refreshWithBoundValues()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
@ -707,7 +707,7 @@ void tst_QSqlQueryModel::refreshQueryWithBoundValues()
QSqlQuery(db).exec("UPDATE " + qTableName("test", __FILE__, QSqlDatabase::database(dbName))
+ " SET name = 'updated_harry' WHERE id = 1");
model.refreshQuery(db);
model.refresh();
QCOMPARE(model.rowCount(), 0);
QCOMPARE_NE(model.data(model.index(0, 0)).toString(), QString("updated_harry"));
QCOMPARE(model.data(model.index(0, 0)).toString(), QString(""));