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 2014/03/11 13:21:11 UTC
svn commit: r1576306 - in /cayenne/main/branches/STABLE-3.1:
docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/
framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/
Author: aadamchik
Date: Tue Mar 11 12:21:11 2014
New Revision: 1576306
URL: http://svn.apache.org/r1576306
Log:
CAY-1905 Multi-step prefetching NPE : 1..N..1 with absent N and root with no qualifier
Modified:
cayenne/main/branches/STABLE-3.1/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ResultScanParentAttachmentStrategy.java
cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTest.java
Modified: cayenne/main/branches/STABLE-3.1/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.1/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1576306&r1=1576305&r2=1576306&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.1/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/branches/STABLE-3.1/docs/doc/src/main/resources/RELEASE-NOTES.txt Tue Mar 11 12:21:11 2014
@@ -12,8 +12,11 @@ Release: 3.1-final
Date: not yet released
----------------------------------
Changes/New Features Since 3.1RC1:
+
Bug Fixes Since 3.1RC1:
+CAY-1905 Multi-step prefetching NPE : 1..N..1 with absent N and root with no qualifier
+
----------------------------------
Release: 3.1RC1
Date: 16 February 2014
Modified: cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ResultScanParentAttachmentStrategy.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ResultScanParentAttachmentStrategy.java?rev=1576306&r1=1576305&r2=1576306&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ResultScanParentAttachmentStrategy.java (original)
+++ cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ResultScanParentAttachmentStrategy.java Tue Mar 11 12:21:11 2014
@@ -100,6 +100,12 @@ class ResultScanParentAttachmentStrategy
partitionByChild = new HashMap<Object, List<Persistent>>();
List<Persistent> objects = parentNode.getObjects();
+
+ // null is possible if the parent node matched no objects...
+ if(objects == null) {
+ return;
+ }
+
List<DataRow> rows = parentNode.getDataRows();
int size = objects.size();
for (int i = 0; i < size; i++) {
Modified: cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTest.java?rev=1576306&r1=1576305&r2=1576306&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTest.java (original)
+++ cayenne/main/branches/STABLE-3.1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepTest.java Tue Mar 11 12:21:11 2014
@@ -39,6 +39,7 @@ import org.apache.cayenne.test.jdbc.Tabl
import org.apache.cayenne.testdo.testmap.ArtistExhibit;
import org.apache.cayenne.testdo.testmap.Exhibit;
import org.apache.cayenne.testdo.testmap.Gallery;
+import org.apache.cayenne.testdo.testmap.Painting;
import org.apache.cayenne.unit.di.server.ServerCase;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -78,7 +79,7 @@ public class DataContextPrefetchMultiste
tGallery = new TableHelper(dbHelper, "GALLERY");
tGallery.setColumns("GALLERY_ID", "GALLERY_NAME");
}
-
+
protected void createTwoArtistsWithExhibitsDataSet() throws Exception {
tArtist.insert(11, "artist2");
tArtist.insert(101, "artist3");
@@ -100,6 +101,15 @@ public class DataContextPrefetchMultiste
tArtistExhibit.insert(101, 2);
tArtistExhibit.insert(101, 4);
}
+
+ protected void createGalleriesAndArtists() throws Exception {
+ tArtist.insert(11, "artist2");
+ tArtist.insert(101, "artist3");
+
+ tGallery.insert(25, "gallery1");
+ tGallery.insert(31, "gallery2");
+ tGallery.insert(45, "gallery3");
+ }
public void testToManyToManyFirstStepUnresolved() throws Exception {
@@ -258,4 +268,24 @@ public class DataContextPrefetchMultiste
ArtistExhibit ae1 = aexhibits.get(0);
assertEquals(PersistenceState.COMMITTED, ae1.getPersistenceState());
}
+
+ public void testToManyToOne_EmptyToMany_NoRootQualifier() throws Exception {
+
+ createGalleriesAndArtists();
+
+ SelectQuery q = new SelectQuery(Gallery.class);
+ q.addPrefetch(Gallery.PAINTING_ARRAY_PROPERTY);
+ q.addPrefetch(Gallery.PAINTING_ARRAY_PROPERTY + "." + Painting.TO_ARTIST_PROPERTY);
+
+ List<Gallery> galleries = context.performQuery(q);
+ assertEquals(3, galleries.size());
+
+ Gallery g = galleries.get(0);
+
+ // this relationship should be resolved
+ assertTrue(g.readPropertyDirectly(Gallery.PAINTING_ARRAY_PROPERTY) instanceof ValueHolder);
+ List<Painting> exhibits = (List<Painting>) g.readPropertyDirectly(Gallery.PAINTING_ARRAY_PROPERTY);
+ assertFalse(((ValueHolder) exhibits).isFault());
+ assertEquals(0, exhibits.size());
+ }
}