Author: aadamchik
Date: Sun Oct 19 13:56:59 2008
New Revision: 706066

URL: http://svn.apache.org/viewvc?rev=706066&view=rev
Log:
CAY-1128 Switch JOINT prefetches to generate OUTER Joins

fixing broken handling of objects removed from prefetched relationships under 
JOINT prefetches

Modified:
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java?rev=706066&r1=706065&r2=706066&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectTreeResolver.java
 Sun Oct 19 13:56:59 2008
@@ -238,8 +238,7 @@
         }
 
         PrefetchProcessorNode getParent() {
-            return (nodeStack.isEmpty()) ? null : nodeStack
-                    .getLast();
+            return (nodeStack.isEmpty()) ? null : nodeStack.getLast();
         }
     }
 
@@ -350,14 +349,15 @@
                                 snapshot,
                                 sourceObjEntity,
                                 relatedIdPrefix);
-                        
+
                         if (id == null) {
-                            throw new CayenneRuntimeException("Can't build 
ObjectId from row: "
-                                    + snapshot
-                                    + ", entity: "
-                                    + sourceObjEntity.getName()
-                                    + ", prefix: "
-                                    + relatedIdPrefix);
+                            throw new CayenneRuntimeException(
+                                    "Can't build ObjectId from row: "
+                                            + snapshot
+                                            + ", entity: "
+                                            + sourceObjEntity.getName()
+                                            + ", prefix: "
+                                            + relatedIdPrefix);
                         }
 
                         sourceObject = (Persistent) objectStore.getNode(id);
@@ -426,9 +426,9 @@
 
                 DataRow row = processorNode.rowFromFlatRow(currentFlatRow);
                 object = processorNode.getResolver().objectFromDataRow(row);
-                
+
                 // LEFT OUTER JOIN produced no matches...
-                if(object == null) {
+                if (object == null) {
                     return false;
                 }
 
@@ -482,9 +482,11 @@
                         processorNode.getObjects(),
                         processorNode.getResolvedRows(),
                         queryMetadata.isRefreshingObjects());
-                processorNode.connectToParents();
             }
 
+            // run 'connectToParents' even if the object list is empty. This 
is needed to
+            // refresh stale relationships e.g. when some related objects got 
deleted.
+            processorNode.connectToParents();
             return true;
         }
 


Reply via email to