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


The following commit(s) were added to refs/heads/2_1_X by this push:
     new 213b162  [SYNCOPE-1609] Restoring custom support
213b162 is described below

commit 213b1627440cf2b422b882f2711fa32cc765f665
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Tue Jan 12 13:17:01 2021 +0100

    [SYNCOPE-1609] Restoring custom support
---
 .../persistence/jpa/dao/PGJPAJSONAnySearchDAO.java | 55 ++++++++++++++++------
 .../src/main/resources/pgjsonb/views.xml           | 14 ------
 2 files changed, 40 insertions(+), 29 deletions(-)

diff --git 
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
index a117b8d..703a500 100644
--- 
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
+++ 
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
@@ -617,10 +617,10 @@ public class PGJPAJSONAnySearchDAO extends 
AbstractJPAJSONAnySearchDAO {
             final SearchSupport svs,
             final List<Object> parameters) {
 
-        List<String> realmKeyArgs = realmKeys.stream().
+        String realmKeysArg = realmKeys.stream().
                 map(realmKey -> "?" + setParameter(parameters, realmKey)).
-                collect(Collectors.toList());
-        return "realm_id IN (" + StringUtils.join(realmKeyArgs, ", ") + ")";
+                collect(Collectors.joining(","));
+        return "realm_id IN (" + realmKeysArg + ")";
     }
 
     @Override
@@ -639,7 +639,7 @@ public class PGJPAJSONAnySearchDAO extends 
AbstractJPAJSONAnySearchDAO {
 
         buildFrom(queryString, queryInfo, svs, null);
 
-        buildWhere(queryString, queryInfo, filter);
+        buildWhere(queryString, queryInfo, filter, svs, null);
 
         Query countQuery = 
entityManager().createNativeQuery(queryString.toString());
         fillWithParameters(countQuery, parameters);
@@ -673,13 +673,11 @@ public class PGJPAJSONAnySearchDAO extends 
AbstractJPAJSONAnySearchDAO {
             OrderBySupport obs = parseOrderBy(svs, orderBy);
 
             StringBuilder queryString = new StringBuilder("SELECT 
").append(svs.table().alias).append(".id");
-            obs.items.forEach(item -> {
-                queryString.append(",").append(item.select);
-            });
+            obs.items.forEach(item -> 
queryString.append(",").append(item.select));
 
             buildFrom(queryString, queryInfo, svs, obs);
 
-            buildWhere(queryString, queryInfo, filter);
+            buildWhere(queryString, queryInfo, filter, svs, obs);
 
             LOG.debug("Query: {}, parameters: {}", queryString, parameters);
 
@@ -836,7 +834,6 @@ public class PGJPAJSONAnySearchDAO extends 
AbstractJPAJSONAnySearchDAO {
 
         // This first branch is required for handling with not conditions 
given on multivalue fields (SYNCOPE-1419)
         if (not && !(cond instanceof AnyCond)) {
-
             query.append("NOT (");
             fillAttrQuery(query, attrValue, schema, cond, false, parameters, 
svs);
             query.append(")");
@@ -1057,6 +1054,11 @@ public class PGJPAJSONAnySearchDAO extends 
AbstractJPAJSONAnySearchDAO {
         Set<String> schemas = queryInfo.getRight();
 
         if (obs != null) {
+            obs.views.stream().
+                    filter(view -> !svs.field().name.equals(view.name) && 
!svs.table().name.equals(view.name)).
+                    map(view -> view.name + " " + view.alias).
+                    forEach(view -> query.append(',').append(view));
+
             Pattern pattern = Pattern.compile("(.*) -> 0 AS .*");
             obs.items.forEach(item -> {
                 Matcher matcher = pattern.matcher(item.select);
@@ -1085,17 +1087,40 @@ public class PGJPAJSONAnySearchDAO extends 
AbstractJPAJSONAnySearchDAO {
     protected void buildWhere(
             final StringBuilder query,
             final Pair<StringBuilder, Set<String>> queryInfo,
-            final Pair<String, Set<String>> realms) {
+            final Pair<String, Set<String>> realms,
+            final SearchSupport svs,
+            final OrderBySupport obs) {
+
+        StringBuilder where = new StringBuilder();
+
         if (queryInfo.getLeft().length() > 0) {
-            query.append(" WHERE ").append(queryInfo.getLeft());
+            where.append(" WHERE ").append(queryInfo.getLeft());
         }
 
-        if (realms.getLeft().length() > 0) {
-            if (queryInfo.getLeft().length() > 0) {
-                query.append(" AND ").append(realms.getLeft());
+        if (!realms.getLeft().isEmpty()) {
+            if (queryInfo.getLeft().length() == 0) {
+                where.append(" WHERE ");
             } else {
-                query.append(" WHERE ").append(realms.getLeft());
+                where.append(" AND ");
             }
+            where.append(realms.getLeft());
         }
+
+        if (obs != null) {
+            String obsWhere = obs.views.stream().
+                    filter(view -> !svs.field().name.equals(view.name) && 
!svs.table().name.equals(view.name)).
+                    map(view -> "t.id=" + view.alias + ".any_id").
+                    collect(Collectors.joining(" AND "));
+            if (!obsWhere.isEmpty()) {
+                if (where.length() == 0) {
+                    where.append(" WHERE ");
+                } else {
+                    where.append(" AND ");
+                }
+                where.append(obsWhere);
+            }
+        }
+
+        query.append(where);
     }
 }
diff --git a/core/persistence-jpa-json/src/main/resources/pgjsonb/views.xml 
b/core/persistence-jpa-json/src/main/resources/pgjsonb/views.xml
index f07024d..e360813 100644
--- a/core/persistence-jpa-json/src/main/resources/pgjsonb/views.xml
+++ b/core/persistence-jpa-json/src/main/resources/pgjsonb/views.xml
@@ -95,13 +95,6 @@ under the License.
   </entry>
 
   <!-- anyObject -->
-  <entry key="anyObject_search">
-    CREATE VIEW anyObject_search AS
-
-    SELECT a.id as any_id, a.*,attrs,attrValues
-    FROM AnyObject a, jsonb_array_elements(COALESCE(a.plainAttrs, 
'[{}]'::jsonb)) attrs,
-    jsonb_array_elements(COALESCE(attrs -> 'values', '[{}]'::jsonb)) attrValues
-  </entry>
   <entry key="anyObject_search_arelationship">
     CREATE VIEW anyObject_search_arelationship AS
 
@@ -130,13 +123,6 @@ under the License.
   </entry>
 
   <!-- group -->
-  <entry key="group_search">
-    CREATE VIEW group_search AS
-
-    SELECT g.id as any_id, g.*,attrs,attrValues
-    FROM SyncopeGroup g, jsonb_array_elements(COALESCE(g.plainAttrs, 
'[{}]'::jsonb)) attrs,
-    jsonb_array_elements(COALESCE(attrs -> 'values', '[{}]'::jsonb)) attrValues
-  </entry>
   <entry key="group_search_resource">
     CREATE VIEW group_search_resource AS
 

Reply via email to