Hello Sven, If I am not wrong, if we are evaluating the expression tree, the way it is demonstrated in Olingo core reference scenario then the order of precedence will work. Because here we evaluate the expression tree by navigating through the nodes of the tree as they appear and evaluate them. However if now I need to use the expression tree to build a JPQL Expression string then the expression tree does not provide information on the availability of parenthesis and hence the final JPQL statement that gets built loses out on parenthesis. Is there any way we could get the availability of parenthesis in the filter string via expression tree so that the same can be added to the JPQL expression string?
Thanks Kind Regards Chandan -----Original Message----- From: Kobler-Morris, Sven [mailto:[email protected]] Sent: Friday, October 31, 2014 2:24 PM To: [email protected] Subject: RE: Serious bug in JPA visitor Hello Chandan, seems a bug in the JPA processor or more in the JPAs-Visitor. The expression tree serialized with a test visitor shows that the parenthesis are correctly evaluated. I added a test to file "TestParser.java" @Test public void testAndOr() { //A GetPTF("(SoId eq 2 or SoId eq 3 or SoId eq 4) and Delivered eq true") .aSerialized("{{{{SoId eq 2} or {SoId eq 3}} or {SoId eq 4}} and {Delivered eq true}}"); //B GetPTF("SoId eq 2 or SoId eq 3 or SoId eq 4 and Delivered eq true") .aSerialized("{{{SoId eq 2} or {SoId eq 3}} or {{SoId eq 4} and {Delivered eq true}}}"); } It shows that in A the "or's" in the pathentesis are gouped together. Where as in B the "and" is first grouped because and has a higher priority. Regards, Sven -----Original Message----- From: Giacomo Pati [mailto:[email protected]] Sent: Freitag, 31. Oktober 2014 08:41 To: [email protected] Subject: Serious bug in FilterParser Hi all We recently run into a serious issue regarding filters and I want someone of you to double check. When you run the following query against a deployed olingo-odata2-jpa-processor-ref-web like http://localhost:8080/SalesOrderProcessing.svc/SalesOrderItems?$filter=(SoId eq 2 or SoId eq 3 or SoId eq 4) and Delivered eq true one would expect to see only Entities with a property Delivered == true but this is not the case. I've also run a quick junit test against FilterParserImpl with such a query using an ExpressionVisitor and figured that it seems that the parenthesis are not respected which would reduce the query to "SoId eq 2 or SoId eq 3 or SoId eq 4 and Delivered eq true" and it seems that is actually what happens. Anyone else? Ciao -- Giacomo
