Skip to content

Commit 627230c

Browse files
troopa81nyalldawson
authored andcommitted
fixes #18421 : Keep options AUTO_REPACK=OFF when reloading data in ogr provider
1 parent c8d3f74 commit 627230c

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/providers/ogr/qgsogrprovider.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -4261,7 +4261,7 @@ void QgsOgrProvider::open( OpenMode mode )
42614261
if ( !openReadOnly )
42624262
{
42634263
QStringList options;
4264-
if ( mode == OpenModeForceUpdateRepackOff )
4264+
if ( mode == OpenModeForceUpdateRepackOff || ( mDeferRepack && OpenModeSameAsCurrent ) )
42654265
{
42664266
options << "AUTO_REPACK=OFF";
42674267
}
@@ -6595,4 +6595,3 @@ QGISEXTERN QgsTransaction *createTransaction( const QString &connString )
65956595

65966596
return new QgsOgrTransaction( connString, ds );
65976597
}
6598-

tests/src/python/test_provider_shapefile.py

+28
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)