Repository: syncope
Updated Branches:
  refs/heads/master f17be3cf9 -> 7e66e3d5a


SYNCOPE-929 - Braces are ignored for FIQL strings. Tests added.


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/7e66e3d5
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/7e66e3d5
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/7e66e3d5

Branch: refs/heads/master
Commit: 7e66e3d5abd7709c04d1abde3af119159f3de961
Parents: f17be3c
Author: Colm O hEigeartaigh <[email protected]>
Authored: Mon Sep 5 12:16:57 2016 +0100
Committer: Colm O hEigeartaigh <[email protected]>
Committed: Mon Sep 5 14:02:16 2016 +0100

----------------------------------------------------------------------
 .../persistence/jpa/dao/JPAAnySearchDAO.java    | 14 ++++++++---
 .../persistence/jpa/inner/AnySearchTest.java    | 26 ++++++++++++++++++++
 .../apache/syncope/fit/core/SearchITCase.java   | 13 ++++++++++
 3 files changed, 49 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/7e66e3d5/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index ae802fd..cc73bd4 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -473,17 +473,23 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> 
implements AnySearchDAO
                 break;
 
             case AND:
-                query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, 
svs)).
+                String andSubQuery = getQuery(nodeCond.getLeftNodeCond(), 
parameters, svs).toString();
+                // Add extra parentheses
+                andSubQuery = andSubQuery.replaceFirst("WHERE ", "WHERE (");
+                query.append(andSubQuery).
                         append(" AND any_id IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), 
parameters, svs)).
-                        append(")");
+                        append("))");
                 break;
 
             case OR:
-                query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, 
svs)).
+                String orSubQuery = getQuery(nodeCond.getLeftNodeCond(), 
parameters, svs).toString();
+                // Add extra parentheses
+                orSubQuery = orSubQuery.replaceFirst("WHERE ", "WHERE (");
+                query.append(orSubQuery).
                         append(" OR any_id IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), 
parameters, svs)).
-                        append(")");
+                        append("))");
                 break;
 
             default:

http://git-wip-us.apache.org/repos/asf/syncope/blob/7e66e3d5/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
----------------------------------------------------------------------
diff --git 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index aa891a3..e661d43 100644
--- 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -602,4 +602,30 @@ public class AnySearchTest extends AbstractTest {
         assertNotNull(count);
         assertTrue(count > 0);
     }
+    
+    @Test
+    public void issueSYNCOPE929() {
+        AttributeCond rossiniCond = new AttributeCond(AttributeCond.Type.EQ);
+        rossiniCond.setSchema("surname");
+        rossiniCond.setExpression("Rossini");
+        
+        AttributeCond genderCond = new AttributeCond(AttributeCond.Type.EQ);
+        genderCond.setSchema("gender");
+        genderCond.setExpression("M");
+
+        SearchCond orCond = 
+            SearchCond.getOrCond(SearchCond.getLeafCond(rossiniCond),
+                                 SearchCond.getLeafCond(genderCond));
+        
+        AttributeCond belliniCond = new AttributeCond(AttributeCond.Type.EQ);
+        belliniCond.setSchema("surname");
+        belliniCond.setExpression("Bellini");
+        
+        SearchCond searchCond = 
+            SearchCond.getAndCond(orCond, SearchCond.getLeafCond(belliniCond));
+
+        List<User> users = searchDAO.search(searchCond, AnyTypeKind.USER);
+        assertNotNull(users);
+        assertEquals(1, users.size());
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/7e66e3d5/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
index a044c22..c5ab231 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
@@ -443,4 +443,17 @@ public class SearchITCase extends AbstractITCase {
                 getTotalCount();
         assertEquals(nonOrdered, orderedByNullable);
     }
+    
+    @Test
+    public void issueSYNCOPE929() {
+        PagedResult<UserTO> matchingUsers = userService.search(new 
AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+                fiql("(surname==Rossini,gender==M);surname==Bellini").build());
+        
+        assertNotNull(matchingUsers);
+
+        assertFalse(matchingUsers.getResult().isEmpty());
+        for (UserTO user : matchingUsers.getResult()) {
+            assertTrue(user.getUsername().startsWith("bellini"));
+        }
+    }
 }

Reply via email to