@@ -585,6 +585,15 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
585
585
}
586
586
}
587
587
588
+ // read cql_filter
589
+ bool cqlFilterOk = false ;
590
+ QString cqlFilter;
591
+ QMap<QString, QString>::const_iterator cqlFilterIt = mParameterMap .find ( " CQL_FILTER" );
592
+ if ( cqlFilterIt != mParameterMap .end () )
593
+ {
594
+ cqlFilterOk = true ;
595
+ cqlFilter = cqlFilterIt.value ();
596
+ }
588
597
589
598
bool conversionSuccess;
590
599
double minx, miny, maxx, maxy;
@@ -667,49 +676,57 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
667
676
provider->featureAtId ( fid.toInt (), feature, mWithGeom , attrIndexes );
668
677
sendGetFeature ( request, format, &feature, 0 , layerCrs, fields, layerExcludedAttributes );
669
678
}
670
- else if ( filterOk )
679
+ else if ( cqlFilterOk )
671
680
{
672
681
provider->select ( attrIndexes, searchRect, mWithGeom , true );
673
- try
682
+ QgsExpression *mFilter = new QgsExpression ( cqlFilter );
683
+ if (mFilter ->hasParserError ())
684
+ {
685
+ throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->parserErrorString () );
686
+ }
687
+ if ( mFilter )
674
688
{
675
- QDomElement filterElem = filter.firstChildElement ();
676
- QgsExpression *mFilter = QgsExpression::createFromOgcFilter ( filterElem );
677
- if (mFilter ->hasParserError ())
678
- {
679
- throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->parserErrorString () );
680
- }
681
689
while ( provider->nextFeature ( feature ) && featureCounter < maxFeat )
682
690
{
683
- if ( mFilter )
691
+ QVariant res = mFilter ->evaluate ( &feature, fields );
692
+ if (mFilter ->hasEvalError ())
684
693
{
685
- QVariant res = mFilter ->evaluate ( &feature, fields );
686
- if (mFilter ->hasEvalError ())
687
- {
688
- throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->evalErrorString () );
689
- }
690
- if ( res.toInt () != 0 )
691
- {
692
- sendGetFeature ( request, format, &feature, featureCounter, layerCrs, fields, layerExcludedAttributes );
693
- ++featureCounter;
694
- }
694
+ throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->evalErrorString () );
695
695
}
696
- else
696
+ if ( res. toInt () != 0 )
697
697
{
698
698
sendGetFeature ( request, format, &feature, featureCounter, layerCrs, fields, layerExcludedAttributes );
699
699
++featureCounter;
700
700
}
701
701
}
702
702
delete mFilter ;
703
703
}
704
- catch ( QgsMapServiceException& e )
704
+ }
705
+ else if ( filterOk )
706
+ {
707
+ provider->select ( attrIndexes, searchRect, mWithGeom , true );
708
+ QDomElement filterElem = filter.firstChildElement ();
709
+ QgsExpression *mFilter = QgsExpression::createFromOgcFilter ( filterElem );
710
+ if (mFilter ->hasParserError ())
711
+ {
712
+ throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->parserErrorString () );
713
+ }
714
+ if ( mFilter )
705
715
{
706
- Q_UNUSED ( e );
707
-
708
716
while ( provider->nextFeature ( feature ) && featureCounter < maxFeat )
709
717
{
710
- sendGetFeature ( request, format, &feature, featureCounter, layerCrs, fields, layerExcludedAttributes );
711
- ++featureCounter;
718
+ QVariant res = mFilter ->evaluate ( &feature, fields );
719
+ if (mFilter ->hasEvalError ())
720
+ {
721
+ throw QgsMapServiceException ( " RequestNotWellFormed" , mFilter ->evalErrorString () );
722
+ }
723
+ if ( res.toInt () != 0 )
724
+ {
725
+ sendGetFeature ( request, format, &feature, featureCounter, layerCrs, fields, layerExcludedAttributes );
726
+ ++featureCounter;
727
+ }
712
728
}
729
+ delete mFilter ;
713
730
}
714
731
}
715
732
else
0 commit comments