<div dir="ltr"><div><div>Hi,<br><br></div>I'm facing a bug [1] that led me to a potential issue in the editing buffer implementation: when commitChanges is called, different operations (change geometry, change attrs, add features, delete features ...) are grouped and executed in a fixed order.<br><br></div>So, if I wanted for example insert a feature and (after the insert has been successful)<br><div>change the geometry of another feature I cannot do that because all geometry editing operations are grouped and executed before all the insert feature operations are executed [2]<br></div><div><br></div><div>This issue can lead to data loss in several scenarios, one is the bug I'm working on here but there are more: for example when you want to merge features you cannot delete features after you have successfully created the merged one, just because all delete operations are performed before the insert ones.</div><div><br></div><div>I guess that by grouping related commands together we probably wanted to make it easier to optimize the operations in the back-end.<br></div><div><br></div><div>Wrapping the commitChanges into transactions would help with DB-like backends that support it (I think that the implementation is not yet completed), but I'm still convinced that the order of edit commands within an editing buffer should be respected (that does not mean that certain commands cannot be grouped if the programmer choose to do so).</div><div><br></div><div>I'd like to hear your opinion about the possible solutions to this problem.<br></div><div><br><br>[1] <a href="https://issues.qgis.org/issues/16935">https://issues.qgis.org/issues/16935</a></div><div>[2] <a href="https://github.com/qgis/QGIS/blob/master/src/core/qgsvectorlayereditbuffer.cpp#L300">https://github.com/qgis/QGIS/blob/master/src/core/qgsvectorlayereditbuffer.cpp#L300</a></div><div><br clear="all"><div><div><br>-- <br><div class="gmail_signature">Alessandro Pasotti<br>w3:   <a href="http://www.itopen.it" target="_blank">www.itopen.it</a></div>
</div></div></div></div>