Skip to content

Commit 0446f50

Browse files
committed
Fix slow filter rect requests with server python plugins (refs #13919)
1 parent fab8dc2 commit 0446f50

File tree

2 files changed

+6
-18
lines changed

2 files changed

+6
-18
lines changed

src/server/qgsaccesscontrol.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void QgsAccessControl::filterFeatures( const QgsVectorLayer* layer, QgsFeatureRe
3838
}
3939
if ( !expressions.isEmpty() )
4040
{
41-
featureRequest.setFilterExpression( expressions.join( " AND " ) );
41+
featureRequest.setFilterExpression( QString( "((" ).append( expressions.join( ") AND (" ) ).append( "))" ) );
4242
}
4343
}
4444

@@ -61,7 +61,7 @@ QString QgsAccessControl::extraSubsetString( const QgsVectorLayer* layer ) const
6161
sqls.append( sql );
6262
}
6363
}
64-
return sqls.isEmpty() ? QString::null : sqls.join( " AND " );
64+
return sqls.isEmpty() ? QString() : QString( "((" ).append( sqls.join( ") AND (" ) ).append( "))" );
6565
}
6666

6767
/** Return the layer read right */

src/server/qgswmsserver.cpp

+4-16
Original file line numberDiff line numberDiff line change
@@ -2171,21 +2171,14 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
21712171
bool hasGeometry = addWktGeometry || featureBBox;
21722172
fReq.setFlags((( hasGeometry ) ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) | QgsFeatureRequest::ExactIntersect );
21732173

2174-
#ifdef HAVE_SERVER_PYTHON_PLUGINS
2175-
mAccessControl->filterFeatures( layer, fReq );
21762174
if ( ! searchRect.isEmpty() )
21772175
{
2178-
if ( fReq.filterExpression() )
2179-
{
2180-
fReq.setFilterExpression( QString( "intersects( $geometry , geomFromWKT( '%1' ) ) AND ( %2 )" ).
2181-
arg( searchRect.asWktPolygon(), fReq.filterExpression()->expression() ) );
2182-
}
2183-
else
2184-
{
2185-
fReq.setFilterRect( searchRect );
2186-
}
2176+
fReq.setFilterRect( searchRect );
21872177
}
21882178

2179+
#ifdef HAVE_SERVER_PYTHON_PLUGINS
2180+
mAccessControl->filterFeatures( layer, fReq );
2181+
21892182
QStringList attributes;
21902183
QgsField field;
21912184
Q_FOREACH ( field, layer->pendingFields().toList() )
@@ -2194,11 +2187,6 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
21942187
}
21952188
attributes = mAccessControl->layerAttributes( layer, attributes );
21962189
fReq.setSubsetOfAttributes( attributes, layer->pendingFields() );
2197-
#else
2198-
if ( ! searchRect.isEmpty() )
2199-
{
2200-
fReq.setFilterRect( searchRect );
2201-
}
22022190
#endif
22032191

22042192
QgsFeatureIterator fit = layer->getFeatures( fReq );

0 commit comments

Comments
 (0)