Skip to content

Commit 1b256a0

Browse files
committedJun 18, 2021
Add early exits for some expensive expression functions
1 parent 8869c9c commit 1b256a0

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed
 

‎src/core/expression/qgsexpressionfunction.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4979,7 +4979,7 @@ static QVariant fcnTransformGeometry( const QVariantList &values, const QgsExpre
49794979
}
49804980

49814981

4982-
static QVariant fcnGetFeatureById( const QVariantList &values, const QgsExpressionContext *, QgsExpression *parent, const QgsExpressionNodeFunction * )
4982+
static QVariant fcnGetFeatureById( const QVariantList &values, const QgsExpressionContext *context, QgsExpression *parent, const QgsExpressionNodeFunction * )
49834983
{
49844984
QVariant result;
49854985
QgsVectorLayer *vl = QgsExpressionUtils::getVectorLayer( values.at( 0 ), parent );
@@ -4991,6 +4991,8 @@ static QVariant fcnGetFeatureById( const QVariantList &values, const QgsExpressi
49914991
req.setFilterFid( fid );
49924992
req.setTimeout( 10000 );
49934993
req.setRequestMayBeNested( true );
4994+
if ( context )
4995+
req.setFeedback( context->feedback() );
49944996
QgsFeatureIterator fIt = vl->getFeatures( req );
49954997

49964998
QgsFeature fet;
@@ -5034,6 +5036,8 @@ static QVariant fcnGetFeature( const QVariantList &values, const QgsExpressionCo
50345036
req.setLimit( 1 );
50355037
req.setTimeout( 10000 );
50365038
req.setRequestMayBeNested( true );
5039+
if ( context )
5040+
req.setFeedback( context->feedback() );
50375041
if ( !parent->needsGeometry() )
50385042
{
50395043
req.setFlags( QgsFeatureRequest::NoGeometry );
@@ -6069,6 +6073,8 @@ static QVariant executeGeomOverlay( const QVariantList &values, const QgsExpress
60696073
QgsFeatureRequest request;
60706074
request.setTimeout( 10000 );
60716075
request.setRequestMayBeNested( true );
6076+
if ( context )
6077+
request.setFeedback( context->feedback() );
60726078

60736079
// First parameter is the overlay layer
60746080
QgsExpressionNode *node = QgsExpressionUtils::getNode( values.at( 0 ), parent );
@@ -6282,6 +6288,8 @@ static QVariant executeGeomOverlay( const QVariantList &values, const QgsExpress
62826288
QgsFeature feat2;
62836289
QgsFeatureRequest request2;
62846290
request2.setLimit( limit );
6291+
if ( context )
6292+
request2.setFeedback( context->feedback() );
62856293
QgsFeatureIterator fi = targetLayer->getFeatures( request2 );
62866294
while ( fi.nextFeature( feat2 ) )
62876295
{

0 commit comments

Comments
 (0)
Please sign in to comment.