summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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();
}