QSqlTableModel::removeRows(): don't emit extra beforeDelete

Qt 5 seems like a welcome opportunity to stop emitting this
spurious beforeDelete signal.

Change-Id: Ib8628343ca9b8fdd85c154a206c7e2bf2c4c9dc1
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
This commit is contained in:
Mark Brand 2012-02-06 17:02:32 +01:00 committed by Qt by Nokia
parent 63f634322b
commit f5e1da12f0
3 changed files with 5 additions and 12 deletions

2
dist/changes-5.0.0 vendored
View File

@ -329,6 +329,8 @@ QTestLib
and log formats simultaneously.
* removeRows() no longer emits extra beforeDelete signal for out of range row.
****************************************************************************
* Database Drivers *
****************************************************************************

View File

@ -990,8 +990,6 @@ bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent)
if (parent.isValid() || row < 0 || count <= 0)
return false;
int initialRowCount = rowCount();
int i;
for (i = 0; i < count && row + i < rowCount(); ++i) {
int idx = row + i;
@ -1012,12 +1010,6 @@ bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent)
if (d->strategy != OnManualSubmit && i > 0)
submit();
// historical bug: emit beforeDelete for 1st row beyond end
if (d->strategy != OnManualSubmit) {
if (row + count > initialRowCount)
emit beforeDelete(qMax(initialRowCount, row));
}
if (i < count)
return false;

View File

@ -703,10 +703,9 @@ void tst_QSqlTableModel::removeRows()
QVERIFY(!model.removeRows(1, 0, model.index(2, 0))); // can't pass a valid modelindex
QVERIFY_SQL(model, removeRows(0, 2));
QCOMPARE(beforeDeleteSpy.count(), 3);
QVERIFY(beforeDeleteSpy.at(0).at(0).toInt() == 5);
QVERIFY(beforeDeleteSpy.at(1).at(0).toInt() == 0);
QVERIFY(beforeDeleteSpy.at(2).at(0).toInt() == 1);
QCOMPARE(beforeDeleteSpy.count(), 2);
QVERIFY(beforeDeleteSpy.at(0).at(0).toInt() == 0);
QVERIFY(beforeDeleteSpy.at(1).at(0).toInt() == 1);
QCOMPARE(model.rowCount(), 1);
QCOMPARE(model.data(model.index(0, 1)).toString(), QString("vohi"));
model.clear();