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 2010/03/28 16:14:57 UTC

svn commit: r928401 - 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/exp/

Author: aadamchik
Date: Sun Mar 28 14:14:57 2010
New Revision: 928401

URL: http://svn.apache.org/viewvc?rev=928401&view=rev
Log:
CAY-1111 Expression.toEJBQL() support for single-column PK Persistent objects

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/ASTScalar.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.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=928401&r1=928400&r2=928401&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 Sun Mar 28 14:14:57 2010
@@ -47,6 +47,7 @@ Date: 
 
 Bug Fixes Since 3.0RC2:
 
+CAY-1111 Expression.toEJBQL() support for single-column PK Persistent objects
 CAY-1378 Error unsetting to-many DataObject property
 	(this also reverts CAY-1009)
 CAY-1379 Error resolving fault, no matching row exists in the database

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTScalar.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTScalar.java?rev=928401&r1=928400&r2=928401&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTScalar.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTScalar.java Sun Mar 28 14:14:57 2010
@@ -21,6 +21,9 @@ package org.apache.cayenne.exp.parser;
 
 import java.io.PrintWriter;
 
+import org.apache.cayenne.Cayenne;
+import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.Persistent;
 import org.apache.cayenne.exp.Expression;
 
 /**
@@ -29,6 +32,7 @@ import org.apache.cayenne.exp.Expression
  * @since 1.1
  */
 public class ASTScalar extends SimpleNode {
+
     protected Object value;
 
     /**
@@ -66,13 +70,27 @@ public class ASTScalar extends SimpleNod
     public void encodeAsString(PrintWriter pw) {
         SimpleNode.encodeScalarAsString(pw, value, '\"');
     }
-    
+
     /**
      * @since 3.0
      */
     @Override
     public void encodeAsEJBQL(PrintWriter pw, String rootId) {
-        SimpleNode.encodeScalarAsString(pw, value, '\'');
+
+        // TODO: see CAY-1111
+        // Persistent processing is a hack for a rather special case of a single column PK
+        // object.. full implementation pending...
+        Object scalar = value;
+        if (scalar instanceof Persistent) {
+
+            Persistent persistent = (Persistent) scalar;
+            ObjectId id = persistent.getObjectId();
+            if (!id.isTemporary() && id.getIdSnapshot().size() == 1) {
+                scalar = id.getIdSnapshot().values().iterator().next();
+            }
+        }
+
+        SimpleNode.encodeScalarAsString(pw, scalar, '\'');
     }
 
     public void setValue(Object value) {
@@ -85,7 +103,8 @@ public class ASTScalar extends SimpleNod
 
     @Override
     protected String getExpressionOperator(int index) {
-        throw new UnsupportedOperationException(
-            "No operator for '" + ExpressionParserTreeConstants.jjtNodeName[id] + "'");
+        throw new UnsupportedOperationException("No operator for '"
+                + ExpressionParserTreeConstants.jjtNodeName[id]
+                + "'");
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java?rev=928401&r1=928400&r2=928401&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java Sun Mar 28 14:14:57 2010
@@ -23,6 +23,9 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Collections;
 
+import org.apache.art.Artist;
+import org.apache.cayenne.ObjectId;
+
 import junit.framework.TestCase;
 
 /**
@@ -104,4 +107,22 @@ public class ExpressionTest extends Test
 
         assertEquals("x.artistName in ('a', 'b', 'c')", ejbql);
     }
+    
+    public void testEncodeAsEJBQL_PersistentParamater() {
+        
+        Artist a = new Artist();
+        ObjectId aId = new ObjectId("Artist", Artist.ARTIST_ID_PK_COLUMN, 1);
+        a.setObjectId(aId);
+
+        Expression e = ExpressionFactory.matchExp("artist", a);
+
+        StringWriter buffer = new StringWriter();
+        PrintWriter pw = new PrintWriter(buffer);
+        e.encodeAsEJBQL(pw, "x");
+        pw.close();
+        buffer.flush();
+        String ejbql = buffer.toString();
+
+        assertEquals("x.artist = 1", ejbql);
+    }
 }