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/12/15 11:21:41 UTC

[syncope] branch 2_1_X updated: [SYNCOPE-1416] Small refactoring, following @fmartelli's approach

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 0b0039b  [SYNCOPE-1416] Small refactoring, following @fmartelli's approach
0b0039b is described below

commit 0b0039b7ec2abcb5bb83aef6a214a9cbd1d51785
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Sat Dec 15 12:21:01 2018 +0100

    [SYNCOPE-1416] Small refactoring, following @fmartelli's approach
---
 .../persistence/jpa/dao/PGJPAJSONAnySearchDAO.java | 62 +++++++++++-----------
 .../core/persistence/jpa/dao/JPAAnySearchDAO.java  | 26 +++++----
 2 files changed, 46 insertions(+), 42 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 75b8ff5..1c465e9 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
@@ -97,29 +97,9 @@ public class PGJPAJSONAnySearchDAO extends JPAAnySearchDAO {
         });
     }
 
-    @Override
-    protected void parseOrderByForPlainSchema(
-            final SearchSupport svs,
-            final OrderBySupport obs,
-            final OrderBySupport.Item item,
-            final OrderByClause clause,
-            final PlainSchema schema,
-            final String fieldName) {
-
-        // keep track of involvement of non-mandatory schemas in the order by clauses
-        obs.nonMandatorySchemas = !"true".equals(schema.getMandatoryCondition());
-
-        obs.views.add(svs.field());
-
-        item.select = svs.field().alias + ".attrValues ->> '" + field(schema, null) + "' AS " + fieldName;
-        item.where = "attrs ->> 'schema' = '" + fieldName + "'";
-        item.orderBy = fieldName + " " + clause.getDirection().name();
-    }
-
-    private Pair<Boolean, String> field(final PlainSchema schema, final AttributeCond.Type type) {
+    private String key(final AttrSchemaType schemaType) {
         String key;
-        boolean lower = false;
-        switch (schema.getType()) {
+        switch (schemaType) {
             case Boolean:
                 key = "booleanValue";
                 break;
@@ -141,10 +121,29 @@ public class PGJPAJSONAnySearchDAO extends JPAAnySearchDAO {
                 break;
 
             default:
-                lower = type == AttributeCond.Type.IEQ || type == AttributeCond.Type.ILIKE;
                 key = "stringValue";
         }
-        return Pair.of(lower, key);
+
+        return key;
+    }
+
+    @Override
+    protected void parseOrderByForPlainSchema(
+            final SearchSupport svs,
+            final OrderBySupport obs,
+            final OrderBySupport.Item item,
+            final OrderByClause clause,
+            final PlainSchema schema,
+            final String fieldName) {
+
+        // keep track of involvement of non-mandatory schemas in the order by clauses
+        obs.nonMandatorySchemas = !"true".equals(schema.getMandatoryCondition());
+
+        obs.views.add(svs.field());
+
+        item.select = svs.field().alias + ".attrValues ->> '" + key(schema.getType()) + "' AS " + fieldName;
+        item.where = "attrs ->> 'schema' = '" + fieldName + "'";
+        item.orderBy = fieldName + " " + clause.getDirection().name();
     }
 
     private void fillAttrQuery(
@@ -156,7 +155,9 @@ public class PGJPAJSONAnySearchDAO extends JPAAnySearchDAO {
             final boolean not,
             final List<Object> parameters) {
 
-        Pair<Boolean, String> field = field(schema, cond.getType());
+        String key = key(schema.getType());
+        boolean lower = (schema.getType() == AttrSchemaType.String || schema.getType() == AttrSchemaType.Enum)
+                && (cond.getType() == AttributeCond.Type.IEQ || cond.getType() == AttributeCond.Type.ILIKE);
 
         if (!not && cond.getType() == AttributeCond.Type.EQ) {
             PlainAttr<?> container = anyUtils.newPlainAttr();
@@ -173,11 +174,11 @@ public class PGJPAJSONAnySearchDAO extends JPAAnySearchDAO {
         } else {
             query.append("attrs ->> 'schema' = ?").append(setParameter(parameters, cond.getSchema())).
                     append(" AND ").
-                    append(field.getLeft() ? "LOWER(" : "").
+                    append(lower ? "LOWER(" : "").
                     append(schema.isUniqueConstraint()
                             ? "attrs -> 'uniqueValue'" : "attrValues").
-                    append(" ->> '").append(field.getRight()).append("'").
-                    append(field.getLeft() ? ")" : "");
+                    append(" ->> '").append(key).append("'").
+                    append(lower ? ")" : "");
 
             switch (cond.getType()) {
                 case LIKE:
@@ -237,10 +238,9 @@ public class PGJPAJSONAnySearchDAO extends JPAAnySearchDAO {
                     LOG.error("Could not parse {} as date", value, e);
                 }
             }
-
-            query.append(field.getLeft() ? "LOWER(" : "").
+            query.append(lower ? "LOWER(" : "").
                     append("?").append(setParameter(parameters, value)).
-                    append(field.getLeft() ? ")" : "");
+                    append(lower ? ")" : "");
         }
     }
 
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 0a50b2d..da76f48 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
@@ -130,7 +130,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         Pair<String, Set<String>> filter = getAdminRealmsFilter(adminRealms, svs, parameters);
 
         // 1. get the query string from the search condition
-        Pair<StringBuilder, Set<String>> queryInfo = 
+        Pair<StringBuilder, Set<String>> queryInfo =
                 getQuery(buildEffectiveCond(cond, filter.getRight()), parameters, svs);
 
         StringBuilder queryString = queryInfo.getLeft();
@@ -167,8 +167,8 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             Pair<String, Set<String>> filter = getAdminRealmsFilter(adminRealms, svs, parameters);
 
             // 1. get the query string from the search condition
-            Pair<StringBuilder, Set<String>> queryInfo = getQuery(buildEffectiveCond(cond, filter.getRight()),
-                    parameters, svs);
+            Pair<StringBuilder, Set<String>> queryInfo =
+                    getQuery(buildEffectiveCond(cond, filter.getRight()), parameters, svs);
 
             StringBuilder queryString = queryInfo.getLeft();
 
@@ -292,7 +292,10 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
     }
 
     private StringBuilder buildWhere(
-            final SearchSupport svs, final Set<String> involvedPlainAttrs, final OrderBySupport obs) {
+            final SearchSupport svs,
+            final Set<String> involvedPlainAttrs,
+            final OrderBySupport obs) {
+
         StringBuilder where = new StringBuilder(" u");
         processOBS(svs, involvedPlainAttrs, obs, where);
         where.append(" WHERE ");
@@ -418,8 +421,9 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
 
     private Pair<StringBuilder, Set<String>> getQuery(
             final SearchCond cond, final List<Object> parameters, final SearchSupport svs) {
+
         StringBuilder query = new StringBuilder();
-        Set<String> involvedAttributes = new HashSet<>();
+        Set<String> involvedPlainAttrs = new HashSet<>();
 
         switch (cond.getType()) {
             case LEAF:
@@ -463,7 +467,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                     query.append(getQuery(cond.getAttributeCond(),
                             cond.getType() == SearchCond.Type.NOT_LEAF, parameters, svs));
                     try {
-                        involvedAttributes.add(check(cond.getAttributeCond(), svs.anyTypeKind).getLeft().getKey());
+                        involvedPlainAttrs.add(check(cond.getAttributeCond(), svs.anyTypeKind).getLeft().getKey());
                     } catch (IllegalArgumentException e) {
                         // ignore
                     }
@@ -475,10 +479,10 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
 
             case AND:
                 Pair<StringBuilder, Set<String>> leftAndInfo = getQuery(cond.getLeftSearchCond(), parameters, svs);
-                involvedAttributes.addAll(leftAndInfo.getRight());
+                involvedPlainAttrs.addAll(leftAndInfo.getRight());
 
                 Pair<StringBuilder, Set<String>> rigthAndInfo = getQuery(cond.getRightSearchCond(), parameters, svs);
-                involvedAttributes.addAll(rigthAndInfo.getRight());
+                involvedPlainAttrs.addAll(rigthAndInfo.getRight());
 
                 String andSubQuery = leftAndInfo.getKey().toString();
                 // Add extra parentheses
@@ -491,10 +495,10 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
 
             case OR:
                 Pair<StringBuilder, Set<String>> leftOrInfo = getQuery(cond.getLeftSearchCond(), parameters, svs);
-                involvedAttributes.addAll(leftOrInfo.getRight());
+                involvedPlainAttrs.addAll(leftOrInfo.getRight());
 
                 Pair<StringBuilder, Set<String>> rigthOrInfo = getQuery(cond.getRightSearchCond(), parameters, svs);
-                involvedAttributes.addAll(rigthOrInfo.getRight());
+                involvedPlainAttrs.addAll(rigthOrInfo.getRight());
 
                 String orSubQuery = leftOrInfo.getKey().toString();
                 // Add extra parentheses
@@ -508,7 +512,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             default:
         }
 
-        return Pair.of(query, involvedAttributes);
+        return Pair.of(query, involvedPlainAttrs);
     }
 
     protected String getQuery(