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")); + } + } }
