diff options
author | Mark Brand <mabrand@mabrand.nl> | 2012-09-28 16:27:45 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-05 03:16:22 +0200 |
commit | c1f15c0485e6eedac6c6b4d949dbc7e2ed33091e (patch) | |
tree | 0db8d11d66658addbe88af5d8944b31423a40998 /tests/auto | |
parent | a97c2d8c83aecd32e0e9893ef192eef1fd6065c7 (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')
-rw-r--r-- | tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp | 41 |
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); |