summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-09-28 12:22:55 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-05 03:16:25 +0200
commit244eeae406b83227f08ea01f9417c07ecc3cf133 (patch)
treec442a81392b1e5f4cc55d7fc3c71d543a26e9833 /tests/auto/sql
parentc1f15c0485e6eedac6c6b4d949dbc7e2ed33091e (diff)
QSqlTableModel::selectRow(): don't expand cache if there is no change
Test added. Change-Id: Ibd72ef2aeee482abbd22991573460e55dc577457 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: David Faure (fixes for KDE) <faure@kde.org>
Diffstat (limited to 'tests/auto/sql')
-rw-r--r--tests/auto/sql/models/qsqltablemodel/qsqltablemodel.pro2
-rw-r--r--tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp21
2 files changed, 21 insertions, 2 deletions
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 <QtTest/QtTest>
#include "../../kernel/qsqldatabase/tst_databases.h"
#include <QtSql>
+#include <QtSql/private/qsqltablemodel_p.h>
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");