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


Reply via email to