summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sql/models/qsqltablemodel.cpp11
-rw-r--r--src/sql/models/qsqltablemodel_p.h12
2 files changed, 13 insertions, 10 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index d31e4bc335..a2999b30c4 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -201,16 +201,7 @@ bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,
QSqlRecord QSqlTableModelPrivate::primaryValues(int row) const
{
- Q_Q(const QSqlTableModel);
- if (cache.value(row).op() == Insert)
- return QSqlRecord();
-
- QSqlRecord values(primaryIndex.isEmpty() ? rec : primaryIndex);
-
- for (int i = 0; i < values.count(); ++i)
- values.setValue(i, q->QSqlQueryModel::data(createIndex(row, rec.indexOf(values.fieldName(i))), Qt::EditRole));
-
- return values;
+ return cache.value(row).primaryValues(primaryIndex.isEmpty() ? rec : primaryIndex);
}
/*!
diff --git a/src/sql/models/qsqltablemodel_p.h b/src/sql/models/qsqltablemodel_p.h
index 7266810c40..57051a0e9c 100644
--- a/src/sql/models/qsqltablemodel_p.h
+++ b/src/sql/models/qsqltablemodel_p.h
@@ -113,6 +113,18 @@ public:
}
inline bool submitted() const { return m_submitted; }
inline void setSubmitted() { m_submitted = true; }
+ inline QSqlRecord primaryValues(const QSqlRecord& pi) const
+ {
+ 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;
+ }
private:
void init_rec()
{