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);
+ }
}