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