summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql/models/qsqltablemodel
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-09-28 16:27:45 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-05 03:16:22 +0200
commitc1f15c0485e6eedac6c6b4d949dbc7e2ed33091e (patch)
tree0db8d11d66658addbe88af5d8944b31423a40998 /tests/auto/sql/models/qsqltablemodel
parenta97c2d8c83aecd32e0e9893ef192eef1fd6065c7 (diff)
QSqlTableModel: record(row) must use virtual data()
Commit fbf010a26617b3986e9a76bd9c004403aebfcdc2 introduced a version of record(row) that includes the generated flags, but it neglected to populate the values using virtual data() as QSqlQueryModel correctly does. Test included lest we forget again. Change-Id: I49d0f8f87cd0c5078aa6a0e8373b2cffc01f2387 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'tests/auto/sql/models/qsqltablemodel')
-rw-r--r--tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
index d3407de53b..bd9e458979 100644
--- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -87,6 +87,8 @@ private slots:
void setRecord();
void setRecordReimpl_data() { generic_data(); }
void setRecordReimpl();
+ void recordReimpl_data() { generic_data(); }
+ void recordReimpl();
void insertRow_data() { generic_data_with_strategies(); }
void insertRow();
void insertRowFailure_data() { generic_data_with_strategies(); }
@@ -574,6 +576,45 @@ void tst_QSqlTableModel::setRecordReimpl()
QCOMPARE(rec.value(2).toString(), QString("Qt"));
}
+class RecordReimplModel: public QSqlTableModel
+{
+ Q_OBJECT
+public:
+ RecordReimplModel(QObject *parent, QSqlDatabase db):QSqlTableModel(parent, db) {}
+ QVariant data(const QModelIndex &index, int role = Qt::EditRole) const
+ {
+ if (role == Qt::EditRole)
+ return QString("Qt");
+ else
+ return QSqlTableModel::data(index, role);
+ }
+};
+
+void tst_QSqlTableModel::recordReimpl()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ RecordReimplModel model(0, db);
+ model.setEditStrategy(QSqlTableModel::OnManualSubmit);
+ model.setTable(test3);
+ model.setSort(0, Qt::AscendingOrder);
+ QVERIFY_SQL(model, select());
+
+ // make sure reimplemented data() affects record(row)
+ QSqlRecord rec = model.record(0);
+ QCOMPARE(rec.value(1).toString(), QString("Qt"));
+ QCOMPARE(rec.value(2).toString(), QString("Qt"));
+
+ // and also when the record is in the cache
+ QVERIFY_SQL(model, setData(model.index(0, 1), QString("not Qt")));
+ QVERIFY_SQL(model, setData(model.index(0, 2), QString("not Qt")));
+
+ rec = model.record(0);
+ QCOMPARE(rec.value(1).toString(), QString("Qt"));
+ QCOMPARE(rec.value(2).toString(), QString("Qt"));
+}
+
void tst_QSqlTableModel::insertRow()
{
QFETCH(QString, dbName);