Author: aadamchik Date: Sun Jan 30 01:43:20 2011 New Revision: 1065162 URL: http://svn.apache.org/viewvc?rev=1065162&view=rev Log: CAY-1529 Cayenne should support enum types in qualifier statements/expression handling
implementing tostring conversion Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLEnum1.java - copied, changed from r1065007, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java 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/SimpleNode.java cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.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=1065162&r1=1065161&r2=1065162&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 Jan 30 01:43:20 2011 @@ -27,6 +27,7 @@ CAY-1515 runtime relationships are not i CAY-1516 CayenneModeler - DataMap deletion doesn't delete DataMap XML CAY-1517 CayenneModeler - recent projects ordering is random CAY-1528 Undo CAY-1213 +CAY-1529 Cayenne should support enum types in qualifier statements/expression handling ---------------------------------- Release: 3.1 M1 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=1065162&r1=1065161&r2=1065162&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 Sun Jan 30 01:43:20 2011 @@ -62,14 +62,22 @@ public abstract class SimpleNode extends // encode only ObjectId for Persistent, ensure that the order of keys is // predictable.... + + // TODO: should we use UUID here? if (scalar instanceof Persistent) { ObjectId id = ((Persistent) scalar).getObjectId(); - if (id != null) { - scalar = id; - } + Object encode = (id != null) ? id : scalar; + encodeAsEscapedString(pw, String.valueOf(encode)); + } + else if (scalar instanceof Enum<?>) { + Enum<?> e = (Enum<?>) scalar; + pw.print("enum:"); + pw.print(e.getClass().getName() + "." + e.name()); + } + else { + encodeAsEscapedString(pw, String.valueOf(scalar)); } - encodeAsEscapedString(pw, String.valueOf(scalar)); if (quote) { pw.print(quoteChar); } @@ -130,9 +138,10 @@ public abstract class SimpleNode extends } protected abstract String getExpressionOperator(int index); - + /** - * Returns operator for ebjql statements, which can differ for Cayenne expression operator + * Returns operator for ebjql statements, which can differ for Cayenne expression + * operator */ protected String getEJBQLExpressionOperator(int index) { return getExpressionOperator(index); @@ -319,8 +328,8 @@ public abstract class SimpleNode extends } protected Object evaluateChild(int index, Object o) throws Exception { - SimpleNode node = (SimpleNode) jjtGetChild(index); - return node != null ? node.evaluate(o) : null; + SimpleNode node = (SimpleNode) jjtGetChild(index); + return node != null ? node.evaluate(o) : null; } @Override @@ -360,7 +369,7 @@ public abstract class SimpleNode extends pw.print(')'); } } - + /** * Encodes child of this node with specified index to EJBQL */ @@ -371,7 +380,7 @@ public abstract class SimpleNode extends pw.print(getEJBQLExpressionOperator(i)); pw.print(' '); } - + if (children[i] == null) { pw.print("null"); } Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt?rev=1065162&r1=1065161&r2=1065162&view=diff ============================================================================== --- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt (original) +++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt Sun Jan 30 01:43:20 2011 @@ -933,7 +933,7 @@ void enum_primary() : { } void enum_literal() : { } { - path() + "enum:" path() } Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLEnum1.java (from r1065007, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java) URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLEnum1.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLEnum1.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java&r1=1065007&r2=1065162&rev=1065162&view=diff ============================================================================== --- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java (original) +++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLEnum1.java Sun Jan 30 01:43:20 2011 @@ -18,16 +18,7 @@ ****************************************************************/ package org.apache.cayenne.ejbql; -import org.apache.cayenne.unit.CayenneCase; +public enum EJBQLEnum1 { -public class EJBQLExpressionTest extends CayenneCase { - - public void testDbPath() { - - EJBQLParser parser = EJBQLParserFactory.getParser(); - - EJBQLExpression select = parser - .parse("select p from Painting p WHERE db:p.toArtist.ARTIST_NAME = 'a'"); - assertNotNull(select); - } + X, Y, Z } Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java?rev=1065162&r1=1065161&r2=1065162&view=diff ============================================================================== --- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java (original) +++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLExpressionTest.java Sun Jan 30 01:43:20 2011 @@ -30,4 +30,12 @@ public class EJBQLExpressionTest extends .parse("select p from Painting p WHERE db:p.toArtist.ARTIST_NAME = 'a'"); assertNotNull(select); } + + public void testEnumPath() { + EJBQLParser parser = EJBQLParserFactory.getParser(); + + EJBQLExpression select = parser + .parse("select p from Painting p WHERE p.toArtist.ARTIST_NAME = enum:org.apache.cayenne.ejbql.EJBQLEnum1.X"); + assertNotNull(select); + } } 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=1065162&r1=1065161&r2=1065162&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 Jan 30 01:43:20 2011 @@ -172,4 +172,44 @@ public class ExpressionTest extends Test assertEquals("x.artistName <> 'bla'", ejbql); } + + public void testEncodeAsEJBQL_Enum() { + + Expression e = Expression + .fromString("a = enum:org.apache.cayenne.exp.ExpEnum1.THREE"); + + StringWriter buffer = new StringWriter(); + PrintWriter pw = new PrintWriter(buffer); + e.encodeAsEJBQL(pw, "x"); + pw.close(); + buffer.flush(); + String ejbql = buffer.toString(); + + assertEquals("x.a = enum:org.apache.cayenne.exp.ExpEnum1.THREE", ejbql); + } + + public void testEncodeAsString_StringLiteral() { + Expression e1 = Expression.fromString("a = 'abc'"); + + StringWriter buffer = new StringWriter(); + PrintWriter pw = new PrintWriter(buffer); + e1.encodeAsString(pw); + pw.close(); + buffer.flush(); + + assertEquals("a = \"abc\"", buffer.toString()); + } + + public void testEncodeAsString_Enum() { + Expression e1 = Expression + .fromString("a = enum:org.apache.cayenne.exp.ExpEnum1.TWO"); + + StringWriter buffer = new StringWriter(); + PrintWriter pw = new PrintWriter(buffer); + e1.encodeAsString(pw); + pw.close(); + buffer.flush(); + + assertEquals("a = enum:org.apache.cayenne.exp.ExpEnum1.TWO", buffer.toString()); + } }