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:18:54 UTC

svn commit: r898362 - in /cayenne/main/trunk: docs/doc/src/main/resources/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/

Author: andrey
Date: Tue Jan 12 15:18:44 2010
New Revision: 898362

URL: http://svn.apache.org/viewvc?rev=898362&view=rev
Log:
CAY-1313 EJBQL: Implement support for relationship-ending paths in WHERE clause

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=898362&r1=898361&r2=898362&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Tue Jan 12 15:18:44 2010
@@ -45,8 +45,8 @@
 CAY-1326 Document Cayenne Embeddables Feature
 
 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/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java?rev=898362&r1=898361&r2=898362&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTEqual.java Tue Jan 12 15:18:44 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/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java?rev=898362&r1=898361&r2=898362&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTList.java Tue Jan 12 15:18:44 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/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java?rev=898362&r1=898361&r2=898362&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotEqual.java Tue Jan 12 15:18:44 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/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java?rev=898362&r1=898361&r2=898362&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java Tue Jan 12 15:18:44 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/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java?rev=898362&r1=898361&r2=898362&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java Tue Jan 12 15:18:44 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;
@@ -319,4 +321,13 @@
         assertEquals(1, paintings.size());
         assertSame(p, paintings.get(0));
     }
+    
+    public void testRelationshipWhereClause2() 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);
+    }
 }