You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by an...@apache.org on 2010/01/21 23:25:55 UTC
svn commit: r901894 - in
/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/exp/parser/
main/jjtree/org/apache/cayenne/ejbql/
test/java/org/apache/cayenne/exp/parser/ test/java/org/apache/cayenne/qu...
Author: andrey
Date: Thu Jan 21 22:25:54 2010
New Revision: 901894
URL: http://svn.apache.org/viewvc?rev=901894&view=rev
Log:
CAY-1369 EJBQL Fix likeIgnoreCase issues
Added:
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/IgnoreCaseNode.java
Modified:
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotLikeIgnoreCase.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java?rev=901894&r1=901893&r2=901894&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java Thu Jan 21 22:25:54 2010
@@ -19,8 +19,6 @@
package org.apache.cayenne.exp.parser;
-import java.io.PrintWriter;
-
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.util.ConversionUtil;
@@ -28,7 +26,7 @@
* "Case insensitive like" expression.
*
*/
-public class ASTLikeIgnoreCase extends PatternMatchNode {
+public class ASTLikeIgnoreCase extends IgnoreCaseNode {
ASTLikeIgnoreCase(int id) {
super(id, true);
}
@@ -81,22 +79,4 @@
protected String getEJBQLExpressionOperator(int index) {
return "like";
}
-
- @Override
- protected void encodeChildAsEJBQL(PrintWriter pw, String rootId, int index) {
- if (index > 0) {
- pw.print(' ');
- pw.print(getEJBQLExpressionOperator(index));
- pw.print(' ');
- }
-
- if (children[index] == null) {
- pw.print("null");
- }
- else {
- pw.print("upper(");
- ((SimpleNode) children[index]).encodeAsEJBQL(pw, rootId);
- pw.print(")");
- }
- }
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotLikeIgnoreCase.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotLikeIgnoreCase.java?rev=901894&r1=901893&r2=901894&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotLikeIgnoreCase.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotLikeIgnoreCase.java Thu Jan 21 22:25:54 2010
@@ -27,7 +27,7 @@
* "Not like, ignore case" expression.
*
*/
-public class ASTNotLikeIgnoreCase extends PatternMatchNode {
+public class ASTNotLikeIgnoreCase extends IgnoreCaseNode {
ASTNotLikeIgnoreCase(int id) {
super(id, true);
}
@@ -70,6 +70,11 @@
protected String getExpressionOperator(int index) {
return "not likeIgnoreCase";
}
+
+ @Override
+ protected String getEJBQLExpressionOperator(int index) {
+ return "not like";
+ }
@Override
public int getType() {
Added: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/IgnoreCaseNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/IgnoreCaseNode.java?rev=901894&view=auto
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/IgnoreCaseNode.java (added)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/IgnoreCaseNode.java Thu Jan 21 22:25:54 2010
@@ -0,0 +1,48 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.exp.parser;
+
+import java.io.PrintWriter;
+
+import org.apache.cayenne.exp.ExpressionException;
+
+/**
+ * Common node for likeIgnoreCase and notLikeIgnoreCase
+ */
+abstract class IgnoreCaseNode extends PatternMatchNode {
+ IgnoreCaseNode(int i, boolean ignoringCase) {
+ super(i, ignoringCase);
+ }
+
+ @Override
+ protected void encodeChildrenAsEJBQL(PrintWriter pw, String rootId) {
+ //with like, first expression is always path, second is a literal, which must be uppercased
+ pw.print("upper(");
+ ((SimpleNode) children[0]).encodeAsEJBQL(pw, rootId);
+ pw.print(") ");
+ pw.print(getEJBQLExpressionOperator(0));
+ pw.print(" ");
+
+ Object literal = ((ASTScalar) children[1]).getValue();
+ if (!(literal instanceof String)) {
+ throw new ExpressionException("Literal value should be a string");
+ }
+ SimpleNode.encodeScalarAsString(pw, ((String) literal).toUpperCase(), '\'');
+ }
+}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java?rev=901894&r1=901893&r2=901894&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java Thu Jan 21 22:25:54 2010
@@ -353,9 +353,7 @@
}
if ((children != null) && (children.length > 0)) {
- for (int i = 0; i < children.length; ++i) {
- encodeChildAsEJBQL(pw, rootId, i);
- }
+ encodeChildrenAsEJBQL(pw, rootId);
}
if (parent != null) {
@@ -366,18 +364,20 @@
/**
* Encodes child of this node with specified index to EJBQL
*/
- protected void encodeChildAsEJBQL(PrintWriter pw, String rootId, int index) {
- if (index > 0) {
- pw.print(' ');
- pw.print(getEJBQLExpressionOperator(index));
- pw.print(' ');
- }
-
- if (children[index] == null) {
- pw.print("null");
- }
- else {
- ((SimpleNode) children[index]).encodeAsEJBQL(pw, rootId);
+ protected void encodeChildrenAsEJBQL(PrintWriter pw, String rootId) {
+ for (int i = 0; i < children.length; ++i) {
+ if (i > 0) {
+ pw.print(' ');
+ pw.print(getEJBQLExpressionOperator(i));
+ pw.print(' ');
+ }
+
+ if (children[i] == null) {
+ pw.print("null");
+ }
+ else {
+ ((SimpleNode) children[i]).encodeAsEJBQL(pw, rootId);
+ }
}
}
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt?rev=901894&r1=901893&r2=901894&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt Thu Jan 21 22:25:54 2010
@@ -1208,7 +1208,7 @@
void pattern_value() #PatternValue : { }
{
- string_expression()
+ input_parameter() | string_literal()
[(<ESCAPE> escape_character())]
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java?rev=901894&r1=901893&r2=901894&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCaseTest.java Thu Jan 21 22:25:54 2010
@@ -26,6 +26,6 @@
public class ASTLikeIgnoreCaseTest extends TestCase {
public void testToEJBQL() {
Expression like = ExpressionFactory.likeIgnoreCaseExp("a", "%b%");
- assertEquals(like.toEJBQL("p"), "upper(p.a) like upper('%b%')");
+ assertEquals(like.toEJBQL("p"), "upper(p.a) like '%B%'");
}
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java?rev=901894&r1=901893&r2=901894&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java Thu Jan 21 22:25:54 2010
@@ -297,19 +297,4 @@
context.performQuery(query);
}
-
- public void testLikeIgnoreCase() throws Exception {
- deleteTestData();
-
- ObjectContext context = createDataContext();
-
- Artist a = context.newObject(Artist.class);
- a.setArtistName("testLikeIgnoreCase");
- context.commitChanges();
-
- EJBQLQuery query = new EJBQLQuery("select a from Artist a where upper(a.artistName) " +
- "like upper('%likeignore%')");
-
- assertEquals(context.performQuery(query).size(), 1);
- }
}