----- 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= >>>> %28name%3D%3DtestA%2Cname%3D%3DtestB%29%3Bname%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 >>>> It seems Syncope ignores braces "( )". >> -- >> 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/
