summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
Diffstat (limited to 'src/sql')
-rw-r--r--src/sql/models/qsqltablemodel.cpp20
-rw-r--r--src/sql/models/qsqltablemodel_p.h8
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)