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 /src/sql/models | |
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 'src/sql/models')
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index a3fdd06442..29e9367cca 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -1311,10 +1311,18 @@ QSqlRecord QSqlTableModel::record(int row) const { Q_D(const QSqlTableModel); - if (d->cache.contains(row)) - return d->cache.value(row).rec(); + // the query gets the values from virtual data() + QSqlRecord rec = QSqlQueryModel::record(row); + + // get generated flags from the cache + const QSqlTableModelPrivate::ModifiedRow mrow = d->cache.value(row); + if (mrow.op() != QSqlTableModelPrivate::None) { + const QSqlRecord crec = mrow.rec(); + for (int i = 0, cnt = rec.count(); i < cnt; ++i) + rec.setGenerated(i, crec.isGenerated(i)); + } - return QSqlQueryModel::record(row); + return rec; } /*! |