Go to file
Mark Brand f6ca63f896 QSqlTableModel::setData()/setRecord(): fix incorrect row
For OnFieldChange and OnRowChange, before submitting new changes,
setData() and setRecord() attempt to submit pending changes and
revert them upon failure. However, they fail to consider that
reverting pending insertions removes rows from the model. As a
result, the new change can be applied to a row higher than intended.

One possible solution would be to adjust the targetted index for the
removed rows, so that the intended row is affected by the new change.
But this still causes the strange editing experience as rows jump
up just as they are being edited.

It does not seem right in the first place for the model to initiate
reverting changes. It should be up to the application to decide what
to do when data cannot be committed. In particular, setData() and
setRecord() should not have the side effect of reverting already
pending changes.

The chosen solution is simply to refuse new changes that don't make
sense for the edit strategy. For OnFieldChange, flag() will
indicate read-only when editing is blocked by a pending change.

Since setData() and setRecord() submit data immediately for
OnFieldChange, it no longer makes sense to resubmit changes
automatically before a new change.

For OnRowChange, setData() keeps the behavior of automatically
submitting a pending row before starting on a new row. This is
historical behavior and is probably motivated by the fact that
QTableView does not automatically call submit() when editing leaves a
row. The obvious shortcoming of this is that the last row to be edited
will not be submitted automatically. It also prevents us from flagging
rows other than the pending row as read-only.

For OnRowChange, setRecord(), being row-oriented by nature, should
submit the change immediately rather than waiting for the next call
to setRecord(). This makes setRecord() consistent with insertRecord().

Change-Id: Icb4019d8b7c53a7ee48f8121a7a525e8bc35d523
Reviewed-by: Honglei Zhang <honglei.zhang@nokia.com>
2012-03-15 15:35:17 +01:00
bin Fix qtmodule-configtests to honor error codes 2012-03-08 23:52:34 +01:00
config.tests Remove -arch argument and #define QT_ARCH from configures 2012-03-13 12:27:44 +01:00
dist QSqlTableModel::setData()/setRecord(): fix incorrect row 2012-03-15 15:35:17 +01:00
doc/src Update QtSql module name according to the new naming convention 2012-03-15 09:50:18 +01:00
examples Remove all QWS centric examples 2012-03-15 15:18:16 +01:00
lib Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
mkspecs Remove unmaintained and broken VNC platform plugin 2012-03-15 02:45:31 +01:00
qmake Allow qmake to find features when using mkspecs in nested dirs 2012-03-12 11:09:24 +01:00
src QSqlTableModel::setData()/setRecord(): fix incorrect row 2012-03-15 15:35:17 +01:00
tests QSqlTableModel::setData()/setRecord(): fix incorrect row 2012-03-15 15:35:17 +01:00
tools Add Qt Widgets opt out support to build system 2012-03-15 11:40:50 +01:00
util clean up qmake-generated projects 2012-02-24 05:18:30 +01:00
.gitattributes Added .tag file with Git revision. 2011-05-03 16:23:49 +02:00
.gitignore Add bin/qdoc to .gitignore 2012-03-14 09:45:07 +01:00
.tag Added .tag file with Git revision. 2011-05-03 16:23:49 +02:00
configure Add Qt Widgets opt out support to build system 2012-03-15 11:40:50 +01:00
configure.bat Remove Q_BYTE_ORDER and -*-endian arguments from configures 2012-03-02 14:48:00 +01:00
header.BSD Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
header.FDL Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
header.LGPL Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
header.LGPL-ONLY Remove "All rights reserved" line from license headers. 2012-01-30 03:54:59 +01:00
INSTALL Remove Symbian specific code from qtbase. 2012-01-31 07:08:31 +01:00
LGPL_EXCEPTION.txt Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.FDL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.LGPL Update contact information in license headers. 2012-01-23 04:04:33 +01:00
LICENSE.PREVIEW.COMMERCIAL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
qtbase.pro remove obviously counterproductive uses of QT_SOURCE_TREE & QT_BUILD_TREE 2012-03-08 18:57:13 +01:00
sync.profile Add qprocessordetection.h 2012-02-08 12:33:11 +01:00