This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch 2_1_X in repository https://gitbox.apache.org/repos/asf/syncope.git
commit fa6644f8c37be9aa32f5535c7d70c5d162266da0 Author: Francesco Chicchiriccò <[email protected]> AuthorDate: Tue Mar 8 10:21:00 2022 +0100 Some AnySearchDAO cleanup (#323) --- .../persistence/jpa/dao/MyJPAJSONAnySearchDAO.java | 17 ++++++------ .../core/persistence/jpa/dao/JPAAnySearchDAO.java | 32 ++++++++++------------ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java index f570c24..4cf28b0 100644 --- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java +++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java @@ -41,7 +41,6 @@ public class MyJPAJSONAnySearchDAO extends JPAAnySearchDAO { @Override protected void processOBS( final SearchSupport svs, - final Set<String> involvedPlainAttrs, final OrderBySupport obs, final StringBuilder where) { @@ -49,13 +48,15 @@ public class MyJPAJSONAnySearchDAO extends JPAAnySearchDAO { map(item -> item.orderBy.substring(0, item.orderBy.indexOf(" "))).collect(Collectors.toSet()); obs.views.forEach(searchView -> { + boolean searchViewAddedToWhere = false; if (searchView.name.equals(svs.field().name)) { StringBuilder attrWhere = new StringBuilder(); StringBuilder nullAttrWhere = new StringBuilder(); - where.append(", (SELECT * FROM ").append(searchView.name); - if (svs.nonMandatorySchemas || obs.nonMandatorySchemas) { + where.append(", (SELECT * FROM ").append(searchView.name); + searchViewAddedToWhere = true; + attrs.forEach(field -> { if (attrWhere.length() == 0) { attrWhere.append(" WHERE "); @@ -65,7 +66,7 @@ public class MyJPAJSONAnySearchDAO extends JPAAnySearchDAO { attrWhere.append("JSON_CONTAINS(plainAttrs, '[{\"schema\":\"").append(field).append("\"}]')"); nullAttrWhere.append(" UNION SELECT DISTINCT any_id,").append(svs.table().alias).append(".*, "). - append("\"").append(field).append("\"").append(" AS plainShema, "). + append('"').append(field).append('"').append(" AS plainSchema, "). append("null AS binaryValue, "). append("null AS booleanValue, "). append("null AS dateValue, "). @@ -82,13 +83,13 @@ public class MyJPAJSONAnySearchDAO extends JPAAnySearchDAO { append(" WHERE ").append(svs.table().alias).append(".id=any_id AND "). append("JSON_CONTAINS(plainAttrs, '[{\"schema\":\"").append(field).append("\"}]'))"); }); - where.append(attrWhere).append(nullAttrWhere); + where.append(attrWhere).append(nullAttrWhere).append(')'); } - - where.append(')'); - } else { + } + if (!searchViewAddedToWhere) { where.append(',').append(searchView.name); } + where.append(' ').append(searchView.alias); }); } 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 042a688..ae4904d 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 @@ -181,12 +181,12 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO { OrderBySupport obs = parseOrderBy(svs, orderBy); if (queryString.charAt(0) == '(') { queryString.insert(0, buildSelect(obs)); - queryString.append(buildWhere(svs, queryInfo.getRight(), obs)); } else { queryString.insert(0, buildSelect(obs).append('(')); - queryString.append(')').append(buildWhere(svs, queryInfo.getRight(), obs)); + queryString.append(')'); } queryString. + append(buildWhere(svs, obs)). append(filter.getLeft()). append(buildOrderBy(obs)); @@ -244,7 +244,6 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO { protected void processOBS( final SearchSupport svs, - final Set<String> involvedPlainAttrs, final OrderBySupport obs, final StringBuilder where) { @@ -253,13 +252,16 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO { obs.views.forEach(searchView -> { where.append(','); + + boolean searchViewAddedToWhere = false; if (searchView.name.equals(svs.asSearchViewSupport().attr().name)) { StringBuilder attrWhere = new StringBuilder(); StringBuilder nullAttrWhere = new StringBuilder(); - where.append(" (SELECT * FROM ").append(searchView.name); - if (svs.nonMandatorySchemas || obs.nonMandatorySchemas) { + where.append(" (SELECT * FROM ").append(searchView.name); + searchViewAddedToWhere = true; + attrs.forEach(field -> { if (attrWhere.length() == 0) { attrWhere.append(" WHERE "); @@ -283,34 +285,30 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO { append(svs.asSearchViewSupport().attr().name).append(' ').append(searchView.alias). append(" WHERE ").append("schema_id='").append(field).append("')"); }); - where.append(attrWhere).append(nullAttrWhere); + where.append(attrWhere).append(nullAttrWhere).append(')'); } - - where.append(')'); - } else { + } + if (!searchViewAddedToWhere) { where.append(searchView.name); } + where.append(' ').append(searchView.alias); }); } protected StringBuilder buildWhere( final SearchSupport svs, - final Set<String> involvedPlainAttrs, final OrderBySupport obs) { StringBuilder where = new StringBuilder(" u"); - processOBS(svs, involvedPlainAttrs, obs, where); + processOBS(svs, obs, where); where.append(" WHERE "); - obs.views.forEach(searchView -> { - where.append("u.any_id=").append(searchView.alias).append(".any_id AND "); - }); + + obs.views.forEach(searchView -> where.append("u.any_id=").append(searchView.alias).append(".any_id AND ")); obs.items.stream(). filter(item -> StringUtils.isNotBlank(item.where)). - forEachOrdered((item) -> { - where.append(item.where).append(" AND "); - }); + forEach(item -> where.append(item.where).append(" AND ")); return where; }
