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/12 16:06:17 UTC
svn commit: r898355 - in /cayenne/main/branches/STABLE-3.0:
docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parse...
Author: andrey
Date: Tue Jan 12 15:06:16 2010
New Revision: 898355
URL: http://svn.apache.org/viewvc?rev=898355&view=rev
Log:
CAY-1313 EJBQL: Implement support for relationship-ending paths in WHERE clause
Modified:
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.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/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
Modified: cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=898355&r1=898354&r2=898355&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt Tue Jan 12 15:06:16 2010
@@ -21,6 +21,7 @@
Bug Fixes Since 3.0RC1:
CAY-1298 String no longer works in query when column type is Integer
+CAY-1313 EJBQL: Implement support for relationship-ending paths in WHERE clause
CAY-1349 SelectQuery 'fetchSize' setting is not propagated to disjoint prefetches
CAY-1351 EntityResolver.getEmbeddable(...) always returns null
CAY-1353 warning "attribute.name" contains invalid character: . in Code generation dialog
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java?rev=898355&r1=898354&r2=898355&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java Tue Jan 12 15:06:16 2010
@@ -172,9 +172,12 @@
EJBQLIdentifier ident = new EJBQLIdentifier(0);
ident.text = pathRelationshipString;
- resultComponents.remove(pathsInSelect.get(path).intValue());
- resultComponents.add(pathsInSelect.get(path).intValue(), ident);
- rootId = pathRelationshipString;
+ Integer integer = pathsInSelect.get(path);
+ if (integer!=null) {
+ resultComponents.remove(integer.intValue());
+ resultComponents.add(pathsInSelect.get(path).intValue(), ident);
+ rootId = pathRelationshipString;
+ }
};
elenent++;
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.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/ASTEqual.java?rev=898355&r1=898354&r2=898355&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java Tue Jan 12 15:06:16 2010
@@ -136,6 +136,15 @@
protected String getExpressionOperator(int index) {
return "=";
}
+
+ @Override
+ protected String getEJBQLExpressionOperator(int index) {
+ if (jjtGetChild(1) instanceof ASTScalar && ((ASTScalar) jjtGetChild(1)).getValue() == null) {
+ //for ejbql, we need "is null" instead of "= null"
+ return "is";
+ }
+ return getExpressionOperator(index);
+ }
@Override
public int getType() {
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.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/ASTList.java?rev=898355&r1=898354&r2=898355&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java Tue Jan 12 15:06:16 2010
@@ -125,7 +125,7 @@
if ((values != null) && (values.length > 0)) {
for (int i = 0; i < values.length; ++i) {
if (i > 0) {
- pw.print(getExpressionOperator(i));
+ pw.print(getEJBQLExpressionOperator(i));
pw.print(' ');
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.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/ASTNotEqual.java?rev=898355&r1=898354&r2=898355&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java Tue Jan 12 15:06:16 2010
@@ -69,6 +69,15 @@
protected String getExpressionOperator(int index) {
return "!=";
}
+
+ @Override
+ protected String getEJBQLExpressionOperator(int index) {
+ if (jjtGetChild(1) instanceof ASTScalar && ((ASTScalar) jjtGetChild(1)).getValue() == null) {
+ //for ejbql, we need "is not null" instead of "!= null"
+ return "is not";
+ }
+ return getExpressionOperator(index);
+ }
@Override
public int getType() {
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=898355&r1=898354&r2=898355&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 Tue Jan 12 15:06:16 2010
@@ -130,6 +130,13 @@
}
protected abstract String getExpressionOperator(int index);
+
+ /**
+ * Returns operator for ebjql statements, which can differ for Cayenne expression operator
+ */
+ protected String getEJBQLExpressionOperator(int index) {
+ return getExpressionOperator(index);
+ }
@Override
protected boolean pruneNodeForPrunedChild(Object prunedChild) {
@@ -349,7 +356,7 @@
for (int i = 0; i < children.length; ++i) {
if (i > 0) {
pw.print(' ');
- pw.print(getExpressionOperator(i));
+ pw.print(getEJBQLExpressionOperator(i));
pw.print(' ');
}
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=898355&r1=898354&r2=898355&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 Tue Jan 12 15:06:16 2010
@@ -29,6 +29,8 @@
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.access.DataContext;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
+import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.unit.CayenneCase;
import org.apache.cayenne.util.XMLEncoder;
@@ -278,4 +280,14 @@
"select g from Gallery g inner join g.paintingArray p where p.toArtist.artistName like '%a%'");
context.performQuery(query);
}
+
+ //test for CAY-1313
+ public void testRelationshipWhereClauseAndToEJBQL() throws Exception {
+ ObjectContext context = createDataContext();
+
+ Expression exp = ExpressionFactory.matchExp(Painting.TO_GALLERY_PROPERTY, null);
+ EJBQLQuery query = new EJBQLQuery("select p.toArtist from Painting p where " + exp.toEJBQL("p"));
+
+ context.performQuery(query);
+ }
}