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;
}