Hehe ok will revisit next week! Colm.
On Fri, Sep 2, 2016 at 2:51 PM, Francesco Chicchiriccò <ilgro...@apache.org> wrote: > ----- Il 2-set-16, alle 15:29, Colm O hEigeartaigh <cohei...@apache.org> > ha scritto: > > I updated the patch to also handle "AND". Yes it solves the issue. > > > Now only a unit test in AnySearchTest and a correspondent integration test > in SearchITCase are missing, then... ;-) > > On Fri, Sep 2, 2016 at 1:38 PM, Francesco Chicchiriccò < > ilgro...@apache.org> wrote: > >> ----- Il 2-set-16, alle 14:34, Colm O hEigeartaigh <cohei...@apache.org> >> ha scritto: >> >> Yep. I've attached a proposed patch to SYNCOPE-929. It simply makes sure >> that OR expressions are encapsulated in parentheses. It feels like a bit of >> a hack though :-) >> >> I've taken a look at your patch (guess that AND deserves the same >> treatment...): have you already checked if it actually solves this issue? >> >> On Fri, Sep 2, 2016 at 12:59 PM, Francesco Chicchiriccò < >> ilgro...@apache.org> wrote: >> >>> ----- Il 2-set-16, alle 13:33, Colm O hEigeartaigh <cohei...@apache.org> >>> ha scritto: >>> >>> Hi Francesco, >>> >>> I've dug into this a bit deeper. The logic in SearchCondVisitor is fine >>> I think. The problem is in JPAAnySearchDao when the SearchCond is converted >>> into a String. Using the example I gave, >>> "(city==dublin,state==abc);country==ireland", >>> yields the following String: >>> >>> SELECT DISTINCT any_id FROM user_search_attr WHERE schema_id='city' AND >>> stringvalue=?1 >>> OR any_id IN ( SELECT DISTINCT any_id FROM user_search_attr WHERE >>> schema_id='state' AND stringvalue=?2) >>> AND any_id IN ( SELECT DISTINCT any_id FROM user_search_attr WHERE >>> schema_id='country' AND stringvalue=?3) >>> >>> So we have WHERE X OR Y AND Z, instead of WHERE (X OR Y) AND Z, and so >>> it incorrectly evaluates Y AND Z first. The code in JPAAnySearchDao is >>> quite complex, I'll keep digging to see if I can fix it, unless you have an >>> easy fix? >>> >>> I believe the key point is around >>> >>> https://github.com/apache/syncope/blob/master/core/ >>> persistence-jpa/src/main/java/org/apache/syncope/core/ >>> persistence/jpa/dao/JPAAnySearchDAO.java#L475-L487 >>> >>> Regards. >>> >>> >>> On Thu, Sep 1, 2016 at 5:20 PM, Francesco Chicchiriccò < >>> ilgro...@apache.org> wrote: >>> >>>> Hi, >>>> I have just tried the same sample as above and obtained the same >>>> results. >>>> >>>> The FIQL query is parsed into a SearchCond instance [1] by >>>> SearchCondVisitor [2]: at a first glance, I don't see any reason why >>>> parentheses should be ignored, but maybe it's only because I am quite tired >>>> at the moment :-) >>>> >>>> If you're opening an issue, please set "affects-version" to 2.0.0.M5 >>>> and "fix-for-version" to 2.0.0, thanks. >>>> >>>> Regards. >>>> >>>> [1] https://github.com/apache/syncope/blob/master/core/ >>>> persistence-api/src/main/java/org/apache/syncope/core/ >>>> persistence/api/dao/search/SearchCond.java >>>> [2] https://github.com/apache/syncope/blob/master/core/ >>>> persistence-api/src/main/java/org/apache/syncope/core/ >>>> persistence/api/search/SearchCondVisitor.java >>>> >>>> On 01/09/2016 18:18, Colm O hEigeartaigh wrote: >>>> >>>> Hi Iurii, >>>> >>>> Yep there is an issue here. Could you open a JIRA for it? >>>> >>>> I can reproduce with two users with attributes (city/country/state): >>>> >>>> alice: dublin/ireland/abc >>>> bob: dublin/canada/xyz >>>> >>>> Using a FIQL of "city==dublin;country==ireland" using >>>> AnyQuery.Builder() correctly yields one user ("alice"). However using >>>> "(city==dublin,state==abc);country==ireland" yields both users >>>> incorrectly. It appears that it might be ignoring the country part and just >>>> returning the result of the brackets. >>>> >>>> Colm. >>>> >>>> On Thu, Sep 1, 2016 at 4:21 PM, Iurii Smyrnov <ismyr...@talend.com> >>>> wrote: >>>> >>>>> >>>>> Hi Syncope Devs, >>>>> Could you please check Does Syncope support braces " ( ) " in a >>>>> FIQL request ? >>>>> >>>>> I faced with an issue: it seems Syncope ignores braces in the request, >>>>> for example (get groups items): >>>>> - request is : (name==testA,name==testB);name==testC >>>>> - the same request (http encoded) is: http://192. >>>>> 168.99.100:9080/syncope/rest/groups?fiql= >>>>> <http://192.168.99.100:9080/syncope/rest/groups?fiql=name%3D%3DtestA%2Cname%3D%3DtestB3Bname%3D%3DtestC> >>>>> %28name%3D%3DtestA%2Cname%3D%3DtestB%29%3Bname%3D%3DtestC >>>>> <http://192.168.99.100:9080/syncope/rest/groups?fiql=name%3D%3DtestA%2Cname%3D%3DtestB3Bname%3D%3DtestC> >>>>> >>>>> In this case response should return zero items , but it returns Group >>>>> item with name=testA - the same result if there would not been braces >>>>> like >>>>> below: >>>>> - request is : name==testA,name==testB;name==testC or FIQL encode >>>>> name%3D%3DtestA%2Cname%3D%3DtestB%3Bname%3D%3DtestC >>>>> <http://192.168.99.100:9080/syncope/rest/groups?fiql=name%3D%3DtestA%2Cname%3D%3DtestB3Bname%3D%3DtestC> >>>>> >>>>> >>>>> It seems Syncope ignores braces "( )". >>>>> >>>>> -- >>>> Francesco Chicchiriccò >>>> >>>> Tirasa - Open Source Excellencehttp://www.tirasa.net/ >>>> >>>> Involved at The Apache Software Foundation: >>>> member, Syncope PMC chair, Cocoon PMC, Olingo PMC, >>>> CXF Committer, OpenJPA Committer, PonyMail >>>> PPMChttp://home.apache.org/~ilgrosso/ >>>> >>>> >>> >>> >>> -- >>> Colm O hEigeartaigh >>> >>> Talend Community Coder >>> http://coders.talend.com >>> >>> >>> >>> -- >>> Francesco Chicchiriccò >>> >>> Tirasa - Open Source Excellence >>> http://www.tirasa.net/ >>> >>> Involved at The Apache Software Foundation: >>> member, Syncope PMC chair, Cocoon PMC, Olingo PMC, >>> CXF Committer, OpenJPA Committer, PonyMail PPMC >>> http://home.apache.org/~ilgrosso/ >>> >> >> >> >> -- >> Colm O hEigeartaigh >> >> Talend Community Coder >> http://coders.talend.com >> >> >> >> -- >> Francesco Chicchiriccò >> >> Tirasa - Open Source Excellence >> http://www.tirasa.net/ >> >> Involved at The Apache Software Foundation: >> member, Syncope PMC chair, Cocoon PMC, Olingo PMC, >> CXF Committer, OpenJPA Committer, PonyMail PPMC >> http://home.apache.org/~ilgrosso/ >> > > > > -- > Colm O hEigeartaigh > > Talend Community Coder > http://coders.talend.com > > > > -- > Francesco Chicchiriccò > > Tirasa - Open Source Excellence > http://www.tirasa.net/ > > Involved at The Apache Software Foundation: > member, Syncope PMC chair, Cocoon PMC, Olingo PMC, > CXF Committer, OpenJPA Committer, PonyMail PPMC > http://home.apache.org/~ilgrosso/ > -- Colm O hEigeartaigh Talend Community Coder http://coders.talend.com