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 \since 6.9
Re-executes the current query to fetch the data from the same database connection. 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() \sa setQuery(QSqlQuery &&query), QSqlQuery::boundValue()
*/ */
void QSqlQueryModel::refreshQuery() void QSqlQueryModel::refresh()
{ {
Q_D(QSqlQueryModel); Q_D(QSqlQueryModel);
setQuery(d->query.executedQuery()); const auto connName = d->query.driver()
} ? d->query.driver()->connectionName() : QString();
setQuery(d->query.executedQuery(), QSqlDatabase::database(connName));
/*!
\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);
} }
/*! /*!

View File

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

View File

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