summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-02-13 09:57:56 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-15 02:36:25 +0100
commitf805dd0b40c4b99b63e13e6e1bff08a63b76e0dd (patch)
treeafa987264b1412e3bf555864d8df00b335bf86c5
parent555aa4439b3a4a2c5fd12b6ac155b87fe69e749f (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.cpp31
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();