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 :-)
Colm. On Fri, Sep 2, 2016 at 12:59 PM, Francesco Chicchiriccò <[email protected] > wrote: > ----- Il 2-set-16, alle 13:33, Colm O hEigeartaigh <[email protected]> > 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ò < > [email protected]> 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 <[email protected]> >> 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
