summaryrefslogtreecommitdiffstats
path: root/src/sql/models
diff options
context:
space:
mode:
Diffstat (limited to 'src/sql/models')
-rw-r--r--src/sql/models/qsqltablemodel.cpp54
-rw-r--r--src/sql/models/qsqltablemodel_p.h1
2 files changed, 22 insertions, 33 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index 19c9ba7b9b..8f63ee3910 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -66,36 +66,6 @@ QSqlRecord QSqlTableModelPrivate::record(const QVector<QVariant> &values) const
return r;
}
-/*! \internal
- Set a record for OnFieldChange and OnRowChange.
-*/
-bool QSqlTableModelPrivate::setRecord(int row, const QSqlRecord &record)
-{
- Q_Q(QSqlTableModel);
- bool isOk = true;
-
- QSqlTableModel::EditStrategy oldStrategy = strategy;
-
- // FieldChange strategy makes no sense when setting an entire row
- if (strategy == QSqlTableModel::OnFieldChange)
- strategy = QSqlTableModel::OnRowChange;
- for (int i = 0; i < record.count(); ++i) {
- int idx = nameToIndex(record.fieldName(i));
- if (idx == -1)
- continue;
- QModelIndex cIndex = q->createIndex(row, idx);
- QVariant value = record.value(i);
- QVariant oldValue = q->data(cIndex);
- if (oldValue.isNull() || oldValue != value)
- isOk &= q->setData(cIndex, value, Qt::EditRole);
- }
- if (isOk && oldStrategy == QSqlTableModel::OnFieldChange)
- q->submitAll();
- strategy = oldStrategy;
-
- return isOk;
-}
-
int QSqlTableModelPrivate::nameToIndex(const QString &name) const
{
QString fieldname = name;
@@ -1236,8 +1206,28 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record)
bool isOk = true;
switch (d->strategy) {
case OnFieldChange:
- case OnRowChange:
- return d->setRecord(row, record);
+ case OnRowChange: {
+ EditStrategy oldStrategy = d->strategy;
+
+ // FieldChange strategy makes no sense when setting an entire row
+ if (d->strategy == OnFieldChange)
+ d->strategy = OnRowChange;
+ for (int i = 0; i < record.count(); ++i) {
+ int idx = d->nameToIndex(record.fieldName(i));
+ if (idx == -1)
+ continue;
+ QModelIndex cIndex = createIndex(row, idx);
+ QVariant value = record.value(i);
+ QVariant oldValue = data(cIndex);
+ if (oldValue.isNull() || oldValue != value)
+ isOk &= setData(cIndex, value, Qt::EditRole);
+ }
+ if (isOk && oldStrategy == OnFieldChange)
+ submitAll();
+ d->strategy = oldStrategy;
+
+ return isOk;
+ }
case OnManualSubmit: {
QSqlTableModelPrivate::ModifiedRow &mrow = d->cache[row];
if (mrow.op == QSqlTableModelPrivate::None)
diff --git a/src/sql/models/qsqltablemodel_p.h b/src/sql/models/qsqltablemodel_p.h
index b69f53473c..56fd839a0c 100644
--- a/src/sql/models/qsqltablemodel_p.h
+++ b/src/sql/models/qsqltablemodel_p.h
@@ -76,7 +76,6 @@ public:
bool exec(const QString &stmt, bool prepStatement,
const QSqlRecord &rec, const QSqlRecord &whereValues);
virtual void revertCachedRow(int row);
- bool setRecord(int row, const QSqlRecord &record);
virtual int nameToIndex(const QString &name) const;
void initRecordAndPrimaryIndex();