Repository: cxf
Updated Branches:
  refs/heads/2.7.x-fixes 81dd727b4 -> c5a89b7c1


[CXF-5720,CXF-5721] Dealing with SQL percent and reserved chars, patches from 
Romain Castan applied


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/c5a89b7c
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/c5a89b7c
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/c5a89b7c

Branch: refs/heads/2.7.x-fixes
Commit: c5a89b7c137566c045a0d13b62132e987ff81b52
Parents: 81dd727
Author: Sergey Beryozkin <[email protected]>
Authored: Thu May 1 13:40:14 2014 +0100
Committer: Sergey Beryozkin <[email protected]>
Committed: Thu May 1 15:59:01 2014 +0100

----------------------------------------------------------------------
 .../apache/cxf/jaxrs/ext/search/SearchUtils.java  | 13 ++++++-------
 .../ext/search/jpa/JPATypedQueryVisitorTest.java  | 18 +++++++++++++++++-
 2 files changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/c5a89b7c/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
index 472f39b..a91e56e 100644
--- 
a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
+++ 
b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SearchUtils.java
@@ -56,23 +56,22 @@ public final class SearchUtils {
         if (value.contains("\\")) {
             value = value.replaceAll("\\\\", "\\\\\\\\"); 
         }
+        if (value.contains("_")) {
+            value = value.replaceAll("_", "\\\\_");
+        }
         if (value.contains("%")) {
             value = value.replaceAll("%", "\\\\%");
         }
         if (!value.contains("*")) {
             return alwaysWildcard ? "%" + value + "%" : value;
-        }
-        if (value.startsWith("*")) { 
-            value = "%" + value.substring(1);
-        }
-        if (value.endsWith("*")) { 
-            value = value.substring(0, value.length() - 1) + "%";
+        } else {
+            value = value.replaceAll("\\*", "%");
         }
         return value;
     }
     
     public static boolean containsEscapedChar(String value) {
-        return value.contains("\\%") || value.contains("\\\\");
+        return value.contains("\\%") || value.contains("\\\\") || 
value.contains("\\_");
     }
     
     public static void startSqlQuery(StringBuilder sb, 

http://git-wip-us.apache.org/repos/asf/cxf/blob/c5a89b7c/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java
 
b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java
index 3c45f5c..9a4de94 100644
--- 
a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java
+++ 
b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorTest.java
@@ -133,7 +133,7 @@ public class JPATypedQueryVisitorTest extends Assert {
             br3.setBook(b3);
             b3.setId(11);
             b3.setBookTitle("num11");
-            b3.setAddress(new OwnerAddress("Street3"));
+            b3.setAddress(new OwnerAddress("Street&'3"));
             b3.getAuthors().add("Barry");
             OwnerInfo info3 = new OwnerInfo();
             info3.setName(new Name("Bill"));
@@ -376,6 +376,22 @@ public class JPATypedQueryVisitorTest extends Assert {
     }
 
     @Test
+    public void testEqualsAddressQuery4() throws Exception {
+        Map<String, String> beanPropertiesMap = new HashMap<String, String>();
+        beanPropertiesMap.put("street", "address.street");
+        List<Book> books = queryBooks("street==Str*t*", null, 
beanPropertiesMap);
+        assertEquals(3, books.size());
+    }
+    
+    @Test
+    public void testEqualsAddressQuery5() throws Exception {
+        Map<String, String> beanPropertiesMap = new HashMap<String, String>();
+        beanPropertiesMap.put("street", "address.street");
+        List<Book> books = queryBooks("street==Street&'3", null, 
beanPropertiesMap);
+        assertEquals(1, books.size());
+    }
+
+    @Test
     public void testEqualsOwnerNameQuery() throws Exception {
         List<Book> books = queryBooks("ownerInfo.name.name==Fred");
         assertEquals(1, books.size());

Reply via email to