You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ol...@apache.org on 2011/12/20 12:12:13 UTC

svn commit: r1221202 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/graph/ChildDiffLoader.java test/java/org/apache/cayenne/NestedCayenneContextTest.java

Author: oltka
Date: Tue Dec 20 11:12:13 2011
New Revision: 1221202

URL: http://svn.apache.org/viewvc?rev=1221202&view=rev
Log:
CAY-1636 added tests for this problem

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/NestedCayenneContextTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java?rev=1221202&r1=1221201&r2=1221202&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java Tue Dec 20 11:12:13 2011
@@ -122,11 +122,15 @@ public class ChildDiffLoader implements 
 
     public void nodeRemoved(Object nodeId) {
         setExternalChange(Boolean.TRUE);
-
-        try {
-            context.deleteObjects(findObject(nodeId));
-        }
-        finally {
+        Persistent object = findObject(nodeId);
+        if (object != null) {
+            try {
+                context.deleteObjects(object);
+            }
+            finally {
+                setExternalChange(Boolean.FALSE);
+            }
+        } else {
             setExternalChange(Boolean.FALSE);
         }
     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/NestedCayenneContextTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/NestedCayenneContextTest.java?rev=1221202&r1=1221201&r2=1221202&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/NestedCayenneContextTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/NestedCayenneContextTest.java Tue Dec 20 11:12:13 2011
@@ -574,6 +574,96 @@ public class NestedCayenneContextTest ex
         assertEquals(PersistenceState.DELETED, parentDeleted.getPersistenceState());
         assertEquals("DDD", parentDeleted.getGlobalAttribute1());
     }
+    
+    
+    /*
+     * was added for CAY-1636
+     */
+    public void testCAY1636() throws Exception {
+        
+        ClientMtTooneMaster A = clientContext.newObject(ClientMtTooneMaster.class);
+        clientContext.commitChanges();
+        
+        ClientMtTooneDep B = clientContext.newObject(ClientMtTooneDep.class);
+        A.setToDependent(B);
+        clientContext.commitChanges();
+        
+        ObjectContext child = clientContext.createChildContext();
+    
+        SelectQuery query = new SelectQuery(ClientMtTooneMaster.class);
+        List<?> objects = child.performQuery(query);
+        
+        assertEquals(1, objects.size());
+        
+        ClientMtTooneMaster childDeleted = (ClientMtTooneMaster) objects.get(0);
+        
+      
+        child.deleteObjects(childDeleted);
+
+        child.commitChangesToParent();
+        
+        ClientMtTooneMaster parentDeleted = (ClientMtTooneMaster) clientContext
+          .getGraphManager()
+          .getNode(childDeleted.getObjectId());
+        
+        assertNotNull(parentDeleted);
+        assertEquals(PersistenceState.DELETED, parentDeleted.getPersistenceState());
+        
+        clientContext.commitChanges();
+        
+        SelectQuery query2 = new SelectQuery(ClientMtTooneMaster.class);
+        List<?> objects2 = child.performQuery(query2);
+        
+        assertEquals(0, objects2.size());
+ 
+    }
+    
+    public void testCAY1636_2() throws Exception {
+        
+        ClientMtTooneMaster A = clientContext.newObject(ClientMtTooneMaster.class);
+        clientContext.commitChanges();
+        
+        ClientMtTooneDep B = clientContext.newObject(ClientMtTooneDep.class);
+        A.setToDependent(B);
+        clientContext.commitChanges();
+        
+        ObjectContext child = clientContext.createChildContext();
+        
+        SelectQuery queryB = new SelectQuery(ClientMtTooneDep.class);
+        List<?> objectsB = child.performQuery(queryB);
+        
+        assertEquals(1, objectsB.size());
+        
+        ClientMtTooneDep childBDeleted = (ClientMtTooneDep) objectsB.get(0);
+        child.deleteObjects(childBDeleted);
+    
+        SelectQuery query = new SelectQuery(ClientMtTooneMaster.class);
+        List<?> objects = child.performQuery(query);
+        
+        assertEquals(1, objects.size());
+        
+        ClientMtTooneMaster childDeleted = (ClientMtTooneMaster) objects.get(0);
+        
+      
+        child.deleteObjects(childDeleted);
+
+        child.commitChangesToParent();
+        
+        ClientMtTooneMaster parentDeleted = (ClientMtTooneMaster) clientContext
+          .getGraphManager()
+          .getNode(childDeleted.getObjectId());
+        
+        assertNotNull(parentDeleted);
+        assertEquals(PersistenceState.DELETED, parentDeleted.getPersistenceState());
+        
+        clientContext.commitChanges();
+        
+        SelectQuery query2 = new SelectQuery(ClientMtTooneMaster.class);
+        List<?> objects2 = child.performQuery(query2);
+        
+        assertEquals(0, objects2.size());
+ 
+    }
 
     public void testCommitChanges() throws Exception {
         clientContext.newObject(ClientMtTable1.class);