Repository: olingo-odata2 Updated Branches: refs/heads/OLINGO-1147-Fix [created] cd41d77b8
[OLINGO-1147] First idea for fix Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/cd41d77b Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/cd41d77b Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/cd41d77b Branch: refs/heads/OLINGO-1147-Fix Commit: cd41d77b80c3aa038360946007d435851ba999d5 Parents: 7d86e45 Author: mibo <[email protected]> Authored: Wed Jul 12 22:01:02 2017 +0200 Committer: mibo <[email protected]> Committed: Wed Jul 12 22:01:02 2017 +0200 ---------------------------------------------------------------------- .../core/access/data/JPAQueryBuilder.java | 40 +++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cd41d77b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java ---------------------------------------------------------------------- diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java index 6852a17..a2ddb89 100644 --- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java +++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java @@ -20,12 +20,7 @@ package org.apache.olingo.odata2.jpa.processor.core.access.data; import org.apache.olingo.odata2.api.edm.EdmException; import org.apache.olingo.odata2.api.uri.UriInfo; -import org.apache.olingo.odata2.api.uri.info.DeleteUriInfo; -import org.apache.olingo.odata2.api.uri.info.GetEntityCountUriInfo; -import org.apache.olingo.odata2.api.uri.info.GetEntitySetCountUriInfo; -import org.apache.olingo.odata2.api.uri.info.GetEntitySetUriInfo; -import org.apache.olingo.odata2.api.uri.info.GetEntityUriInfo; -import org.apache.olingo.odata2.api.uri.info.PutMergePatchUriInfo; +import org.apache.olingo.odata2.api.uri.info.*; import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext; import org.apache.olingo.odata2.jpa.processor.api.ODataJPAQueryExtensionEntityListener; import org.apache.olingo.odata2.jpa.processor.api.ODataJPATombstoneEntityListener; @@ -241,6 +236,35 @@ public class JPAQueryBuilder { private static final Pattern JOIN_ALIAS_PATTERN = Pattern.compile(".*\\sJOIN\\s(\\S*\\s\\S*).*"); private static String normalizeMembers(EntityManager em, String jpqlQuery) { + StringBuilder cq = new StringBuilder(); + Map<String, String> paraValues = new HashMap<String, String>(); + int len = jpqlQuery.length(); + boolean start = false; + int startPos = 0; + for (int i = 0; i < len; i++) { + char c = jpqlQuery.charAt(i); + if (c == '\'') { + if (start) { + if (!(i+1 < len && jpqlQuery.charAt(i+1) == '\'')) { + // + String paraValue = jpqlQuery.substring(startPos, i); + String key = String.valueOf(paraValue.hashCode()); + paraValues.put(key, paraValue); + cq.append(key); + // + start = false; + } + } else { + startPos = i; + start = true; + } + } else if(!start) { + cq.append(c); + } + } + + jpqlQuery = cq.toString(); + // check if normalization is needed (if query contains "x.y.z" elements // starting with space or parenthesis) Matcher normalizationNeededMatcher = NORMALIZATION_NEEDED_PATTERN.matcher(jpqlQuery); @@ -252,6 +276,10 @@ public class JPAQueryBuilder { return jpqlQuery; } + for (Map.Entry<String, String> entry: paraValues.entrySet()) { + jpqlQuery = jpqlQuery.replace(entry.getKey(), entry.getValue()); + } + String normalizedJpqlQuery = jpqlQuery; Map<String, String> joinAliases = new HashMap<String, String>();
