You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/04/23 14:29:16 UTC
[2/2] syncope git commit: [SYNCOPE-1304] Correct referece to
userOwner_id / groupOwner_id in ORDER BY statements
[SYNCOPE-1304] Correct referece to userOwner_id / groupOwner_id in ORDER BY statements
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/9e9002f4
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/9e9002f4
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/9e9002f4
Branch: refs/heads/master
Commit: 9e9002f4b2ae437b4c10f32d3dab513f2e3d9bb5
Parents: d11be0d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Apr 23 16:26:11 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Apr 23 16:29:00 2018 +0200
----------------------------------------------------------------------
.../persistence/jpa/dao/JPAAnySearchDAO.java | 37 +++++++++++---------
.../apache/syncope/fit/core/SearchITCase.java | 8 +++++
2 files changed, 29 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/9e9002f4/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 7d0ba9f..3ce2702 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
@@ -27,6 +27,7 @@ import java.util.Set;
import java.util.stream.Collectors;
import javax.persistence.Query;
import javax.persistence.TemporalType;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
@@ -64,6 +65,8 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
private static final String EMPTY_QUERY = "SELECT any_id FROM user_search_attr WHERE 1=2";
+ private static final String[] RELATIONSHIP_FIELDS = new String[] { "realm", "userOwner", "groupOwner" };
+
private Pair<String, Set<String>> getAdminRealmsFilter(
final Set<String> adminRealms,
final SearchSupport svs,
@@ -223,9 +226,9 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
private StringBuilder buildSelect(final OrderBySupport obs) {
final StringBuilder select = new StringBuilder("SELECT u.any_id");
- for (OrderBySupport.Item item : obs.items) {
+ obs.items.forEach(item -> {
select.append(',').append(item.select);
- }
+ });
select.append(" FROM ");
return select;
@@ -233,7 +236,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
private StringBuilder buildWhere(final SearchSupport svs, final OrderBySupport obs) {
StringBuilder where = new StringBuilder(" u");
- for (SearchSupport.SearchView searchView : obs.views) {
+ obs.views.forEach(searchView -> {
where.append(',');
if (searchView.name.equals(svs.attr().name)) {
where.append(" (SELECT * FROM ").append(searchView.name);
@@ -247,17 +250,17 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
where.append(searchView.name);
}
where.append(' ').append(searchView.alias);
- }
+ });
where.append(" WHERE ");
- for (SearchSupport.SearchView searchView : obs.views) {
+ obs.views.forEach(searchView -> {
where.append("u.any_id=").append(searchView.alias).append(".any_id AND ");
- }
+ });
- for (OrderBySupport.Item item : obs.items) {
- if (StringUtils.isNotBlank(item.where)) {
- where.append(item.where).append(" AND ");
- }
- }
+ obs.items.stream().
+ filter(item -> StringUtils.isNotBlank(item.where)).
+ forEachOrdered((item) -> {
+ where.append(item.where).append(" AND ");
+ });
return where;
}
@@ -265,9 +268,9 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
private StringBuilder buildOrderBy(final OrderBySupport obs) {
StringBuilder orderBy = new StringBuilder();
- for (OrderBySupport.Item item : obs.items) {
+ obs.items.forEach(item -> {
orderBy.append(item.orderBy).append(',');
- }
+ });
if (!obs.items.isEmpty()) {
orderBy.insert(0, " ORDER BY ");
orderBy.deleteCharAt(orderBy.length() - 1);
@@ -283,7 +286,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
OrderBySupport obs = new OrderBySupport();
- for (OrderByClause clause : filterOrderBy(orderBy)) {
+ filterOrderBy(orderBy).forEach(clause -> {
OrderBySupport.Item item = new OrderBySupport.Item();
// Manage difference among external key attribute and internal JPA @Id
@@ -319,7 +322,9 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
}
} else {
// Adjust field name to column name
- fieldName = "realm".equals(fieldName) ? "realm_id" : fieldName;
+ if (ArrayUtils.contains(RELATIONSHIP_FIELDS, fieldName)) {
+ fieldName += "_id";
+ }
obs.views.add(svs.field());
@@ -333,7 +338,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
} else {
obs.items.add(item);
}
- }
+ });
return obs;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/9e9002f4/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 bc743ab..8d20639 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
@@ -525,4 +525,12 @@ public class SearchITCase extends AbstractITCase {
userService.update(patch);
}
}
+
+ @Test
+ public void issueSYNCOPE1304() {
+ PagedResult<GroupTO> groups = groupService.search(new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+ orderBy("userOwner DESC").build());
+ assertNotNull(groups);
+ assertFalse(groups.getResult().isEmpty());
+ }
}