diff options
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 5 | ||||
-rw-r--r-- | tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp | 25 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index d2b9427..a313014 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -80,6 +80,8 @@ bool QSqlTableModelPrivate::setRecord(int row, const QSqlRecord &record) if (strategy == QSqlTableModel::OnFieldChange) strategy = QSqlTableModel::OnRowChange; for (int i = 0; i < record.count(); ++i) { + if (!record.isGenerated(i)) + continue; int idx = nameToIndex(record.fieldName(i)); if (idx == -1) continue; @@ -1353,7 +1355,8 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record) if (idx == -1) { isOk = false; } else { - QSqlTableModelPrivate::setGeneratedValue(mrow.rec, idx, record.value(i)); + mrow.rec.setValue(idx, record.value(i)); + mrow.rec.setGenerated(idx, record.isGenerated(i)); } } diff --git a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp index ced3a29..d0795bc 100644 --- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp @@ -52,6 +52,7 @@ const QString test(qTableName("test", __FILE__)), //TESTED_FILES= Q_DECLARE_METATYPE(QModelIndex) +Q_DECLARE_METATYPE(QSqlRecord) class tst_QSqlTableModel : public QObject { @@ -522,6 +523,7 @@ void tst_QSqlTableModel::insertRow() void tst_QSqlTableModel::insertRecord() { + qRegisterMetaType<QSqlRecord>("QSqlRecord&"); QFETCH(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); @@ -534,6 +536,7 @@ void tst_QSqlTableModel::insertRecord() QSqlRecord rec = model.record(); rec.setValue(0, 42); + rec.setGenerated(0, false); rec.setValue(1, QString("vohi")); rec.setValue(2, 1); QVERIFY(model.insertRecord(1, rec)); @@ -543,7 +546,29 @@ void tst_QSqlTableModel::insertRecord() QCOMPARE(model.data(model.index(1, 1)).toString(), QString("vohi")); QCOMPARE(model.data(model.index(1, 2)).toInt(), 1); + QSignalSpy spy(&model, SIGNAL(beforeInsert(QSqlRecord&))); + + // Don't care if the database accepts the change. + // Just check the generated flags. + model.submitAll(); + + QCOMPARE(spy.count(), 1); + QSqlRecord r = spy.at(0).at(0).value<QSqlRecord>(); + QCOMPARE(r.count(), rec.count()); + QCOMPARE(r.isGenerated(0), false); + QCOMPARE(r.value(0).toInt(), 42); + QCOMPARE(r.isGenerated(1), true); + QCOMPARE(r.value(1).toString(), QString("vohi")); + model.revertAll(); + // Clean up + if (model.rowCount() == 4) { + QVERIFY_SQL(model, removeRow(1)); + QVERIFY_SQL(model, submitAll()); + } + QCOMPARE(model.rowCount(), 3); + + rec.setGenerated(0, true); model.setEditStrategy(QSqlTableModel::OnRowChange); QVERIFY(model.insertRecord(-1, rec)); |