{
Q_Q(QSqlTableModel);
ModifiedRow r = cache.value(row);
+
+ // cannot revert a committed change
+ if (r.submitted())
+ return;
+
switch (r.op()) {
case QSqlTableModelPrivate::None:
Q_ASSERT_X(false, "QSqlTableModelPrivate::revertCachedRow()", "Invalid entry in cache map");
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);
+
revertAll();
QSqlQuery qu(query, d->db);
setQuery(qu);
{
Q_D(QSqlTableModel);
- for (QSqlTableModelPrivate::CacheMap::ConstIterator it = d->cache.constBegin();
+ for (QSqlTableModelPrivate::CacheMap::Iterator it = d->cache.begin();
it != d->cache.constEnd(); ++it) {
+ if (it.value().submitted())
+ continue;
+
switch (it.value().op()) {
case QSqlTableModelPrivate::Insert:
if (!insertRowIntoTable(it.value().rec()))
Q_ASSERT_X(false, "QSqlTableModel::submitAll()", "Invalid cache operation");
break;
}
+ it.value().setSubmitted(true);
}
// all changes have been committed
{
public:
inline ModifiedRow(Op o = None, const QSqlRecord &r = QSqlRecord())
- : m_op(o), m_rec(r)
+ : m_op(o), m_rec(r), m_submitted(false)
{
for (int i = m_rec.count() - 1; i >= 0; --i)
m_rec.setGenerated(i, false);
m_rec.setValue(c, v);
m_rec.setGenerated(c, true);
}
+ inline bool submitted() const { return m_submitted; }
+ inline void setSubmitted(bool b) { m_submitted = b; }
private:
Op m_op;
QSqlRecord m_rec;
+ bool m_submitted;
};
typedef QMap<int, ModifiedRow> CacheMap;