You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2006/07/11 23:58:08 UTC
svn commit: r421004 - in /db/ojb/branches/OJB_1_0_RELEASE/src:
schema/ojbtest-schema.xml test/org/apache/ojb/odmg/UserTestCases.java
test/org/apache/ojb/repository_junit_odmg.xml
Author: arminw
Date: Tue Jul 11 14:58:06 2006
New Revision: 421004
URL: http://svn.apache.org/viewvc?rev=421004&view=rev
Log:
add test for OJB-118
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/schema/ojbtest-schema.xml
db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/UserTestCases.java
db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/repository_junit_odmg.xml
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/schema/ojbtest-schema.xml
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/schema/ojbtest-schema.xml?rev=421004&r1=421003&r2=421004&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/schema/ojbtest-schema.xml (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/schema/ojbtest-schema.xml Tue Jul 11 14:58:06 2006
@@ -1821,4 +1821,14 @@
<column name="TARGET" type="JAVA_OBJECT"/>
<column name="EDITOR" type="JAVA_OBJECT"/>
</table>
+
+ <table name="UTC_A">
+ <column name="ID_" required="true" primaryKey="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR" size="250"/>
+ </table>
+
+ <table name="UTC_B">
+ <column name="ID_" required="true" primaryKey="true" type="INTEGER"/>
+ <column name="DESCRIPTION" type="VARCHAR" size="250"/>
+ </table>
</database>
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/UserTestCases.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/UserTestCases.java?rev=421004&r1=421003&r2=421004&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/UserTestCases.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/UserTestCases.java Tue Jul 11 14:58:06 2006
@@ -1,6 +1,8 @@
package org.apache.ojb.odmg;
import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
import org.apache.ojb.broker.Identity;
import org.apache.ojb.junit.ODMGTestCase;
@@ -202,9 +204,7 @@
tx.commit();
}
- /**
- * store an object and then retrieve it by id.
- */
+ /** store an object and then retrieve it by id. */
public void testStoreRetrieveSameTxn() throws Exception
{
String name = "testStoreRetrieveSameTxn_" + System.currentTimeMillis();
@@ -245,9 +245,7 @@
}
}
- /**
- * Not recommended to use such a construct!!!
- */
+ /** Not recommended to use such a construct!!! */
public void testRetrieveOutsideTxn()
{
try
@@ -271,6 +269,184 @@
{
exc.printStackTrace();
fail("caught unexpected exception: " + exc.toString());
+ }
+ }
+
+ /**
+ * Test for OJB-118
+ */
+ public void testFKConstraintIssue() throws Exception
+ {
+ int startId = (int) (System.currentTimeMillis() % Integer.MAX_VALUE);
+
+ String queryA = "select allA from " + A.class.getName() + " where id = $1";
+ String queryB = "select allB from " + B.class.getName() + " where id = $1";
+
+
+ Transaction tx = odmg.newTransaction();
+ tx.begin();
+ // Create A and B objects and make persistent
+ A a = new A();
+ a.setId(new Integer(startId));
+ a.setName("Ten_1");
+ tx.lock(a, Transaction.WRITE);
+ B b = new B();
+ b.setId(a.getId());
+ b.setDescription("Detail_1");
+ a.getItems().add(b);
+ tx.lock(b, Transaction.WRITE);
+ // Delete A and B
+ database.deletePersistent(a);
+ database.deletePersistent(b);
+ tx.commit();
+ tx.begin();
+ OQLQuery query = odmg.newOQLQuery();
+ query.create(queryA);
+ query.bind(new Integer(startId));
+ Collection result = (Collection) query.execute();
+ assertEquals(0, result.size());
+
+ query = odmg.newOQLQuery();
+ query.create(queryB);
+ query.bind(new Integer(startId));
+ result = (Collection) query.execute();
+ assertEquals(0, result.size());
+ tx.commit();
+
+
+ ++startId;
+ tx.begin();
+ // Create A and B objects and make persistent
+ a = new A();
+ a.setId(new Integer(startId));
+ a.setName("Ten_2");
+ b = new B();
+ b.setId(a.getId());
+ b.setDescription("Detail_2");
+ a.getItems().add(b);
+ database.makePersistent(b);
+ database.makePersistent(a);
+ // Delete A and B
+ database.deletePersistent(a);
+ database.deletePersistent(b);
+ tx.commit();
+ tx.begin();
+ query = odmg.newOQLQuery();
+ query.create(queryA);
+ query.bind(new Integer(startId));
+ result = (Collection) query.execute();
+ assertEquals(0, result.size());
+
+ query = odmg.newOQLQuery();
+ query.create(queryB);
+ query.bind(new Integer(startId));
+ result = (Collection) query.execute();
+ assertEquals(0, result.size());
+ tx.commit();
+
+ ++startId;
+ tx = odmg.newTransaction();
+ tx.begin();
+ // Create A and B objects and make persistent
+ a = new A();
+ a.setId(new Integer(startId));
+ a.setName("Ten");
+ tx.lock(a, Transaction.WRITE);
+ b = new B();
+ b.setId(a.getId());
+ b.setDescription("Detail");
+ a.getItems().add(b);
+ tx.lock(b, Transaction.WRITE);
+ tx.checkpoint();
+ // Delete A and B
+ database.deletePersistent(a);
+ database.deletePersistent(b);
+ tx.commit();
+ tx.begin();
+ query = odmg.newOQLQuery();
+ query.create(queryA);
+ query.bind(new Integer(startId));
+ result = (Collection) query.execute();
+ assertEquals(0, result.size());
+
+ query = odmg.newOQLQuery();
+ query.create(queryB);
+ query.bind(new Integer(startId));
+ result = (Collection) query.execute();
+ assertEquals(0, result.size());
+ tx.commit();
+ }
+
+
+ public static class A
+ {
+ private Integer id;
+ private String name;
+ private List items;
+
+ public A()
+ {
+ items = new ArrayList();
+ }
+
+ public Integer getId()
+ {
+ return id;
+ }
+
+ public void setId(Integer id)
+ {
+ this.id = id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public List getItems()
+ {
+ return items;
+ }
+
+ public void setItems(List items)
+ {
+ this.items = items;
+ }
+ }
+
+ public static class B
+ {
+ private Integer id;
+ private String description;
+
+ public B()
+ {
+ }
+
+ public Integer getId()
+ {
+ return id;
+ }
+
+ public void setId(Integer id)
+ {
+ this.id = id;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public void setDescription(String description)
+ {
+ this.description = description;
}
}
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/repository_junit_odmg.xml
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/repository_junit_odmg.xml?rev=421004&r1=421003&r2=421004&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/repository_junit_odmg.xml (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/repository_junit_odmg.xml Tue Jul 11 14:58:06 2006
@@ -2380,4 +2380,47 @@
</reference-descriptor>
</class-descriptor>
+<class-descriptor
+ class="org.apache.ojb.odmg.UserTestCases$A"
+ table="UTC_A">
+
+ <field-descriptor
+ name="id"
+ column="ID_"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="false"/>
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"/>
+
+ <collection-descriptor
+ name="items"
+ element-class-ref="org.apache.ojb.odmg.UserTestCases$B"
+ auto-retrieve="true"
+ auto-update="none"
+ auto-delete="none">
+ <inverse-foreignkey field-ref="id"/>
+ </collection-descriptor>
+</class-descriptor>
+
+<class-descriptor
+ class="org.apache.ojb.odmg.UserTestCases$B"
+ table="UTC_B">
+
+ <field-descriptor
+ name="id"
+ column="ID_"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="false"/>
+
+ <field-descriptor
+ name="description"
+ column="DESCRIPTION"
+ jdbc-type="VARCHAR"/>
+</class-descriptor>
+
<!-- Mapping of classes used in junit tests and tutorials ends here -->
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org