summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/sql')
-rw-r--r--tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
index cbc9cd51c3..a4e1fa1c0d 100644
--- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -77,6 +77,8 @@ private slots:
void select();
void selectRow_data() { generic_data(); }
void selectRow();
+ void selectRowOverride_data() { generic_data(); }
+ void selectRowOverride();
void insertColumns_data() { generic_data_with_strategies(); }
void insertColumns();
void submitAll_data() { generic_data(); }
@@ -356,6 +358,53 @@ void tst_QSqlTableModel::selectRow()
q.exec("DELETE FROM " + tbl);
}
+class SelectRowOverrideTestModel: public QSqlTableModel
+{
+ Q_OBJECT
+public:
+ SelectRowOverrideTestModel(QObject *parent, QSqlDatabase db):QSqlTableModel(parent, db) { }
+ bool selectRow(int row)
+ {
+ Q_UNUSED(row)
+ return select();
+ }
+};
+
+void tst_QSqlTableModel::selectRowOverride()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QString tbl = qTableName("pktest", __FILE__);
+ QSqlQuery q(db);
+ q.exec("DELETE FROM " + tbl);
+ q.exec("INSERT INTO " + tbl + " (id, a) VALUES (0, 'a')");
+ q.exec("INSERT INTO " + tbl + " (id, a) VALUES (1, 'b')");
+ q.exec("INSERT INTO " + tbl + " (id, a) VALUES (2, 'c')");
+
+ SelectRowOverrideTestModel model(0, db);
+ model.setEditStrategy(QSqlTableModel::OnFieldChange);
+ model.setTable(tbl);
+ model.setSort(0, Qt::AscendingOrder);
+ QVERIFY_SQL(model, select());
+
+ QCOMPARE(model.rowCount(), 3);
+ QCOMPARE(model.columnCount(), 2);
+
+ q.exec("UPDATE " + tbl + " SET a = 'Qt' WHERE id = 2");
+ QModelIndex idx = model.index(1, 1);
+ // overridden selectRow() should select() whole table and not crash
+ model.setData(idx, QString("Qt"));
+
+ // both rows should have changed
+ QCOMPARE(model.data(idx).toString(), QString("Qt"));
+ idx = model.index(2, 1);
+ QCOMPARE(model.data(idx).toString(), QString("Qt"));
+
+ q.exec("DELETE FROM " + tbl);
+}
+
void tst_QSqlTableModel::insertColumns()
{
// Just like the select test, with extra stuff