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 2007/08/08 16:30:16 UTC

svn commit: r563899 - in /cayenne/main/trunk/itests/cayenne-api/src: main/java/org/apache/cayenne/itest/cpa/defaults/ main/java/org/apache/cayenne/itest/cpa/defaults/auto/ main/resources/ test/java/org/apache/cayenne/itest/cpa/conf/

Author: aadamchik
Date: Wed Aug  8 07:30:15 2007
New Revision: 563899

URL: http://svn.apache.org/viewvc?view=rev&rev=563899
Log:
CAY-843 Remove arbitrary reverse relationship mapping limitations 
(integration tests)

Added:
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java
    cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java
    cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml
    cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/
    cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java
Modified:
    cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable1.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable1;
+
+public class DefaultsTable1 extends _DefaultsTable1 {
+
+}
+
+
+

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable2.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable2;
+
+public class DefaultsTable2 extends _DefaultsTable2 {
+
+}
+
+
+

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable3.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable3;
+
+public class DefaultsTable3 extends _DefaultsTable3 {
+
+}
+
+
+

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/DefaultsTable4.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,10 @@
+package org.apache.cayenne.itest.cpa.defaults;
+
+import org.apache.cayenne.itest.cpa.defaults.auto._DefaultsTable4;
+
+public class DefaultsTable4 extends _DefaultsTable4 {
+
+}
+
+
+

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable1.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,22 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+/** Class _DefaultsTable1 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable1 extends org.apache.cayenne.CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+}

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable2.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,23 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+/** Class _DefaultsTable2 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable2 extends org.apache.cayenne.CayenneDataObject {
+
+    public static final String TO_TABLE1_PROPERTY = "toTable1";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setToTable1(org.apache.cayenne.itest.cpa.defaults.DefaultsTable1 toTable1) {
+        setToOneTarget("toTable1", toTable1, true);
+    }
+
+    public org.apache.cayenne.itest.cpa.defaults.DefaultsTable1 getToTable1() {
+        return (org.apache.cayenne.itest.cpa.defaults.DefaultsTable1)readProperty("toTable1");
+    } 
+    
+    
+}

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable3.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,36 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+import java.util.List;
+
+/** Class _DefaultsTable3 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable3 extends org.apache.cayenne.CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+    public static final String DEFAULT_TABLE4S_PROPERTY = "defaultTable4s";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+    public void addToDefaultTable4s(org.apache.cayenne.itest.cpa.defaults.DefaultsTable4 obj) {
+        addToManyTarget("defaultTable4s", obj, true);
+    }
+    public void removeFromDefaultTable4s(org.apache.cayenne.itest.cpa.defaults.DefaultsTable4 obj) {
+        removeToManyTarget("defaultTable4s", obj, true);
+    }
+    public List getDefaultTable4s() {
+        return (List)readProperty("defaultTable4s");
+    }
+    
+    
+}

Added: cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/java/org/apache/cayenne/itest/cpa/defaults/auto/_DefaultsTable4.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,13 @@
+package org.apache.cayenne.itest.cpa.defaults.auto;
+
+/** Class _DefaultsTable4 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _DefaultsTable4 extends org.apache.cayenne.CayenneDataObject {
+
+
+    public static final String ID_PK_COLUMN = "id";
+
+}

Modified: cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml?view=diff&rev=563899&r1=563898&r2=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml (original)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/resources/cayenne.xml Wed Aug  8 07:30:15 2007
@@ -2,10 +2,12 @@
 <domains project-version="2.0">
 <domain name="cayenne-api-domain">
 	<map name="cayenne-api-map" location="cayenne-api-map.map.xml"/>
+	<map name="defaults-mapping-map" location="defaults-mapping-map.map.xml"/>
 
 	<node name="cayenne-api-node"
 		 datasource="cayenne-api-node.driver.xml"
 		 factory="org.apache.cayenne.conf.DriverDataSourceFactory">
+			<map-ref name="defaults-mapping-map"/>
 			<map-ref name="cayenne-api-map"/>
 	 </node>
 </domain>

Added: cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/main/resources/defaults-mapping-map.map.xml Wed Aug  8 07:30:15 2007
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map project-version="2.0">
+	<property name="defaultPackage" value="org.apache.cayenne.itest.cpa.defaults"/>
+	<db-entity name="defaults_table1">
+		<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+		<db-attribute name="name" type="VARCHAR" length="100"/>
+	</db-entity>
+	<db-entity name="defaults_table2">
+		<db-attribute name="defaults_table1_id" type="INTEGER"/>
+		<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+	</db-entity>
+	<db-entity name="defaults_table3">
+		<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+		<db-attribute name="name" type="VARCHAR" length="100"/>
+	</db-entity>
+	<db-entity name="defaults_table4">
+		<db-attribute name="defaults_table3_id" type="INTEGER"/>
+		<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+	</db-entity>
+	<obj-entity name="DefaultsTable1" className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable1" dbEntityName="defaults_table1">
+		<obj-attribute name="name" type="java.lang.String" db-attribute-path="name"/>
+	</obj-entity>
+	<obj-entity name="DefaultsTable2" className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable2" dbEntityName="defaults_table2">
+	</obj-entity>
+	<obj-entity name="DefaultsTable3" className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable3" dbEntityName="defaults_table3">
+		<obj-attribute name="name" type="java.lang.String" db-attribute-path="name"/>
+	</obj-entity>
+	<obj-entity name="DefaultsTable4" className="org.apache.cayenne.itest.cpa.defaults.DefaultsTable4" dbEntityName="defaults_table4">
+	</obj-entity>
+	<db-relationship name="to_table1" source="defaults_table2" target="defaults_table1" toMany="false">
+		<db-attribute-pair source="defaults_table1_id" target="id"/>
+	</db-relationship>
+	<db-relationship name="defaultTable4s" source="defaults_table3" target="defaults_table4" toMany="true">
+		<db-attribute-pair source="id" target="defaults_table3_id"/>
+	</db-relationship>
+	<obj-relationship name="toTable1" source="DefaultsTable2" target="DefaultsTable1" db-relationship-path="to_table1"/>
+	<obj-relationship name="defaultTable4s" source="DefaultsTable3" target="DefaultsTable4" db-relationship-path="defaultTable4s"/>
+</data-map>

Added: cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java?view=auto&rev=563899
==============================================================================
--- cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java (added)
+++ cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateDefaultsLoadingTest.java Wed Aug  8 07:30:15 2007
@@ -0,0 +1,85 @@
+package org.apache.cayenne.itest.cpa.conf;
+
+import org.apache.cayenne.DataObjectUtils;
+import org.apache.cayenne.itest.cpa.CPAContextCase;
+import org.apache.cayenne.itest.cpa.defaults.DefaultsTable2;
+import org.apache.cayenne.itest.cpa.defaults.DefaultsTable3;
+import org.apache.cayenne.itest.cpa.defaults.DefaultsTable4;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.query.RefreshQuery;
+
+public class RuntimeLoaderDelegateDefaultsLoadingTest extends CPAContextCase {
+
+	public void testLoadedReverseDb() {
+
+		DbEntity table1 = context.getEntityResolver().getDbEntity(
+				"defaults_table1");
+		DbEntity table2 = context.getEntityResolver().getDbEntity(
+				"defaults_table2");
+		assertNotNull(table1.getAnyRelationship(table2));
+		assertTrue(table1.getAnyRelationship(table2).isRuntime());
+		assertFalse(table2.getAnyRelationship(table1).isRuntime());
+	}
+
+	public void testLoadedReverseObj() {
+
+		ObjEntity class1 = context.getEntityResolver().getObjEntity(
+				"DefaultsTable1");
+		ObjEntity class2 = context.getEntityResolver().getObjEntity(
+				"DefaultsTable2");
+		assertNotNull(class1.getAnyRelationship(class2));
+		assertTrue(class1.getAnyRelationship(class2).isRuntime());
+		assertFalse(class2.getAnyRelationship(class1).isRuntime());
+	}
+
+	public void testResolveRelationship() throws Exception {
+		getDbHelper().deleteAll("defaults_table2");
+		getDbHelper().deleteAll("defaults_table1");
+		getDbHelper().insert("defaults_table1", new String[] { "id", "name" },
+				new Object[] { 1, "X" });
+		getDbHelper().insert("defaults_table2",
+				new String[] { "id", "defaults_table1_id" },
+				new Object[] { 1, 1 });
+
+		DefaultsTable2 o = (DefaultsTable2) DataObjectUtils.objectForPK(
+				context, DefaultsTable2.class, 1);
+		assertNotNull(o.getToTable1());
+		assertEquals("X", o.getToTable1().getName());
+	}
+
+	public void testUpdateImplicitToMany() throws Exception {
+		getDbHelper().deleteAll("defaults_table4");
+		getDbHelper().deleteAll("defaults_table3");
+		getDbHelper().insert("defaults_table3", new String[] { "id", "name" },
+				new Object[] { 1, "X" });
+		getDbHelper().insert("defaults_table3", new String[] { "id", "name" },
+				new Object[] { 2, "Y" });
+		getDbHelper().insert("defaults_table4",
+				new String[] { "id", "defaults_table3_id" },
+				new Object[] { 1, 1 });
+
+		DefaultsTable4 o = (DefaultsTable4) DataObjectUtils.objectForPK(
+				context, DefaultsTable4.class, 1);
+		DefaultsTable3 o1 = (DefaultsTable3) DataObjectUtils.objectForPK(
+				context, DefaultsTable3.class, 1);
+		DefaultsTable3 o2 = (DefaultsTable3) DataObjectUtils.objectForPK(
+				context, DefaultsTable3.class, 2);
+
+		assertEquals(1, o1.getDefaultTable4s().size());
+		assertEquals(0, o2.getDefaultTable4s().size());
+
+		o2.addToDefaultTable4s(o);
+
+		assertEquals(1, o2.getDefaultTable4s().size());
+		context.commitChanges();
+		assertEquals(1, o2.getDefaultTable4s().size());
+
+		context.performQuery(new RefreshQuery());
+
+		// note that the old to-many is only refreshed after invalidation with
+		// RefreshQuery... should this be treated as a bug?
+		assertEquals(0, o1.getDefaultTable4s().size());
+		assertEquals(1, o2.getDefaultTable4s().size());
+	}
+}