On 19.09.2017 19:15, Even Rouault wrote:
On mardi 19 septembre 2017 18:30:50 CEST Sandro Mani wrote:
> On 11.07.2017 14:31, Even Rouault wrote:
> > We could potentially imagine to defer the repacking at
> > leaveUpdateMode() time, actually in the close() method which is called
> > when the reference counter of the update mode drops to zero (*),
> > instead of doing it at the end of each operation.
>
> To come back to this, I was looking at moving replack() to close(), but
> noticed that syncToDisc() has the logic "for shapefiles, remove spatial
> index files and create a new index" which calls close. And syncToDisk is
> still called after every change. So should syncToDisk be also moved to
> close(), or at least blocked if an updateMode is active?
>
Yes that would probably make sense to block syncToDisk() while in
updateMode (so when mUpdateModeStackDepth > 0), but probably only if
enterUpdateMode() is called by QgsVectorLayer::startEditing(), and not
when called implicitly by doInitialActionsForEdition(), which might be
the case if someone directly works at the provider level
bool QgsOgrProvider::doInitialActionsForEdition()
{
if ( !mValid )
return false;
if ( !mWriteAccess && mWriteAccessPossible && mDynamicWriteAccess )
{
QgsDebugMsg( "Enter update mode implictly" );
if ( !enterUpdateMode() )
return false;
}
return true;
}
So probably a mImplicitUpdateMode flag should be set above near the
QgsDebugMsg(), and the check to decide whether we can defer
syncToDisk() would be ( !mImplicitUpdateMode && mUpdateModeStackDepth > 0)
Hm but will that flag never be cleared again once set? Since AFAICT a
there is no leaveUpdateMode matching the enterUpdateMode called by
doInitialActionsForEdition.
As I understand, the approach to do changes with stable ids would be to
first enterUpdateMode, then perform the changes, then leaveUpdateMode,
at which point the changes are synced and the dataset repacked. With the
mImplicitUpdateMode flag, if anyone worked directly at provider level
before you come along, deferring syncToDisk would never happen since the
mImplicitUpdateMode was set and remains set.
Sandro
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer