QSqlTableModel: disallow insert if changes are pending
For OnFieldChange and OnRowChange, inserting rows should not be allowed if there are pending changes in cache. Change-Id: Ia794332959a35a1de87e798ba1a74ace3dfae68f Reviewed-by: Honglei Zhang <honglei.zhang@nokia.com>
This commit is contained in:
parent
f6ca63f896
commit
3d7cec6577
2
dist/changes-5.0.0
vendored
2
dist/changes-5.0.0
vendored
@ -444,7 +444,7 @@ has any changes to submit. QTBUG-3108
|
|||||||
that fail upon resubmitting for edit strategies OnFieldChange and OnRowChange.
|
that fail upon resubmitting for edit strategies OnFieldChange and OnRowChange.
|
||||||
Instead, pending (failed) changes cause new changes inappropriate to the
|
Instead, pending (failed) changes cause new changes inappropriate to the
|
||||||
edit strategy to be refused. The application should resolve or revert pending
|
edit strategy to be refused. The application should resolve or revert pending
|
||||||
changes.
|
changes. insertRows() and insertRecord() also respect the edit strategy.
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Database Drivers *
|
* Database Drivers *
|
||||||
|
@ -1088,17 +1088,18 @@ bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent)
|
|||||||
parent must be invalid, since this model does not support
|
parent must be invalid, since this model does not support
|
||||||
parent-child relations.
|
parent-child relations.
|
||||||
|
|
||||||
Only one row at a time can be inserted when using the
|
For edit strategies OnFieldChange and OnRowChange, only one row
|
||||||
OnFieldChange or OnRowChange update strategies.
|
may be inserted at a time and the model may not contain other
|
||||||
|
cached changes.
|
||||||
|
|
||||||
The primeInsert() signal will be emitted for each new row.
|
The primeInsert() signal will be emitted for each new row.
|
||||||
Connect to it if you want to initialize the new row with default
|
Connect to it if you want to initialize the new row with default
|
||||||
values.
|
values.
|
||||||
|
|
||||||
Returns false if the parameters are out of bounds; otherwise
|
Does not submit rows, regardless of edit strategy.
|
||||||
returns true.
|
|
||||||
|
|
||||||
Does not submit rows, regardless of edit strategy, not even OnFieldChange.
|
Returns false if the parameters are out of bounds or the row cannot be
|
||||||
|
inserted; otherwise returns true.
|
||||||
|
|
||||||
\sa primeInsert(), insertRecord()
|
\sa primeInsert(), insertRecord()
|
||||||
*/
|
*/
|
||||||
@ -1108,8 +1109,9 @@ bool QSqlTableModel::insertRows(int row, int count, const QModelIndex &parent)
|
|||||||
if (row < 0 || count <= 0 || row > rowCount() || parent.isValid())
|
if (row < 0 || count <= 0 || row > rowCount() || parent.isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (d->strategy != OnManualSubmit && count != 1)
|
if (d->strategy != OnManualSubmit)
|
||||||
return false;
|
if (count != 1 || isDirty())
|
||||||
|
return false;
|
||||||
|
|
||||||
d->busyInsertingRows = true;
|
d->busyInsertingRows = true;
|
||||||
beginInsertRows(parent, row, row + count - 1);
|
beginInsertRows(parent, row, row + count - 1);
|
||||||
|
@ -590,11 +590,15 @@ void tst_QSqlTableModel::insertRowFailure()
|
|||||||
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("blah"));
|
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("blah"));
|
||||||
QFAIL_SQL(model, setRecord(1, values));
|
QFAIL_SQL(model, setRecord(1, values));
|
||||||
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("blah"));
|
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("blah"));
|
||||||
|
QFAIL_SQL(model, insertRow(2));
|
||||||
|
QCOMPARE(model.rowCount(), 2);
|
||||||
} else {
|
} else {
|
||||||
QVERIFY_SQL(model, setData(model.index(1, 1), QString("eggs")));
|
QVERIFY_SQL(model, setData(model.index(1, 1), QString("eggs")));
|
||||||
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("eggs"));
|
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("eggs"));
|
||||||
QVERIFY_SQL(model, setRecord(1, values));
|
QVERIFY_SQL(model, setRecord(1, values));
|
||||||
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("spam"));
|
QCOMPARE(model.data(model.index(1, 1)).toString(), QString("spam"));
|
||||||
|
QVERIFY_SQL(model, insertRow(2));
|
||||||
|
QCOMPARE(model.rowCount(), 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore empty table
|
// restore empty table
|
||||||
|
Loading…
x
Reference in New Issue
Block a user