Skip to content

Commit b30f51a

Browse files
troopa81nyalldawson
authored andcommittedFeb 20, 2019
fixes #18421 : Keep options AUTO_REPACK=OFF when reloading data in ogr provider
1 parent 82e189e commit b30f51a

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed
 

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4121,7 +4121,7 @@ void QgsOgrProvider::open( OpenMode mode )
41214121
if ( !openReadOnly )
41224122
{
41234123
QStringList options;
4124-
if ( mode == OpenModeForceUpdateRepackOff )
4124+
if ( mode == OpenModeForceUpdateRepackOff || ( mDeferRepack && OpenModeSameAsCurrent ) )
41254125
{
41264126
options << "AUTO_REPACK=OFF";
41274127
}
@@ -6455,5 +6455,3 @@ QGISEXTERN QgsTransaction *createTransaction( const QString &connString )
64556455

64566456
return new QgsOgrTransaction( connString, ds );
64576457
}
6458-
6459-

‎tests/src/python/test_provider_shapefile.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,34 @@ def testDeleteShapes(self):
484484

485485
vl = None
486486

487+
def testDontRepackOnReload(self):
488+
''' Test fix for #18421 '''
489+
490+
tmpdir = tempfile.mkdtemp()
491+
self.dirs_to_cleanup.append(tmpdir)
492+
srcpath = os.path.join(TEST_DATA_DIR, 'provider')
493+
for file in glob.glob(os.path.join(srcpath, 'shapefile.*')):
494+
shutil.copy(os.path.join(srcpath, file), tmpdir)
495+
datasource = os.path.join(tmpdir, 'shapefile.shp')
496+
497+
vl = QgsVectorLayer('{}|layerid=0'.format(datasource), 'test', 'ogr')
498+
feature_count = vl.featureCount()
499+
# Start an iterator that will open a new connection
500+
iterator = vl.getFeatures()
501+
next(iterator)
502+
503+
# Delete another feature while in update mode
504+
vl.dataProvider().enterUpdateMode()
505+
vl.dataProvider().reloadData()
506+
vl.dataProvider().deleteFeatures([0])
507+
508+
# Test that repacking has not been done (since in update mode)
509+
ds = osgeo.ogr.Open(datasource)
510+
self.assertTrue(ds.GetLayer(0).GetFeatureCount() == feature_count)
511+
ds = None
512+
513+
vl = None
514+
487515
def testRepackUnderFileLocks(self):
488516
''' Test fix for #15570 and #15393 '''
489517

0 commit comments

Comments
 (0)
Please sign in to comment.