summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-02-14 22:26:43 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-28 09:12:03 +0100
commit52dab549868d41fbfb6f3f612c380fb750755aa3 (patch)
tree3292a5a6ba991b59a882a50857505ce2c788b788 /src
parent8f872ee0e815b27ac6fc13345bb3c80b7e71d083 (diff)
QSqlTableModel: unify code for cache-clearing before select
The code in submitAll() had the same goal as the code in select, so it has been unified. The new code in select() avoids sending lots of dataChanged() signals for rows that are going to be removed by QSqlQueryModel anyway. Change-Id: Ic22e038223720185e47ed0cc573147745ecc8fc9 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/sql/models/qsqltablemodel.cpp31
1 files changed, 12 insertions, 19 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index b36a54bbe9..571c28f515 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -378,13 +378,19 @@ bool QSqlTableModel::select()
if (query.isEmpty())
return false;
- // clear the submitted flags so revertAll can do its job
- for (QSqlTableModelPrivate::CacheMap::Iterator it = d->cache.begin();
- it != d->cache.constEnd();
- ++it)
- it.value().setSubmitted(false);
+ QSqlTableModelPrivate::CacheMap::Iterator it = d->cache.end();
+ while (it != d->cache.constBegin()) {
+ --it;
+ // rows must be accounted for
+ if (it.value().op() == QSqlTableModelPrivate::Insert) {
+ beginRemoveRows(QModelIndex(), it.key(), it.key());
+ it = d->cache.erase(it);
+ endRemoveRows();
+ } else {
+ it = d->cache.erase(it);
+ }
+ }
- revertAll();
QSqlQuery qu(query, d->db);
setQuery(qu);
@@ -681,19 +687,6 @@ bool QSqlTableModel::submitAll()
it.value().setSubmitted(true);
}
- // all changes have been committed
-
- // clean up inserted rows
- QSqlTableModelPrivate::CacheMap::Iterator it = d->cache.end();
- while (it != d->cache.constBegin()) {
- --it;
- if (it.value().op() == QSqlTableModelPrivate::Insert) {
- beginRemoveRows(QModelIndex(), it.key(), it.key());
- it = d->cache.erase(it);
- endRemoveRows();
- }
- }
- d->clearCache();
return select();
}