QSqlTableModel::selectRow(): reduce scope of QSqlQuery
authorMark Brand <mabrand@mabrand.nl>
Mon, 17 Sep 2012 12:23:17 +0000 (14:23 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 24 Sep 2012 19:27:51 +0000 (21:27 +0200)
It's good to clean up the query before emitting signals about the
updated row. It's possible that connected slots will call selectRow()
again for other rows.

Change-Id: I482fe2dd58218f53567ce8725ee591ce2eeda348
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
src/sql/models/qsqltablemodel.cpp

index fbd9207..f442039 100644 (file)
@@ -431,13 +431,15 @@ bool QSqlTableModel::selectRow(int row)
     d->sortColumn = table_sort_col;
     d->filter = table_filter;
 
-    QSqlQuery q(d->db);
-    q.setForwardOnly(true);
-    if (!q.exec(stmt))
-        return false;
+    {
+        QSqlQuery q(d->db);
+        q.setForwardOnly(true);
+        if (!q.exec(stmt))
+            return false;
 
-    bool exists = q.next();
-    d->cache[row].refresh(exists, q.record());
+        bool exists = q.next();
+        d->cache[row].refresh(exists, q.record());
+    }
 
     emit headerDataChanged(Qt::Vertical, row, row);
     emit dataChanged(createIndex(row, 0), createIndex(row, columnCount() - 1));