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>();
 

Reply via email to