[QGIS-Developer] Proposal: changing the behaviour of QgsFeatureRequest

Matthias Kuhn matthias at opengis.ch
Mon Apr 29 23:31:57 PDT 2019


Hi,

I like the idea of a nicer API to combine several filter conditions.
Currently the only possibility to perform this operation is to write a
filter expression as a string or by combining expression nodes.

I am not convinced however that this should be done directly on
QgsFilterRequest level. It feels a bit like reimplementing the
expression engine on another level again.

Some questions that come to my mind:

 * Are these filters always combined with AND or also OR?

 * Can these filters eventually be nested?

 * How should we deal with compiling expressions, should that be
implemented again?

An alternative approach would be to work on a nicer API for an
expression builder to require 1) less string manipulation when building
an expression and 2) have more introspection capabilities when
manipulating an expression.

Regards

Matthias

On 4/29/19 9:02 PM, Alexis R.L. wrote:
> Greetings Mr. Dawson,
>
> Thanks for the reply,
>
> The tests that I did with the method in my PR was provider agnostic
> but still entailed looping over every feature to do the check. Could
> you provide idea or methods that could enable this behaviour in an API
> friendly way?
>
> Should I make a new iterator entirely or should I modify existing
> methods and add a trigger like I tested in my PR?
>
> Thanks!
> Alexis Roy-Lizotte
>
>
> Le dim. 28 avr. 2019 à 19:46, Nyall Dawson <nyall.dawson at gmail.com
> <mailto:nyall.dawson at gmail.com>> a écrit :
>
>     On Sun, 28 Apr 2019 at 07:18, Alexis R.L. <alroyliz0 at gmail.com
>     <mailto:alroyliz0 at gmail.com>> wrote:
>     >
>     > Greetings Everyone,
>     >
>     > While working on my PR (9648) I noticed that expression filter
>     and a list of feature IDs are both considered the same thing
>     cannot be used as two filtering criteria.
>     >
>     > I am aware that the intent was to only have one element active
>     to filter out features other than the rectangle(? might be wrong
>     on that one).
>     >
>     > What I am wondering if it would be a good thing to have both co
>     exist (mostly for my PR as of now). A simply way to do so would be
>     to use the give feature ids as the list to iterate over and check
>     for the expression if there is one.
>
>     I also think this would be desirable. The tricky part (well, one
>     tricky part -- feature iterators are low level stuff, lots of
>     complexity there!) is avoiding any API breakage while adding new
>     methods to handle your use case.
>
>     The other (SUPER) tricky bit is that any change to feature requests
>     usually requires accompanying changes to every vector data provider in
>     order to keep consistent behaviour across all these providers. The
>     same request should always give the same result, regardless of the
>     actual underlying data provider. The consequence of this is that
>     you'll need to be update the postgres, mssql, oracle, OGR, memory,
>     spatialite, wfs, arcgis feature server, db2, and vector layer feature
>     iterator code. You'll also need to add many new unit tests to cover
>     all the changes to the different providers.
>
>     Definitely not a trivial change! Don't let this put you off making it,
>     but just be aware that this change would take even a QGIS core
>     developer a week or more of work to implement.
>
>     Nyall
>
>
>
>     >
>     > I assume that such a thing might be implemented without touching
>     the current behaviour, otherwise one would have to remove either
>     the expression or the IDs in some case when we want to override
>     the current filtering method.
>     >
>     > Using multiple filtering method might be better than only
>     forcing one and would provide more flexibility.
>     >
>     > As I have a PR that is related to this
>     (https://github.com/qgis/QGIS/pull/9816 ) I would like to address
>     this point in it and would like to have the discussion occur there
>     as to the best way to implement such a thing without any breakage
>     if people are not opposed to having only one filtering method in
>     qgsfeaturerequest.
>     >
>     > Thanks and have a nice day!
>     >
>     > Alex
>     > _______________________________________________
>     > QGIS-Developer mailing list
>     > QGIS-Developer at lists.osgeo.org
>     <mailto:QGIS-Developer at lists.osgeo.org>
>     > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>     > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
-- 
Matthias Kuhn
matthias at opengis.ch <mailto:matthias at opengis.ch>
+41 (0)76 435 67 63 <tel:+41764356763>
OPENGIS.ch Logo <http://www.opengis.ch>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20190430/04922afb/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 6671 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20190430/04922afb/attachment-0001.png>


More information about the QGIS-Developer mailing list