Repository: syncope Updated Branches: refs/heads/1_2_X d3c779f6b -> 8a916bf1e
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/8a916bf1 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/8a916bf1 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/8a916bf1 Branch: refs/heads/1_2_X Commit: 8a916bf1e5c7ab0811dfb655653f4dee84e83f7a Parents: d3c779f Author: Colm O hEigeartaigh <cohei...@apache.org> Authored: Mon Sep 5 12:16:57 2016 +0100 Committer: Colm O hEigeartaigh <cohei...@apache.org> Committed: Mon Sep 5 14:50:14 2016 +0100 ---------------------------------------------------------------------- .../dao/impl/SubjectSearchDAOImpl.java | 14 +++++++--- .../persistence/dao/AttributableSearchTest.java | 27 ++++++++++++++++++++ .../syncope/core/rest/SearchTestITCase.java | 13 ++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/8a916bf1/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SubjectSearchDAOImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SubjectSearchDAOImpl.java b/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SubjectSearchDAOImpl.java index 0b1dfd8..00ba41a 100644 --- a/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SubjectSearchDAOImpl.java +++ b/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/SubjectSearchDAOImpl.java @@ -426,17 +426,23 @@ public class SubjectSearchDAOImpl extends AbstractDAOImpl implements SubjectSear break; case AND: - query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, type, svs)). + String andSubQuery = getQuery(nodeCond.getLeftNodeCond(), parameters, type, svs).toString(); + // Add extra parentheses + andSubQuery = andSubQuery.replaceFirst("WHERE ", "WHERE ("); + query.append(andSubQuery). append(" AND subject_id IN ( "). append(getQuery(nodeCond.getRightNodeCond(), parameters, type, svs)). - append(")"); + append("))"); break; case OR: - query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, type, svs)). + String orSubQuery = getQuery(nodeCond.getLeftNodeCond(), parameters, type, svs).toString(); + // Add extra parentheses + orSubQuery = orSubQuery.replaceFirst("WHERE ", "WHERE ("); + query.append(orSubQuery). append(" OR subject_id IN ( "). append(getQuery(nodeCond.getRightNodeCond(), parameters, type, svs)). - append(")"); + append("))"); break; default: http://git-wip-us.apache.org/repos/asf/syncope/blob/8a916bf1/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java b/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java index 259b522..df91642 100644 --- a/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java +++ b/core/src/test/java/org/apache/syncope/core/persistence/dao/AttributableSearchTest.java @@ -478,4 +478,31 @@ public class AttributableSearchTest { 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<SyncopeUser> users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), + searchCond, SubjectType.USER); + assertNotNull(users); + assertEquals(1, users.size()); + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/8a916bf1/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java b/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java index b58261c..24b5da5 100644 --- a/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java +++ b/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java @@ -216,4 +216,17 @@ public class SearchTestITCase extends AbstractTest { assertTrue(matchedUsers.getResult().size() > usersWithType.size()); } + + @Test + public void issueSYNCOPE929() { + PagedResult<UserTO> matchingUsers = userService.search( + "(surname==Rossini,gender==M);surname==Bellini"); + + assertNotNull(matchingUsers); + + assertFalse(matchingUsers.getResult().isEmpty()); + for (UserTO user : matchingUsers.getResult()) { + assertTrue(user.getUsername().startsWith("bellini")); + } + } }