Jim, Thank you for the tip. I can confirm that using the "REFERENCE" option in the WPS builder with a URL for the GetFeature changes the behavior to what I would expect.
Here's the body with this option: <?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"> <ows:Identifier>gs:Query</ows:Identifier> <wps:DataInputs> <wps:Input> <ows:Identifier>features</ows:Identifier> <wps:Reference mimeType="application/wfs-collection-1.1" xlink:href="http://localhost:8888/geoserver/ows?service=wfs&version=1.1.0&request=GetFeature&TYPENAME=country_boundaries&cql_filter=iso_a2=%27US%27&maxFeatures=100" method="GET"/> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:RawDataOutput mimeType="application/json"> <ows:Identifier>result</ows:Identifier> </wps:RawDataOutput> </wps:ResponseForm> </wps:Execute> [image: image.png] The SQL query then has the WHERE clause like I'd expect: WHERE ("iso_a2" = 'US' AND "iso_a2" IS NOT NULL ) LIMIT 100 Looking back at the XML bodies, they are very similar. Both use Reference elements for the features input, just one is using a GET and the other a POST. So this still seems like odd behavior to me. Jason Newmoyer Newmoyer Geospatial Solutions 843.606.0424 ja...@newmoyergeospatial.com On Tue, Apr 27, 2021 at 6:41 PM Jim Hughes <jhug...@ccri.com> wrote: > Hi Jason, > > I don't think this is a technically a bug. The Process you are using > comes from GeoTools; its input assumes that it gets a > SimpleFeatureCollection, some attributes, and a filter. When GeoServer is > running a WPS, in your request, the block after > "<ows:Identifier>features</ows:Identifier>" is calling for all the features > out of PostGIS. The results are then filtered in memory as you have > seen/guessed(1). > > I think it is possible to specify a filter when defining the > "wps:Reference"; I just never remember how to do so and I struggle to find > where it is. > > Cheers, > > Jim > > 1. > https://github.com/geotools/geotools/blob/main/modules/unsupported/process-feature/src/main/java/org/geotools/process/vector/QueryProcess.java#L53-L55 > > p.s. Sorry for the duplicate posts. > > > On 4/27/21 4:25 PM, Jason Newmoyer wrote: > > I am seeing some behavior that seems off from what I understand should be > happening with the WPS. > > Using a PostGIS data store, If I make a WFS GetFeature query, and watch > the Postgres logs with log_statement "all" I can see the WHERE clause > properly constructed in the query to the database: > > Example: > http://localhost:8888/geoserver/ows?service=wfs&version=1.1.0&request=GetFeature&TYPENAME=country_boundaries&cql_filter=iso_a2='US'&maxfeatures=10 > > produces a SQL query like this: SELECT "gid",encode(ST_AsEWKB("geom"), > 'base64') as "geom","... FROM "ne_50m_admin_0_countries_lakes" *WHERE > ("iso_a2" = 'US' AND "iso_a2" IS NOT NULL )* LIMIT 1000000 > > However, If I use the WPS gs:Query process in the same manner with CQL: > > <?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0" > service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns="http://www.opengis.net/wps/1.0.0" > xmlns:wfs="http://www.opengis.net/wfs" > xmlns:wps="http://www.opengis.net/wps/1.0.0" > xmlns:ows="http://www.opengis.net/ows/1.1" > xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" > xmlns:wcs="http://www.opengis.net/wcs/1.1.1" > xmlns:xlink="http://www.w3.org/1999/xlink" > xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 > http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"> > <ows:Identifier>gs:Query</ows:Identifier> > <wps:DataInputs> > <wps:Input> > <ows:Identifier>features</ows:Identifier> > <wps:Reference mimeType="text/xml" xlink:href="http://geoserver/wfs" > method="POST"> > <wps:Body> > <wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2" > xmlns:ngs="http://newmoyergeospatial.com"> > <wfs:Query typeName="ngs:country_boundaries"/> > </wfs:GetFeature> > </wps:Body> > </wps:Reference> > </wps:Input> > <wps:Input> > <ows:Identifier>filter</ows:Identifier> > <wps:Data> > <wps:ComplexData mimeType="text/plain; > subtype=cql"><![CDATA[iso_a2='US']]></wps:ComplexData> > </wps:Data> > </wps:Input> > </wps:DataInputs> > <wps:ResponseForm> > <wps:RawDataOutput mimeType="application/json"> > <ows:Identifier>result</ows:Identifier> > </wps:RawDataOutput> > </wps:ResponseForm> > </wps:Execute> > > I see a SQL query like this: SELECT "gid",encode(ST_AsEWKB("geom"), > 'base64') as "geom", ... FROM "ne_50m_admin_0_countries_lakes" LIMIT 1000000 > > Its missing the *where clause* so presumably post filtering is happening > in memory, which is not ideal. And in some cases a deal breaker. > > Bug? Any workarounds to try? > > So far have tried using vec:Query, and tried using XML filters vs CQL. > Same results. > > Thanks. > > Jason Newmoyer > Newmoyer Geospatial Solutions > 843.606.0424 > ja...@newmoyergeospatial.com > > > > > _______________________________________________ > Geoserver-users mailing list > > Please make sure you read the following two resources before posting to this > list: > - Earning your support instead of buying it, but Ian Turton: > http://www.ianturton.com/talks/foss4g.html#/ > - The GeoServer user list posting guidelines: > http://geoserver.org/comm/userlist-guidelines.html > > If you want to request a feature or an improvement, also see this: > https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer > > Geoserver-users@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/geoserver-users > > > _______________________________________________ > Geoserver-users mailing list > > Please make sure you read the following two resources before posting to > this list: > - Earning your support instead of buying it, but Ian Turton: > http://www.ianturton.com/talks/foss4g.html#/ > - The GeoServer user list posting guidelines: > http://geoserver.org/comm/userlist-guidelines.html > > If you want to request a feature or an improvement, also see this: > https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer > > > Geoserver-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/geoserver-users >
_______________________________________________ Geoserver-users mailing list Please make sure you read the following two resources before posting to this list: - Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/ - The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer Geoserver-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-users