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 2011/05/15 13:21:29 UTC
svn commit: r1103317 - in /cayenne/main/branches/STABLE-3.0:
docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/
Author: aadamchik
Date: Sun May 15 11:21:28 2011
New Revision: 1103317
URL: http://svn.apache.org/viewvc?rev=1103317&view=rev
Log:
CAY-1567 BaseQueryMetadata.setPrefetches() causes a shared lock
Modified:
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/PrefetchTreeNode.java
Modified: cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1103317&r1=1103316&r2=1103317&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt Sun May 15 11:21:28 2011
@@ -33,6 +33,7 @@ CAY-1505 Callbacks: POST_UPDATE is calle
CAY-1506 Reserverd words mapping in WHERE clause
CAY-1518 cgen: duplicate callback methods
CAY-1557 Vertical inheritance is broken for subclasses with more than one flattened attribute
+CAY-1567 BaseQueryMetadata.setPrefetches() causes a shared lock
----------------------------------
Release: 3.0.1
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java?rev=1103317&r1=1103316&r2=1103317&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java Sun May 15 11:21:28 2011
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
-import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
@@ -34,7 +33,6 @@ import org.apache.cayenne.map.EntityReso
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.reflect.ClassDescriptor;
-import org.apache.cayenne.util.Util;
import org.apache.cayenne.util.XMLEncoder;
import org.apache.cayenne.util.XMLSerializable;
@@ -326,22 +324,22 @@ class BaseQueryMetadata implements Query
}
void setPrefetchTree(PrefetchTreeNode prefetchTree) {
- if (prefetchTree != null) {
- // importnat: make a clone to allow modification independent from the
- // caller...
- try {
- prefetchTree = (PrefetchTreeNode) Util
- .cloneViaSerialization(prefetchTree);
- }
- catch (CayenneRuntimeException e) {
- throw e;
- }
- catch (Exception e) {
- throw new CayenneRuntimeException("Error cloning prefetch tree", e);
- }
+ this.prefetchTree = prefetchTree != null ? deepClone(prefetchTree, null) : null;
+ }
+
+ private PrefetchTreeNode deepClone(PrefetchTreeNode source, PrefetchTreeNode targetParent) {
+
+ PrefetchTreeNode target = new PrefetchTreeNode(targetParent, source.getName());
+ target.setEjbqlPathEntityId(source.getEjbqlPathEntityId());
+ target.setEntityName(source.getEntityName());
+ target.setPhantom(source.isPhantom());
+ target.setSemantics(source.getSemantics());
+
+ for (PrefetchTreeNode child : source.getChildren()) {
+ target.addChild(deepClone(child, target));
}
- this.prefetchTree = prefetchTree;
+ return target;
}
/**
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/PrefetchTreeNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/PrefetchTreeNode.java?rev=1103317&r1=1103316&r2=1103317&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/PrefetchTreeNode.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/PrefetchTreeNode.java Sun May 15 11:21:28 2011
@@ -69,9 +69,9 @@ public class PrefetchTreeNode implements
* Creates a phantom PrefetchTreeNode, initializing it with parent node and a name of
* a relationship segment connecting this node with the parent.
*/
- protected PrefetchTreeNode(PrefetchTreeNode parent, String segmentPath) {
+ protected PrefetchTreeNode(PrefetchTreeNode parent, String name) {
this.parent = parent;
- this.name = segmentPath;
+ this.name = name;
this.phantom = true;
this.semantics = UNDEFINED_SEMANTICS;
}