diff options
author | Mark Brand <mabrand@mabrand.nl> | 2012-02-13 09:57:56 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-15 02:36:25 +0100 |
commit | f805dd0b40c4b99b63e13e6e1bff08a63b76e0dd (patch) | |
tree | afa987264b1412e3bf555864d8df00b335bf86c5 | |
parent | 555aa4439b3a4a2c5fd12b6ac155b87fe69e749f (diff) |
QSqlTableModel::primaryValues(): take care of row mapping
There is no reason for the caller to be concerned with this.
primaryValues() now takes advantage of the fact that QSqlQueryModel
uses indexInQuery which was recently made virtual.
Change-Id: I7d856ee05f55c3199fd17c618e559320d0582989
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index cbb0496447..457e7539a3 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -196,21 +196,16 @@ bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement, QSqlRecord QSqlTableModelPrivate::primaryValues(int row) const { - QSqlRecord record; - if (!query.seek(row)) { - error = query.lastError(); - return record; - } - if (primaryIndex.isEmpty()) { - record = rec; - for (int i = 0; i < record.count(); ++i) - record.setValue(i, query.value(i)); - } else { - record = primaryIndex; - for (int i = 0; i < record.count(); ++i) - record.setValue(i, query.value(rec.indexOf(record.fieldName(i)))); - } - return record; + Q_Q(const QSqlTableModel); + if (cache.value(row).op() == Insert) + return QSqlRecord(); + + QSqlRecord values(primaryIndex.isEmpty() ? rec : primaryIndex); + + for (int i = 0; i < values.count(); ++i) + values.setValue(i, q->QSqlQueryModel::data(createIndex(row, rec.indexOf(values.fieldName(i))), Qt::EditRole)); + + return values; } /*! @@ -510,7 +505,7 @@ bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, in if (row.op() == QSqlTableModelPrivate::None) { row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update, d->rec, - d->primaryValues(indexInQuery(index).row())); + d->primaryValues(index.row())); } row.setValue(index.column(), value); @@ -1016,7 +1011,7 @@ bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent) } else { d->cache[idx] = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Delete, QSqlRecord(), - d->primaryValues(indexInQuery(createIndex(idx, 0)).row())); + d->primaryValues(idx)); if (d->strategy == OnManualSubmit) emit headerDataChanged(Qt::Vertical, idx, idx); } @@ -1233,7 +1228,7 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record) if (mrow.op() == QSqlTableModelPrivate::None) mrow = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update, d->rec, - d->primaryValues(indexInQuery(createIndex(row, 0)).row())); + d->primaryValues(row)); Map::const_iterator i = map.constBegin(); const Map::const_iterator e = map.constEnd(); |