Author: aadamchik
Date: Tue Aug 14 14:56:22 2007
New Revision: 565938

URL: http://svn.apache.org/viewvc?view=rev&rev=565938
Log:
CAY-847 Expression NULL handling

Modified:
    
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java
    
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLike.java
    
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java
    
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
    
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java?view=diff&rev=565938&r1=565937&r2=565938
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java
 Tue Aug 14 14:56:22 2007
@@ -32,6 +32,7 @@
 import java.util.Map;
 
 import org.apache.commons.collections.Transformer;
+import org.apache.cayenne.exp.parser.ASTScalar;
 import org.apache.cayenne.exp.parser.ExpressionParser;
 import org.apache.cayenne.exp.parser.ParseException;
 import org.apache.cayenne.util.ConversionUtil;
@@ -277,9 +278,11 @@
                     Object value = parameters.get(name);
 
                     // wrap lists (for now); also support null parameters
+                    // TODO: andrus 8/14/2007 - shouldn't we also wrap 
non-null object
+                    // values in ASTScalars?
                     return (value != null)
                             ? ExpressionFactory.wrapPathOperand(value)
-                            : null;
+                            : new ASTScalar(null);
                 }
             }
         };

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLike.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLike.java?view=diff&rev=565938&r1=565937&r2=565938
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLike.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLike.java
 Tue Aug 14 14:56:22 2007
@@ -39,7 +39,7 @@
     public ASTLike(ASTPath path, Object pattern) {
         super(ExpressionParserTreeConstants.JJTLIKE, false);
         jjtAddChild(path, 0);
-        jjtAddChild(wrapChild(pattern), 1);
+        jjtAddChild(new ASTScalar(pattern), 1);
         connectChildren();
     }
 

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java?view=diff&rev=565938&r1=565937&r2=565938
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLikeIgnoreCase.java
 Tue Aug 14 14:56:22 2007
@@ -39,7 +39,7 @@
     public ASTLikeIgnoreCase(ASTPath path, Object pattern) {
         super(ExpressionParserTreeConstants.JJTLIKEIGNORECASE, true);
         jjtAddChild(path, 0);
-        jjtAddChild(wrapChild(pattern), 1);
+        jjtAddChild(new ASTScalar(pattern), 1);
         connectChildren();
     }
 

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java?view=diff&rev=565938&r1=565937&r2=565938
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/exp/parser/SimpleNode.java
 Tue Aug 14 14:56:22 2007
@@ -181,7 +181,12 @@
                     pw.print(' ');
                 }
 
-                ((SimpleNode) children[i]).encodeAsString(pw);
+                if (children[i] == null) {
+                    pw.print("null");
+                }
+                else {
+                    ((SimpleNode) children[i]).encodeAsString(pw);
+                }
             }
         }
 
@@ -200,6 +205,8 @@
     }
 
     protected Node wrapChild(Object child) {
+        // when child is null, there's no way of telling whether this is a 
scalar or
+        // not... fuzzy... maybe we should stop using this method - it is too 
generic
         return (child instanceof Node || child == null) ? (Node) child : new 
ASTScalar(
                 child);
     }

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java?view=diff&rev=565938&r1=565937&r2=565938
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
 Tue Aug 14 14:56:22 2007
@@ -19,6 +19,8 @@
 
 package org.apache.cayenne.exp;
 
+import java.util.Collections;
+
 import junit.framework.TestCase;
 
 /**
@@ -29,5 +31,12 @@
     public void testFromStringLong() {
         Expression e = Expression.fromString("216201000180L");
         assertEquals(new Long(216201000180L), e.evaluate(new Object()));
+    }
+
+    public void testExpWithParametersNullHandling_CAY847() {
+        Expression e = Expression.fromString("X = $x");
+
+        e = e.expWithParameters(Collections.singletonMap("x", null));
+        assertEquals("X = null", e.toString());
     }
 }


Reply via email to