QSqlTableModel::removeRows(): don't emit extra beforeDelete
authorMark Brand <mabrand@mabrand.nl>
Mon, 6 Feb 2012 16:02:32 +0000 (17:02 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 7 Feb 2012 21:05:51 +0000 (22:05 +0100)
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>
dist/changes-5.0.0
src/sql/models/qsqltablemodel.cpp
tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp

index 617b2d3..6bacccc 100644 (file)
@@ -329,6 +329,8 @@ QTestLib
   and log formats simultaneously.
 
 
+* removeRows() no longer emits extra beforeDelete signal for out of range row.
+
 ****************************************************************************
 *                          Database Drivers                                *
 ****************************************************************************
index 46d493b..4094052 100644 (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;
 
index c8b5513..6a827e6 100644 (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();