Repository: cayenne Updated Branches: refs/heads/master a8960c559 -> 38a368f70
CAY-2284 Expression likeIgnoreCase can't handle unicode chars in in-memory evaluation Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/38a368f7 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/38a368f7 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/38a368f7 Branch: refs/heads/master Commit: 38a368f709b0879b117bc674760c34e8d956cbfe Parents: a8960c5 Author: Nikita Timofeev <[email protected]> Authored: Thu Apr 27 10:16:30 2017 +0300 Committer: Nikita Timofeev <[email protected]> Committed: Thu Apr 27 10:16:30 2017 +0300 ---------------------------------------------------------------------- .../main/java/org/apache/cayenne/util/Util.java | 2 +- .../apache/cayenne/exp/parser/ASTEqualTest.java | 21 ++++++++++++++++++++ .../exp/parser/ASTLikeIgnoreCaseTest.java | 21 ++++++++++++++++++++ .../apache/cayenne/exp/parser/ASTLikeTest.java | 21 ++++++++++++++++++++ docs/doc/src/main/resources/RELEASE-NOTES.txt | 2 ++ 5 files changed, 66 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/38a368f7/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java b/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java index ba30b97..7dfd57e 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java @@ -485,7 +485,7 @@ public class Util { public static Pattern sqlPatternToPattern(String pattern, boolean ignoreCase) { String preprocessed = RegexUtil.sqlPatternToRegex(pattern); - int flag = (ignoreCase) ? Pattern.CASE_INSENSITIVE : 0; + int flag = (ignoreCase) ? Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE : 0; return Pattern.compile(preprocessed, flag); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/38a368f7/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTEqualTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTEqualTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTEqualTest.java index 5579dd5..207680a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTEqualTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTEqualTest.java @@ -98,4 +98,25 @@ public class ASTEqualTest { p.setEstimatedPrice(bd4); assertFalse(equalTo.match(p)); } + + @Test + public void testEvaluateUnicodeChars() { + ASTEqual equalToFull = new ASTEqual(new ASTObjPath("artistName"), "à бçÄþ"); + ASTEqual equalToSimple = new ASTEqual(new ASTObjPath("artistName"), "à Äç"); + + Artist noMatch = new Artist(); + noMatch.setArtistName("agc"); + assertFalse(equalToSimple.match(noMatch)); + assertFalse(equalToFull.match(noMatch)); + + Artist matchSimple = new Artist(); + matchSimple.setArtistName("à Äç"); + assertTrue(equalToSimple.match(matchSimple)); + assertFalse(equalToFull.match(matchSimple)); + + Artist matchFull = new Artist(); + matchFull.setArtistName("à бçÄþ"); + assertFalse(equalToSimple.match(matchFull)); + assertTrue(equalToFull.match(matchFull)); + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/38a368f7/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java index 55946cf..d0f566f 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java @@ -85,6 +85,27 @@ public class ASTLikeIgnoreCaseTest { assertTrue("Failed: " + like, notLike.match(match2)); } + @Test + public void testEvaluateUnicode() { + Expression like = new ASTLikeIgnoreCase(new ASTObjPath("artistName"), "ÃÐÄÃ%"); + Expression notLike = new ASTNotLikeIgnoreCase(new ASTObjPath("artistName"), "ÃÐÄÃ%"); + + Artist noMatch1 = new Artist(); + noMatch1.setArtistName("à bÄþ"); + assertFalse(like.match(noMatch1)); + assertTrue(notLike.match(noMatch1)); + + Artist match1 = new Artist(); + match1.setArtistName("à бÄþd"); + assertTrue("Failed: " + like, like.match(match1)); + assertFalse("Failed: " + notLike, notLike.match(match1)); + + Artist match2 = new Artist(); + match2.setArtistName("à ÐÄÃ"); + assertTrue("Failed: " + like, like.match(match2)); + assertFalse("Failed: " + notLike, notLike.match(match2)); + } + private Painting createPainting(String name) { Painting p = new Painting(); p.setPaintingTitle(name); http://git-wip-us.apache.org/repos/asf/cayenne/blob/38a368f7/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeTest.java index 48d6890..f908d53 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/parser/ASTLikeTest.java @@ -92,4 +92,25 @@ public class ASTLikeTest { assertTrue("Failed: " + like, like.match(match)); } + @Test + public void testEvaluateUnicode() { + Expression like = new ASTLike(new ASTObjPath("artistName"), "à бÄþ%"); + Expression notLike = new ASTNotLike(new ASTObjPath("artistName"), "à бÄþ%"); + + Artist noMatch1 = new Artist(); + noMatch1.setArtistName("à bÄþd"); + assertFalse(like.match(noMatch1)); + assertTrue(notLike.match(noMatch1)); + + Artist match1 = new Artist(); + match1.setArtistName("à бÄþ"); + assertTrue("Failed: " + like, like.match(match1)); + assertFalse("Failed: " + notLike, notLike.match(match1)); + + Artist match2 = new Artist(); + match2.setArtistName("à бÄþa"); + assertTrue("Failed: " + like, like.match(match2)); + assertFalse("Failed: " + notLike, notLike.match(match2)); + } + } http://git-wip-us.apache.org/repos/asf/cayenne/blob/38a368f7/docs/doc/src/main/resources/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt index 85c8871..674903a 100644 --- a/docs/doc/src/main/resources/RELEASE-NOTES.txt +++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt @@ -55,6 +55,8 @@ CAY-2275 Documentation: tutorial is out of sync with 4.0.M5 version CAY-2276 PrePersist listener registered as PostPersist in LifecycleCallbackRegistry.addListener(Class<?>, LifecycleListener) CAY-2279 cdbimport: skip PK comparison for VIEWs CAY-2281 ObjEntity attribute overrides are never deleted +CAY-2284 Expression likeIgnoreCase can't handle unicode chars in in-memory evaluation + ---------------------------------- Release: 4.0.M5 Date: March 6, 2017
