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 2008/01/22 23:19:36 UTC

svn commit: r614357 - in /cayenne/main/tags/3.0M3/cayenne: docs/doc/src/main/resources/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/ framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ fr...

Author: aadamchik
Date: Tue Jan 22 14:19:34 2008
New Revision: 614357

URL: http://svn.apache.org/viewvc?rev=614357&view=rev
Log:
CAY-974 Subquery EJBQL returns wrong entity in the result - need to patch it for M3

Modified:
    cayenne/main/tags/3.0M3/cayenne/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
    cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLSubqueryTest.java
    cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLSubqueryTest.xml

Modified: cayenne/main/tags/3.0M3/cayenne/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/tags/3.0M3/cayenne/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=614357&r1=614356&r2=614357&view=diff
==============================================================================
--- cayenne/main/tags/3.0M3/cayenne/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/tags/3.0M3/cayenne/docs/doc/src/main/resources/RELEASE-NOTES.txt Tue Jan 22 14:19:34 2008
@@ -54,6 +54,7 @@
 CAY-926 Refactoring class generator classes
 CAY-932 Cancel doesn't cancel when quitting CM with a modified model
 CAY-967 Caching doesn't work for paginated queries
+CAY-974 Subquery EJBQL returns wrong entity in the result
 
 ----------------------------------
 Release: 3.0M2

Modified: cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
URL: http://svn.apache.org/viewvc/cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java?rev=614357&r1=614356&r2=614357&view=diff
==============================================================================
--- cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java (original)
+++ cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java Tue Jan 22 14:19:34 2008
@@ -327,7 +327,9 @@
 
         @Override
         public boolean visitIdentifier(EJBQLExpression expression) {
-            rootId = normalizeIdPath(expression.getText());
+            if (appendingResultColumns) {
+                rootId = normalizeIdPath(expression.getText());
+            }
             return false;
         }
 

Modified: cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLSubqueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLSubqueryTest.java?rev=614357&r1=614356&r2=614357&view=diff
==============================================================================
--- cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLSubqueryTest.java (original)
+++ cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLSubqueryTest.java Tue Jan 22 14:19:34 2008
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.apache.art.Artist;
 import org.apache.cayenne.DataObjectUtils;
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.query.EJBQLQuery;
@@ -35,6 +36,31 @@
         deleteTestData();
     }
 
+    public void testDifferentEntity() throws Exception {
+        createTestData("prepare");
+
+        String ejbql = "SELECT a FROM Artist a"
+                + " WHERE EXISTS ("
+                + " SELECT DISTINCT p1 FROM Painting p1"
+                + " WHERE p1.toArtist = a"
+                + ")";
+
+        EJBQLQuery query = new EJBQLQuery(ejbql);
+        List objects = createDataContext().performQuery(query);
+        assertEquals(1, objects.size());
+
+        Set ids = new HashSet();
+        Iterator it = objects.iterator();
+        while (it.hasNext()) {
+            Object id = DataObjectUtils.pkForObject((Persistent) it.next());
+            ids.add(id);
+        }
+
+        assertTrue(ids.contains(33001l));
+
+        assertTrue("" + objects.get(0), objects.get(0) instanceof Artist);
+    }
+
     public void testExists() throws Exception {
         createTestData("prepare");
 
@@ -59,12 +85,12 @@
         assertTrue(ids.contains(new Integer(33001)));
         assertTrue(ids.contains(new Integer(33003)));
     }
-    
+
     public void testAll() throws Exception {
-        if(!getAccessStackAdapter().supportsAllAnySome()) {
+        if (!getAccessStackAdapter().supportsAllAnySome()) {
             return;
         }
-        
+
         createTestData("prepare");
 
         String ejbql = "SELECT p FROM Painting p"
@@ -87,12 +113,12 @@
         assertTrue(ids.contains(new Integer(33003)));
         assertTrue(ids.contains(new Integer(33004)));
     }
-    
+
     public void testAny() throws Exception {
-        if(!getAccessStackAdapter().supportsAllAnySome()) {
+        if (!getAccessStackAdapter().supportsAllAnySome()) {
             return;
         }
-        
+
         createTestData("prepare");
 
         String ejbql = "SELECT p FROM Painting p"
@@ -116,12 +142,12 @@
         assertTrue(ids.contains(new Integer(33003)));
         assertTrue(ids.contains(new Integer(33004)));
     }
-    
+
     public void testSome() throws Exception {
-        if(!getAccessStackAdapter().supportsAllAnySome()) {
+        if (!getAccessStackAdapter().supportsAllAnySome()) {
             return;
         }
-        
+
         createTestData("prepare");
 
         String ejbql = "SELECT p FROM Painting p"

Modified: cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLSubqueryTest.xml
URL: http://svn.apache.org/viewvc/cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLSubqueryTest.xml?rev=614357&r1=614356&r2=614357&view=diff
==============================================================================
--- cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLSubqueryTest.xml (original)
+++ cayenne/main/tags/3.0M3/cayenne/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLSubqueryTest.xml Tue Jan 22 14:19:34 2008
@@ -3,14 +3,27 @@
 
 <beans default-lazy-init="true">
 
+	<bean id="A1" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+		<constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+		<constructor-arg><value>
+		insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33001, 'artist1')
+		</value></constructor-arg>
+	</bean>
+	<bean id="A2" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+		<constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+		<constructor-arg><value>
+		insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33002, 'artist2')
+		</value></constructor-arg>
+	</bean>
+
 	<bean id="P1" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
 		<constructor-arg type="java.lang.Class">
 			<value>org.apache.art.Painting</value>
 		</constructor-arg>
 		<constructor-arg>
 			<value>
-				INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE)
-				VALUES (33001, 'P1', 3000)
+				INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE, ARTIST_ID)
+				VALUES (33001, 'P1', 3000, 33001)
 			</value>
 		</constructor-arg>
 	</bean>
@@ -21,8 +34,8 @@
 		</constructor-arg>
 		<constructor-arg>
 			<value>
-				INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE)
-				VALUES (33002, 'P2', 4000)
+				INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE, ARTIST_ID)
+				VALUES (33002, 'P2', 4000, 33001)
 			</value>
 		</constructor-arg>
 	</bean>
@@ -59,6 +72,8 @@
 	<bean id="prepare" class="java.util.ArrayList">
 		<constructor-arg>
 			<list>
+				<ref bean="A1" />
+				<ref bean="A2" />
 				<ref bean="P1" />
 				<ref bean="P2" />
 				<ref bean="P3" />