From 244eeae406b83227f08ea01f9417c07ecc3cf133 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Fri, 28 Sep 2012 12:22:55 +0200 Subject: QSqlTableModel::selectRow(): don't expand cache if there is no change Test added. Change-Id: Ibd72ef2aeee482abbd22991573460e55dc577457 Reviewed-by: Marc Mutz Reviewed-by: David Faure (fixes for KDE) --- .../sql/models/qsqltablemodel/qsqltablemodel.pro | 2 +- .../models/qsqltablemodel/tst_qsqltablemodel.cpp | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'tests/auto/sql/models') diff --git a/tests/auto/sql/models/qsqltablemodel/qsqltablemodel.pro b/tests/auto/sql/models/qsqltablemodel/qsqltablemodel.pro index e1b150a11d..3ad44d61ef 100644 --- a/tests/auto/sql/models/qsqltablemodel/qsqltablemodel.pro +++ b/tests/auto/sql/models/qsqltablemodel/qsqltablemodel.pro @@ -2,7 +2,7 @@ CONFIG += testcase TARGET = tst_qsqltablemodel SOURCES += tst_qsqltablemodel.cpp -QT = core sql testlib +QT = core core-private sql sql-private testlib wince*: { plugFiles.files = ../../../plugins/sqldrivers diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp index bd9e458979..843ef7be42 100644 --- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp @@ -43,6 +43,7 @@ #include #include "../../kernel/qsqldatabase/tst_databases.h" #include +#include const QString test(qTableName("test", __FILE__)), test2(qTableName("test2", __FILE__)), @@ -319,6 +320,19 @@ void tst_QSqlTableModel::select() QCOMPARE(model.data(model.index(3, 3)), QVariant()); } +class SelectRowModel: public QSqlTableModel +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QSqlTableModel) +public: + SelectRowModel(QObject *parent, QSqlDatabase db): QSqlTableModel(parent, db) {} + bool cacheEmpty() const + { + Q_D(const QSqlTableModel); + return d->cache.isEmpty(); + } +}; + void tst_QSqlTableModel::selectRow() { QFETCH(QString, dbName); @@ -332,7 +346,7 @@ void tst_QSqlTableModel::selectRow() q.exec("INSERT INTO " + tbl + " (id, a) VALUES (1, 'b')"); q.exec("INSERT INTO " + tbl + " (id, a) VALUES (2, 'c')"); - QSqlTableModel model(0, db); + SelectRowModel model(0, db); model.setEditStrategy(QSqlTableModel::OnFieldChange); model.setTable(tbl); model.setSort(0, Qt::AscendingOrder); @@ -343,6 +357,11 @@ void tst_QSqlTableModel::selectRow() QModelIndex idx = model.index(1, 1); + // selectRow should not make the cache grow if there is no change. + model.selectRow(1); + QCOMPARE(model.data(idx).toString(), QString("b")); + QVERIFY_SQL(model, cacheEmpty()); + // Check if selectRow() refreshes an unchanged row. // Row is not in cache yet. q.exec("UPDATE " + tbl + " SET a = 'Qt' WHERE id = 1"); -- cgit v1.2.3