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;
     }

Reply via email to