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?

Colm.

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 "( )".
>>
>> <http://192.168.99.100:9080/syncope/rest/groups?fiql=name%3D%3DtestA%2Cname%3D%3DtestB3Bname%3D%3DtestC>
>>
> --
> 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

Reply via email to