You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/12/09 09:07:59 UTC
cayenne git commit: CAY-1978 ESCAPE clause should be included in LIKE
parenthesis
Repository: cayenne
Updated Branches:
refs/heads/master 2d8ffba39 -> 4e88f9afd
CAY-1978 ESCAPE clause should be included in LIKE parenthesis
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/4e88f9af
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/4e88f9af
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/4e88f9af
Branch: refs/heads/master
Commit: 4e88f9afdc089a83776e24743a03095f706d26a7
Parents: 2d8ffba
Author: aadamchik <aa...@apache.org>
Authored: Tue Dec 9 10:42:31 2014 +0300
Committer: aadamchik <aa...@apache.org>
Committed: Tue Dec 9 11:07:49 2014 +0300
----------------------------------------------------------------------
.../translator/select/QualifierTranslator.java | 52 ++++++++++----------
.../org/apache/cayenne/query/SelectQueryIT.java | 29 +++++++++++
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
3 files changed, 56 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4e88f9af/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java
index 35d09d6..4fa0fcc 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QualifierTranslator.java
@@ -419,32 +419,32 @@ public class QualifierTranslator extends QueryAssemblerHelper implements Travers
*/
public void endNode(Expression node, Expression parentNode) {
- try {
- // check if we need to use objectMatchTranslator to finish building the
- // expression
- if (node.getOperandCount() == 2 && matchingObject) {
- appendObjectMatch();
- }
-
- boolean parenthesisNeeded = parenthesisNeeded(node, parentNode);
- boolean likeIgnoreCase = (node.getType() == Expression.LIKE_IGNORE_CASE || node
- .getType() == Expression.NOT_LIKE_IGNORE_CASE);
- boolean isPatternMatchNode = PatternMatchNode.class.isAssignableFrom(node
- .getClass());
-
- if (parenthesisNeeded)
- out.append(')');
-
- if (isPatternMatchNode && !likeIgnoreCase)
- appendLikeEscapeCharacter((PatternMatchNode) node);
-
- if (likeIgnoreCase && !caseInsensitive)
- out.append(')');
-
- if (isPatternMatchNode && likeIgnoreCase)
- appendLikeEscapeCharacter((PatternMatchNode) node);
-
- }
+ try {
+ // check if we need to use objectMatchTranslator to finish building
+ // the
+ // expression
+ if (node.getOperandCount() == 2 && matchingObject) {
+ appendObjectMatch();
+ }
+
+ boolean parenthesisNeeded = parenthesisNeeded(node, parentNode);
+ boolean likeIgnoreCase = (node.getType() == Expression.LIKE_IGNORE_CASE || node.getType() == Expression.NOT_LIKE_IGNORE_CASE);
+ boolean isPatternMatchNode = PatternMatchNode.class.isAssignableFrom(node.getClass());
+
+ // closing UPPER parenthesis
+ if (likeIgnoreCase && !caseInsensitive) {
+ out.append(')');
+ }
+
+ if (isPatternMatchNode) {
+ appendLikeEscapeCharacter((PatternMatchNode) node);
+ }
+
+ // closing LIKE parenthesis
+ if (parenthesisNeeded) {
+ out.append(')');
+ }
+ }
catch (IOException ioex) {
throw new CayenneRuntimeException("Error appending content", ioex);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4e88f9af/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
index f8c9a1e..8421310 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
@@ -295,6 +295,35 @@ public class SelectQueryIT extends ServerCase {
List<?> objects = context.performQuery(query);
assertEquals(1, objects.size());
}
+
+ @Test
+ public void testSelectLikeSingleWildcardMatchAndEscape_AndOtherCriteria() throws Exception {
+
+ createArtistsWildcardDataSet();
+
+ // CAY-1978 - combining LIKE..ESCAPE with another clause generated bad
+ // syntax
+ SelectQuery<Artist> query = new SelectQuery<Artist>(Artist.class);
+ query.andQualifier(ExpressionFactory.likeExp("artistName", "=_%", '='));
+ query.andQualifier(Artist.ARTIST_NAME.eq("_X"));
+
+ List<?> objects = context.performQuery(query);
+ assertEquals(1, objects.size());
+ }
+
+ @Test
+ public void testSelectLikeSingleWildcardMatchIgnoreCaseAndEscape_AndOtherCriteria() throws Exception {
+
+ createArtistsWildcardDataSet();
+
+ // CAY-1978 - combining LIKE..ESCAPE with another clause generated bad SQL
+ SelectQuery<Artist> query = new SelectQuery<Artist>(Artist.class);
+ query.andQualifier(ExpressionFactory.likeIgnoreCaseExp("artistName", "=_%", '='));
+ query.andQualifier(Artist.ARTIST_NAME.eq("_X"));
+
+ List<?> objects = context.performQuery(query);
+ assertEquals(1, objects.size());
+ }
@Test
public void testSelectLikeMultipleWildcardMatch() throws Exception {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4e88f9af/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 8ea6f41..9ef556e 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -116,6 +116,7 @@ CAY-1943 XML file not deleted when a DataMap is deleted from the project
CAY-1961 Fix RemoveAction for DataMaps in ProjectTree
CAY-1964 Fix convertAdditionalDataMaps() in CayenneGeneratorMojo.java
CAY-1973 error while generating classes
+CAY-1978 ESCAPE clause should be included in LIKE parenthesis
----------------------------------
Release: 3.2M1