diff options
author | Mark Brand <mabrand@mabrand.nl> | 2011-07-05 17:27:54 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-05 17:50:44 +0100 |
commit | 60f24ec608fc784731a18b43fa59b82ad41f9478 (patch) | |
tree | e0cabbe03c155be607ab3642e2a323bbd9de28f7 | |
parent | e5c8927fe87d0b0d91ac905ec2e57a4ea6f278ec (diff) |
reduce cost of checking cache for data() and headerData()
Assume requested row is usually not cached.
Change-Id: I7727b431cc3841528aa6390400b93b1218773e65
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index 3e5beb33b7..ff32533440 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -382,26 +382,29 @@ QVariant QSqlTableModel::data(const QModelIndex &index, int role) const // and indexInQuery is not virtual (grrr) so any values we pass to QSQM need // to handle the insertedRows QModelIndex item = indexInQuery(index); - const QSqlTableModelPrivate::ModifiedRow row = d->cache.value(index.row()); - switch (d->strategy) { - case OnFieldChange: - case OnRowChange: - if (row.op == QSqlTableModelPrivate::Insert) { - if (item.column() < 0 || item.column() >= row.rec.count()) - return QVariant(); - return row.rec.value(item.column()); - } else if (row.op == QSqlTableModelPrivate::Update) { - if (row.rec.isGenerated(item.column())) + if (d->cache.contains(index.row())) { + const QSqlTableModelPrivate::ModifiedRow row = d->cache.value(index.row()); + + switch (d->strategy) { + case OnFieldChange: + case OnRowChange: + if (row.op == QSqlTableModelPrivate::Insert) { + if (item.column() < 0 || item.column() >= row.rec.count()) + return QVariant(); + return row.rec.value(item.column()); + } else if (row.op == QSqlTableModelPrivate::Update) { + if (row.rec.isGenerated(item.column())) + return row.rec.value(item.column()); + } + break; + case OnManualSubmit: + if (row.op == QSqlTableModelPrivate::Insert + || (row.op != QSqlTableModelPrivate::None + && row.rec.isGenerated(item.column()))) return row.rec.value(item.column()); + break; } - break; - case OnManualSubmit: - if (row.op == QSqlTableModelPrivate::Insert - || (row.op != QSqlTableModelPrivate::None - && row.rec.isGenerated(item.column()))) - return row.rec.value(item.column()); - break; } // We need to handle row mapping here, but not column mapping @@ -415,11 +418,13 @@ QVariant QSqlTableModel::headerData(int section, Qt::Orientation orientation, in { Q_D(const QSqlTableModel); if (orientation == Qt::Vertical && role == Qt::DisplayRole) { - const QSqlTableModelPrivate::Op op = d->cache.value(section).op; - if (op == QSqlTableModelPrivate::Insert) - return QLatin1String("*"); - else if (op == QSqlTableModelPrivate::Delete) - return QLatin1String("!"); + if (d->cache.contains(section)) { + const QSqlTableModelPrivate::Op op = d->cache.value(section).op; + if (op == QSqlTableModelPrivate::Insert) + return QLatin1String("*"); + else if (op == QSqlTableModelPrivate::Delete) + return QLatin1String("!"); + } } return QSqlQueryModel::headerData(section, orientation, role); } |