Repository: cxf Updated Branches: refs/heads/master 55fe54262 -> 0edab8ddf
[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/0edab8dd Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/0edab8dd Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/0edab8dd Branch: refs/heads/master Commit: 0edab8ddfc537e3cc3bb36cf206397e9ea132888 Parents: 55fe542 Author: Sergey Beryozkin <sberyoz...@talend.com> Authored: Thu May 1 13:40:14 2014 +0100 Committer: Sergey Beryozkin <sberyoz...@talend.com> Committed: Thu May 1 13:40:14 2014 +0100 ---------------------------------------------------------------------- .../apache/cxf/jaxrs/ext/search/SearchUtils.java | 13 ++++++------- .../jpa/AbstractJPATypedQueryVisitorTest.java | 2 +- .../search/jpa/JPATypedQueryVisitorFiqlTest.java | 16 ++++++++++++++++ .../search/jpa/JPATypedQueryVisitorODataTest.java | 17 ++++++++++++++++- 4 files changed, 39 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/0edab8dd/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/0edab8dd/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitorTest.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitorTest.java b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitorTest.java index 379a1bd..35bf72d 100644 --- a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitorTest.java +++ b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/AbstractJPATypedQueryVisitorTest.java @@ -133,7 +133,7 @@ public abstract class AbstractJPATypedQueryVisitorTest 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")); http://git-wip-us.apache.org/repos/asf/cxf/blob/0edab8dd/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorFiqlTest.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorFiqlTest.java b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorFiqlTest.java index f82530f..acfdb5d 100644 --- a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorFiqlTest.java +++ b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorFiqlTest.java @@ -236,8 +236,24 @@ public class JPATypedQueryVisitorFiqlTest extends AbstractJPATypedQueryVisitorTe assertEquals("Street2", book.getAddress().getStreet()); } + + @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()); http://git-wip-us.apache.org/repos/asf/cxf/blob/0edab8dd/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorODataTest.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorODataTest.java b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorODataTest.java index bf10043..518ddf7 100644 --- a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorODataTest.java +++ b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/jpa/JPATypedQueryVisitorODataTest.java @@ -205,10 +205,25 @@ public class JPATypedQueryVisitorODataTest extends AbstractJPATypedQueryVisitorT Book book = books.get(0); assertTrue(10 == book.getId()); assertEquals("Street2", book.getAddress().getStreet()); - } @Test + public void testEqualsAddressQuery4() throws Exception { + Map<String, String> beanPropertiesMap = new HashMap<String, String>(); + beanPropertiesMap.put("street", "address.street"); + List<Book> books = queryBooks("street eq '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 eq 'Street&''3'", null, beanPropertiesMap); + assertEquals(1, books.size()); + } + + @Test public void testEqualsOwnerNameQuery() throws Exception { List<Book> books = queryBooks("ownerInfo.name.name eq 'Fred'"); assertEquals(1, books.size());