diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index c20a559c6..f362066d2 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -185,7 +185,7 @@ EclipseLink Repo - http://mirrors.ibiblio.org/pub/mirrors/eclipse/rt/eclipselink/maven.repo + http://download.eclipse.org/rt/eclipselink/maven.repo/ true diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java index 26aa416dd..f69c18cde 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java @@ -69,10 +69,10 @@ public class JPQLTemplates extends Templates { add(Ops.ARRAY_SIZE, "size({0})"); // string - add(Ops.LIKE, "{0} like {1}",1); + add(Ops.LIKE, "{0} like {1} escape '\\'",1); add(Ops.CONCAT, "concat({0},{1})",0); - add(Ops.MATCHES, "{0} like {1}", 27); // TODO : support real regexes - add(Ops.MATCHES_IC, "{0} like {1}", 27); // TODO : support real regexes + add(Ops.MATCHES, "{0} like {1} escape '\\'", 27); // TODO : support real regexes + add(Ops.MATCHES_IC, "{0} like {1} escape '\\'", 27); // TODO : support real regexes add(Ops.LOWER, "lower({0})"); add(Ops.SUBSTR_1ARG, "substring({0},{1}+1)"); add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2})"); @@ -82,12 +82,12 @@ public class JPQLTemplates extends Templates { add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)"); add(Ops.STRING_IS_EMPTY, "length({0}) = 0"); - add(Ops.STRING_CONTAINS, "{0} like {%1%}"); - add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%}"); - add(Ops.ENDS_WITH, "{0} like {%1}"); - add(Ops.ENDS_WITH_IC, "{0l} like {%%1}"); - add(Ops.STARTS_WITH, "{0} like {1%}"); - add(Ops.STARTS_WITH_IC, "{0l} like {1%%}"); + add(Ops.STRING_CONTAINS, "{0} like {%1%} escape '\\'"); + add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%} escape '\\'"); + add(Ops.ENDS_WITH, "{0} like {%1} escape '\\'"); + add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '\\'"); + add(Ops.STARTS_WITH, "{0} like {1%} escape '\\'"); + add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '\\'"); add(Ops.INDEX_OF, "locate({1},{0}) - 1"); add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2}+1) - 1"); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java index 4b5f32a5b..8e7131314 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java @@ -165,7 +165,7 @@ public abstract class AbstractStandardTest { new Cat("Ruth123", 2, 2.0), new Cat("Felix123", 3, 3.0), new Cat("Allen123", 4, 4.0), - new Cat("Mary123", 5, 5.0))){ + new Cat("Mary_123", 5, 5.0))){ if (prev != null){ cat.addKitten(prev); } @@ -339,6 +339,11 @@ public abstract class AbstractStandardTest { public void StartsWith2(){ assertEquals(0, catQuery().where(cat.name.startsWith("X")).count()); } + + @Test + public void StartsWith3(){ + assertEquals(1, catQuery().where(cat.name.startsWith("Mary_")).count()); + } @Test public void StartsWith_IgnoreCase(){ @@ -354,6 +359,11 @@ public abstract class AbstractStandardTest { public void EndsWith2(){ assertEquals(0, catQuery().where(cat.name.endsWith("X")).count()); } + + @Test + public void EndsWith3(){ + assertEquals(1, catQuery().where(cat.name.endsWith("_123")).count()); + } @Test public void EndsWith_IgnoreCase(){ @@ -370,6 +380,11 @@ public abstract class AbstractStandardTest { assertEquals(1l, catQuery().where(cat.kittens.contains(savedCats.get(0))).count()); } + @Test + public void Contains3(){ + assertEquals(1l, catQuery().where(cat.name.contains("_")).count()); + } + @Test public void Length(){ assertEquals(6, catQuery().where(cat.name.length().gt(0)).count()); @@ -407,13 +422,13 @@ public abstract class AbstractStandardTest { @Test public void Offset(){ - List names2 = Arrays.asList("Felix123","Mary123","Ruth123","Some"); + List names2 = Arrays.asList("Felix123","Mary_123","Ruth123","Some"); assertEquals(names2, catQuery().orderBy(cat.name.asc()).offset(2).list(cat.name)); } @Test public void Limit_and_offset(){ - List names3 = Arrays.asList("Felix123","Mary123"); + List names3 = Arrays.asList("Felix123","Mary_123"); assertEquals(names3, catQuery().orderBy(cat.name.asc()).limit(2).offset(2).list(cat.name)); }