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 2013/08/03 18:19:48 UTC

svn commit: r1510030 - in /cayenne/main/trunk/framework/cayenne-core-unpublished/src: main/java/org/apache/cayenne/exp/Expression.java test/java/org/apache/cayenne/exp/ParametrizedExpressionTest.java

Author: aadamchik
Date: Sat Aug  3 16:19:48 2013
New Revision: 1510030

URL: http://svn.apache.org/r1510030
Log:
CAY-1856  Expression.expWithParameters does not work when parameters are placed in the inline collection

Modified:
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/test/java/org/apache/cayenne/exp/ParametrizedExpressionTest.java

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java?rev=1510030&r1=1510029&r2=1510030&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java Sat Aug  3 16:19:48 2013
@@ -325,6 +325,21 @@ public abstract class Expression impleme
 
             public Object transform(Object object) {
                 if (!(object instanceof ExpressionParameter)) {
+
+                    // mainly for the ASTList array child...
+                    if (object instanceof Object[]) {
+
+                        Object[] source = (Object[]) object;
+                        int len = source.length;
+                        Object[] target = new Object[len];
+
+                        for (int i = 0; i < len; i++) {
+                            target[i] = transform(source[i]);
+                        }
+                        
+                        return target;
+                    }
+
                     return object;
                 }
 

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/test/java/org/apache/cayenne/exp/ParametrizedExpressionTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/test/java/org/apache/cayenne/exp/ParametrizedExpressionTest.java?rev=1510030&r1=1510029&r2=1510030&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/test/java/org/apache/cayenne/exp/ParametrizedExpressionTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/test/java/org/apache/cayenne/exp/ParametrizedExpressionTest.java Sat Aug  3 16:19:48 2013
@@ -25,6 +25,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.DataObject;
 import org.apache.cayenne.exp.parser.ASTList;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -81,18 +83,41 @@ public class ParametrizedExpressionTest 
         Expression inExp = Expression.fromString("k1 in $test");
         Expression e1 = Expression.fromString("k1 in ('a', 'b')");
 
-        TstTraversalHandler.compareExps(e1,
-                inExp.expWithParameters(Collections.singletonMap("test", new Object[] { "a", "b" })));
+        Expression transformed = inExp.expWithParameters(Collections.singletonMap("test", new Object[] { "a", "b" }));
+        TstTraversalHandler.compareExps(e1, transformed);
+
+        // just in case manually check params
+        DataObject o1 = new CayenneDataObject();
+        o1.writePropertyDirectly("k1", "a");
+        assertTrue(transformed.match(o1));
+
+        DataObject o2 = new CayenneDataObject();
+        o2.writePropertyDirectly("k1", "x");
+        assertFalse(transformed.match(o2));
     }
 
     public void testInParameter_AsValues() throws Exception {
         Expression inExp = Expression.fromString("k1 in ($ap, $bp)");
-        Expression e1 = Expression.fromString("k1 in ('a', 'b')");
+        
+        String e1String = "k1 in (\"a\", \"b\")";
+        Expression e1 = Expression.fromString(e1String);
 
         Map<String, Object> params = new HashMap<String, Object>();
         params.put("ap", "a");
         params.put("bp", "b");
-        TstTraversalHandler.compareExps(e1, inExp.expWithParameters(params));
+        Expression transformed = inExp.expWithParameters(params);
+        TstTraversalHandler.compareExps(e1, transformed);
+        
+        assertEquals(e1String, transformed.toString());
+
+        // just in case manually check params
+        DataObject o1 = new CayenneDataObject();
+        o1.writePropertyDirectly("k1", "a");
+        assertTrue(transformed.match(o1));
+
+        DataObject o2 = new CayenneDataObject();
+        o2.writePropertyDirectly("k1", "x");
+        assertFalse(transformed.match(o2));
     }
 
     /**