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 2022/03/08 09:23:26 UTC

[syncope] branch master updated: Some AnySearchDAO cleanup (#323)

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 120e355  Some AnySearchDAO cleanup (#323)
120e355 is described below

commit 120e355359d99c0f654c218f9277e31c03103f14
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Tue Mar 8 10:21:00 2022 +0100

    Some AnySearchDAO cleanup (#323)
---
 .../persistence/jpa/dao/MyJPAJSONAnySearchDAO.java | 16 +++++++------
 .../core/persistence/jpa/dao/JPAAnySearchDAO.java  | 28 +++++++++++-----------
 2 files changed, 23 insertions(+), 21 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 0a01536..9d88bd2 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
@@ -68,13 +68,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 ");
@@ -84,7 +86,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, ").
@@ -101,13 +103,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 185074a..51a4e52 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
@@ -201,12 +201,12 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             OrderBySupport obs = parseOrderBy(svs, orderBy);
             if (queryString.charAt(0) == '(') {
                 queryString.insert(0, buildSelect(obs));
-                queryString.append(buildWhere(svs, obs));
             } else {
                 queryString.insert(0, buildSelect(obs).append('('));
-                queryString.append(')').append(buildWhere(svs, obs));
+                queryString.append(')');
             }
             queryString.
+                    append(buildWhere(svs, obs)).
                     append(filter.getLeft()).
                     append(buildOrderBy(obs));
 
@@ -272,13 +272,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 ");
@@ -302,13 +305,13 @@ 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);
         });
     }
@@ -320,15 +323,12 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         StringBuilder where = new StringBuilder(" u");
         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;
     }