You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by an...@apache.org on 2009/08/18 14:44:20 UTC
svn commit: r805390 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/exp/parser/ASTIn.java
test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java
Author: andrey
Date: Tue Aug 18 12:44:20 2009
New Revision: 805390
URL: http://svn.apache.org/viewvc?rev=805390&view=rev
Log:
CAY-1254 filtering an inExp(a, b) does not work when the path (a) refers to a collection of objects (based on patch by Øyvind Harboe)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTIn.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTIn.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTIn.java?rev=805390&r1=805389&r2=805390&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTIn.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTIn.java Tue Aug 18 12:44:20 2009
@@ -19,6 +19,8 @@
package org.apache.cayenne.exp.parser;
+import java.util.Collection;
+
import org.apache.cayenne.exp.Expression;
import org.apache.commons.collections.Transformer;
@@ -62,11 +64,23 @@
if (objects == null) {
return Boolean.FALSE;
}
-
+
int size = objects.length;
for (int i = 0; i < size; i++) {
- if (objects[i] != null && ASTEqual.evaluateAtomic(o1, objects[i])) {
- return Boolean.TRUE;
+ if (objects[i] != null) {
+ if (o1 instanceof Collection) {
+ /* handle the case where we have a collection of objects */
+ for (Object obj : (Collection) o1) {
+ if (ASTEqual.evaluateAtomic(obj, objects[i])) {
+ return Boolean.TRUE;
+ }
+ }
+ }
+ else {
+ if (ASTEqual.evaluateAtomic(o1, objects[i])) {
+ return Boolean.TRUE;
+ }
+ }
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java?rev=805390&r1=805389&r2=805390&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java Tue Aug 18 12:44:20 2009
@@ -279,4 +279,21 @@
assertEquals(query.getQualifier(),
ExpressionFactory.matchAnyExp(Arrays.asList(a1, a3)));
}
+
+ public void testIn() {
+ ObjectContext dc = createDataContext();
+
+ Artist a1 = dc.newObject(Artist.class);
+ a1.setArtistName("a1");
+ Painting p1 = dc.newObject(Painting.class);
+ p1.setPaintingTitle("p1");
+ Painting p2 = dc.newObject(Painting.class);
+ p2.setPaintingTitle("p2");
+ a1.addToPaintingArray(p1);
+ a1.addToPaintingArray(p2);
+ dc.commitChanges();
+
+ Expression in = ExpressionFactory.inExp("paintingArray", p1);
+ assertTrue(in.match(a1));
+ }
}