diff options
Diffstat (limited to 'src/sql/models/qsqltablemodel_p.h')
-rw-r--r-- | src/sql/models/qsqltablemodel_p.h | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/src/sql/models/qsqltablemodel_p.h b/src/sql/models/qsqltablemodel_p.h index 57051a0e9c..ba2fdf5df3 100644 --- a/src/sql/models/qsqltablemodel_p.h +++ b/src/sql/models/qsqltablemodel_p.h @@ -101,18 +101,51 @@ public: { public: inline ModifiedRow(Op o = None, const QSqlRecord &r = QSqlRecord()) - : m_op(o), m_rec(r), m_submitted(false) - { init_rec(); } + : m_op(None), m_db_values(r), m_insert(o == Insert) + { setOp(o); } inline Op op() const { return m_op; } + inline void setOp(Op o) + { + if (o == m_op) + return; + m_submitted = (o != Insert && o != Delete); + m_op = o; + m_rec = m_db_values; + setGenerated(m_rec, m_op == Delete); + } inline QSqlRecord rec() const { return m_rec; } inline QSqlRecord& recRef() { return m_rec; } inline void setValue(int c, const QVariant &v) { + m_submitted = false; m_rec.setValue(c, v); m_rec.setGenerated(c, true); } inline bool submitted() const { return m_submitted; } - inline void setSubmitted() { m_submitted = true; } + inline void setSubmitted() + { + m_submitted = true; + setGenerated(m_rec, false); + if (m_op == Delete) { + m_rec.clearValues(); + } + else { + m_op = Update; + m_db_values = m_rec; + setGenerated(m_db_values, true); + } + } + inline bool insert() const { return m_insert; } + inline void revert() + { + if (m_submitted) + return; + if (m_op == Delete) + m_op = Update; + m_rec = m_db_values; + setGenerated(m_rec, false); + m_submitted = true; + } inline QSqlRecord primaryValues(const QSqlRecord& pi) const { if (m_op == None || m_op == Insert) @@ -126,16 +159,16 @@ public: return values; } private: - void init_rec() + inline static void setGenerated(QSqlRecord& r, bool g) { - for (int i = m_rec.count() - 1; i >= 0; --i) - m_rec.setGenerated(i, false); - m_db_values = m_rec; + for (int i = r.count() - 1; i >= 0; --i) + r.setGenerated(i, g); } Op m_op; QSqlRecord m_rec; QSqlRecord m_db_values; bool m_submitted; + bool m_insert; }; typedef QMap<int, ModifiedRow> CacheMap; |