@@ -3670,14 +3670,22 @@ const QList<QgsExpression::Function*>& QgsExpression::Functions()
3670
3670
if ( !node )
3671
3671
return true ;
3672
3672
3673
- if ( !node->args () || node-> args ()-> count () < 4 )
3673
+ if ( !node->args () )
3674
3674
return false ;
3675
- else
3675
+
3676
+ QSet<QString> referencedVars;
3677
+ if ( node->args ()->count () > 2 )
3678
+ {
3679
+ QgsExpression::Node* subExpressionNode = node->args ()->at ( 2 );
3680
+ referencedVars = subExpressionNode->referencedVariables ();
3681
+ }
3682
+
3683
+ if ( node->args ()->count () > 3 )
3676
3684
{
3677
3685
QgsExpression::Node* filterNode = node->args ()->at ( 3 );
3678
- QSet<QString> referencedVars = filterNode->referencedVariables ();
3679
- return referencedVars.contains ( " parent" ) || referencedVars.contains ( QString () );
3686
+ referencedVars = filterNode->referencedVariables ();
3680
3687
}
3688
+ return referencedVars.contains ( " parent" ) || referencedVars.contains ( QString () );
3681
3689
},
3682
3690
[]( const QgsExpression::NodeFunction* node )
3683
3691
{
@@ -3686,18 +3694,29 @@ const QList<QgsExpression::Function*>& QgsExpression::Functions()
3686
3694
if ( !node )
3687
3695
return QSet<QString>() << QgsFeatureRequest::AllAttributes;
3688
3696
3689
- if ( !node->args () || node-> args ()-> count () < 4 )
3697
+ if ( !node->args () )
3690
3698
return QSet<QString>();
3691
- else
3699
+
3700
+ QSet<QString> referencedCols;
3701
+ QSet<QString> referencedVars;
3702
+
3703
+ if ( node->args ()->count () > 2 )
3704
+ {
3705
+ QgsExpression::Node* subExpressionNode = node->args ()->at ( 2 );
3706
+ referencedVars = subExpressionNode->referencedVariables ();
3707
+ referencedCols = subExpressionNode->referencedColumns ();
3708
+ }
3709
+ if ( node->args ()->count () > 3 )
3692
3710
{
3693
3711
QgsExpression::Node* filterNode = node->args ()->at ( 3 );
3694
- QSet<QString> referencedVars = filterNode->referencedVariables ();
3695
-
3696
- if ( referencedVars.contains ( " parent" ) || referencedVars.contains ( QString () ) )
3697
- return QSet<QString>() << QgsFeatureRequest::AllAttributes;
3698
- else
3699
- return QSet<QString>();
3712
+ referencedVars = filterNode->referencedVariables ();
3713
+ referencedCols.unite ( filterNode->referencedColumns () );
3700
3714
}
3715
+
3716
+ if ( referencedVars.contains ( " parent" ) || referencedVars.contains ( QString () ) )
3717
+ return QSet<QString>() << QgsFeatureRequest::AllAttributes;
3718
+ else
3719
+ return referencedCols;
3701
3720
},
3702
3721
true
3703
3722
)
0 commit comments