Skip to content

Commit f0d31b0

Browse files
committedNov 5, 2015
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
1 parent 8c86aab commit f0d31b0

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)
Please sign in to comment.