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(