<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hi,</p>
    <p>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.</p>
    <p>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.</p>
    <p>Some questions that come to my mind:</p>
    <p> * Are these filters always combined with AND or also OR?</p>
    <p> * Can these filters eventually be nested?<br>
    </p>
    <p> * How should we deal with compiling expressions, should that be
      implemented again?</p>
    <p>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.</p>
    <p>Regards</p>
    <p>Matthias<br>
    </p>
    <div class="moz-cite-prefix">On 4/29/19 9:02 PM, Alexis R.L. wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAOM0XWC3hxoft-ToZY9fzmW1DKJANmLiR3GqoZhC6A8MxQdvFQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Greetings Mr. Dawson,
        <div><br>
        </div>
        <div>Thanks for the reply,</div>
        <div><br>
        </div>
        <div>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?</div>
        <div><br>
        </div>
        <div>Should I make a new iterator entirely or should I modify
          existing methods and add a trigger like I tested in my PR?</div>
        <div><br>
        </div>
        <div>Thanks!<br clear="all">
          <div>
            <div dir="ltr" class="gmail_signature"
              data-smartmail="gmail_signature">
              <div dir="ltr">Alexis Roy-Lizotte</div>
            </div>
          </div>
          <br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">Le dim. 28 avr. 2019 à 19:46,
          Nyall Dawson <<a href="mailto:nyall.dawson@gmail.com"
            moz-do-not-send="true">nyall.dawson@gmail.com</a>> a
          écrit :<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On
          Sun, 28 Apr 2019 at 07:18, Alexis R.L. <<a
            href="mailto:alroyliz0@gmail.com" target="_blank"
            moz-do-not-send="true">alroyliz0@gmail.com</a>> wrote:<br>
          ><br>
          > Greetings Everyone,<br>
          ><br>
          > 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.<br>
          ><br>
          > 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).<br>
          ><br>
          > 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.<br>
          <br>
          I also think this would be desirable. The tricky part (well,
          one<br>
          tricky part -- feature iterators are low level stuff, lots of<br>
          complexity there!) is avoiding any API breakage while adding
          new<br>
          methods to handle your use case.<br>
          <br>
          The other (SUPER) tricky bit is that any change to feature
          requests<br>
          usually requires accompanying changes to every vector data
          provider in<br>
          order to keep consistent behaviour across all these providers.
          The<br>
          same request should always give the same result, regardless of
          the<br>
          actual underlying data provider. The consequence of this is
          that<br>
          you'll need to be update the postgres, mssql, oracle, OGR,
          memory,<br>
          spatialite, wfs, arcgis feature server, db2, and vector layer
          feature<br>
          iterator code. You'll also need to add many new unit tests to
          cover<br>
          all the changes to the different providers.<br>
          <br>
          Definitely not a trivial change! Don't let this put you off
          making it,<br>
          but just be aware that this change would take even a QGIS core<br>
          developer a week or more of work to implement.<br>
          <br>
          Nyall<br>
          <br>
          <br>
          <br>
          ><br>
          > 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.<br>
          ><br>
          > Using multiple filtering method might be better than only
          forcing one and would provide more flexibility.<br>
          ><br>
          > As I have a PR that is related to this (<a
            href="https://github.com/qgis/QGIS/pull/9816"
            rel="noreferrer" target="_blank" moz-do-not-send="true">https://github.com/qgis/QGIS/pull/9816</a>
          ) 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.<br>
          ><br>
          > Thanks and have a nice day!<br>
          ><br>
          > Alex<br>
          > _______________________________________________<br>
          > QGIS-Developer mailing list<br>
          > <a href="mailto:QGIS-Developer@lists.osgeo.org"
            target="_blank" moz-do-not-send="true">QGIS-Developer@lists.osgeo.org</a><br>
          > List info: <a
            href="https://lists.osgeo.org/mailman/listinfo/qgis-developer"
            rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
          > Unsubscribe: <a
            href="https://lists.osgeo.org/mailman/listinfo/qgis-developer"
            rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
QGIS-Developer mailing list
<a class="moz-txt-link-abbreviated" href="mailto:QGIS-Developer@lists.osgeo.org">QGIS-Developer@lists.osgeo.org</a>
List info: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
Unsubscribe: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a></pre>
    </blockquote>
    <div class="moz-signature">-- <br>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div class="moz-signature">
        <title></title>
        <div class="moz-signature"> <span style="text-align: left;
            color: #000000; font-family: 'Verdana', sans-serif;
            font-size: 10pt">Matthias Kuhn</span><br>
          <a href="mailto:matthias@opengis.ch" target="_blank"> <span
              style="text-align: left; color: #000000; font-family:
              'Verdana', sans-serif; font-size: 8pt">matthias@opengis.ch</span>
          </a><br>
          <span style="text-align: left; color: #000000; font-family:
            'Verdana', sans-serif; font-size: 8pt"><a
              href="tel:+41764356763">+41 (0)76 435 67 63</a></span><br>
          <div> <a href="http://www.opengis.ch"> <img
                moz-do-not-send="false"
                src="cid:part9.B41C3828.682F217C@opengis.ch"
                alt="OPENGIS.ch Logo" width="200" height="80"></a> </div>
        </div>
      </div>
    </div>
  </body>
</html>