Skip to content

Commit 57381f4

Browse files
committed
Use a FilterFids request for vector file writer rather than fetching
all features and then testing the feature id when saving selected features For providers such as Postgres this is orders of magnitude faster. Eg, saving 6 selected features from a 800k PostGIS table now takes < 1 second as opposed to ~33 seconds Fix #8334 (cherry-picked from f0d31b0)
1 parent 14408d3 commit 57381f4

File tree

1 file changed

+2
-5
lines changed

1 file changed

+2
-5
lines changed

src/core/qgsvectorfilewriter.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1982,10 +1982,10 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
19821982
req.setFlags( QgsFeatureRequest::NoGeometry );
19831983
}
19841984
req.setSubsetOfAttributes( allAttr );
1985+
if ( onlySelected )
1986+
req.setFilterFids( layer->selectedFeaturesIds() );
19851987
QgsFeatureIterator fit = layer->getFeatures( req );
19861988

1987-
const QgsFeatureIds& ids = layer->selectedFeaturesIds();
1988-
19891989
//create symbol table if needed
19901990
if ( writer->symbologyExport() != NoSymbology )
19911991
{
@@ -2027,9 +2027,6 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
20272027
// write all features
20282028
while ( fit.nextFeature( fet ) )
20292029
{
2030-
if ( onlySelected && !ids.contains( fet.id() ) )
2031-
continue;
2032-
20332030
if ( shallTransform )
20342031
{
20352032
try

0 commit comments

Comments
 (0)