Skip to content

Commit 05157f8

Browse files
committed
Repack() shapefiles on unload whenever they have been modified
Previous preconditions that would only repack them when features have been deleted seems to not have covered everything. Fix #11007
1 parent 4e8c679 commit 05157f8

File tree

2 files changed

+8
-10
lines changed

2 files changed

+8
-10
lines changed

src/providers/ogr/qgsogrprovider.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ void QgsOgrProvider::repack()
132132
QByteArray layerName = OGR_FD_GetName( OGR_L_GetLayerDefn( ogrOrigLayer ) );
133133

134134
// run REPACK on shape files
135-
if ( mDeletedFeatures )
135+
if ( mDataModified )
136136
{
137137
QByteArray sql = QByteArray( "REPACK " ) + layerName; // don't quote the layer name as it works with spaces in the name and won't work if the name is quoted
138138
QgsDebugMsg( QString( "SQL: %1" ).arg( FROM8( sql ) ) );
@@ -176,7 +176,7 @@ void QgsOgrProvider::repack()
176176
}
177177
}
178178

179-
mDeletedFeatures = false;
179+
mDataModified = false;
180180
}
181181
}
182182

@@ -267,7 +267,7 @@ QgsOgrProvider::QgsOgrProvider( QString const & uri )
267267
, ogrDriver( 0 )
268268
, valid( false )
269269
, featuresCounted( -1 )
270-
, mDeletedFeatures( false )
270+
, mDataModified( false )
271271
{
272272
QgsCPLErrorHandler handler;
273273

@@ -1378,11 +1378,7 @@ bool QgsOgrProvider::deleteFeatures( const QgsFeatureIds & id )
13781378
bool returnvalue = true;
13791379
for ( QgsFeatureIds::const_iterator it = id.begin(); it != id.end(); ++it )
13801380
{
1381-
if ( deleteFeature( *it ) )
1382-
{
1383-
mDeletedFeatures = true;
1384-
}
1385-
else
1381+
if ( !deleteFeature( *it ) )
13861382
{
13871383
returnvalue = false;
13881384
}
@@ -2464,6 +2460,8 @@ bool QgsOgrProvider::syncToDisc()
24642460
}
24652461
}
24662462

2463+
mDataModified = true;
2464+
24672465
return true;
24682466
}
24692467

src/providers/ogr/qgsogrprovider.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@ class QgsOgrProvider : public QgsVectorDataProvider
329329
int geomType;
330330
long featuresCounted;
331331

332-
//! There are deleted feature - REPACK before creating a spatialindex
333-
bool mDeletedFeatures;
332+
//! Data has been modified - REPACK before creating a spatialindex
333+
bool mDataModified;
334334

335335
mutable QStringList mSubLayerList;
336336

0 commit comments

Comments
 (0)