diff options
Diffstat (limited to 'src/sql')
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 20 | ||||
-rw-r--r-- | src/sql/models/qsqltablemodel_p.h | 8 |
2 files changed, 21 insertions, 7 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index ce830ce740..fbd9207741 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -195,9 +195,27 @@ bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement, return true; } +QSqlRecord QSqlTableModelPrivate::primaryValues(const QSqlRecord &rec, const QSqlRecord &pIndex) +{ + QSqlRecord pValues(pIndex); + + for (int i = pValues.count() - 1; i >= 0; --i) + pValues.setValue(i, rec.value(pValues.fieldName(i))); + + return pValues; +} + QSqlRecord QSqlTableModelPrivate::primaryValues(int row) const { - return cache.value(row).primaryValues(primaryIndex.isEmpty() ? rec : primaryIndex); + Q_Q(const QSqlTableModel); + + const QSqlRecord &pIndex = primaryIndex.isEmpty() ? rec : primaryIndex; + + ModifiedRow mr = cache.value(row); + if (mr.op() != None) + return mr.primaryValues(pIndex); + else + return primaryValues(q->QSqlQueryModel::record(row), pIndex); } /*! diff --git a/src/sql/models/qsqltablemodel_p.h b/src/sql/models/qsqltablemodel_p.h index ccdc1243a5..462ff96093 100644 --- a/src/sql/models/qsqltablemodel_p.h +++ b/src/sql/models/qsqltablemodel_p.h @@ -70,6 +70,7 @@ public: busyInsertingRows(false) {} void clear(); + static QSqlRecord primaryValues(const QSqlRecord &rec, const QSqlRecord &pIndex); QSqlRecord primaryValues(int index) const; virtual void clearCache(); QSqlRecord record(const QVector<QVariant> &values) const; @@ -167,12 +168,7 @@ public: if (m_op == None || m_op == Insert) return QSqlRecord(); - QSqlRecord values(pi); - - for (int i = values.count() - 1; i >= 0; --i) - values.setValue(i, m_db_values.value(values.fieldName(i))); - - return values; + return QSqlTableModelPrivate::primaryValues(m_db_values, pi); } private: inline static void setGenerated(QSqlRecord& r, bool g) |