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 2004/05/03 18:13:39 UTC
cvs commit: db-ojb/src/schema ojbtest-schema.xml
arminw 2004/05/03 09:13:39
Modified: src/test/org/apache/ojb repository_junit_reference.xml
src/test/org/apache/ojb/broker ReferenceTest.java
src/schema ojbtest-schema.xml
Log:
add new test for query using references in path
Revision Changes Path
1.12 +119 -1 db-ojb/src/test/org/apache/ojb/repository_junit_reference.xml
Index: repository_junit_reference.xml
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/repository_junit_reference.xml,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- repository_junit_reference.xml 6 Apr 2004 19:22:10 -0000 1.11
+++ repository_junit_reference.xml 3 May 2004 16:13:39 -0000 1.12
@@ -442,6 +442,124 @@
/>
</class-descriptor>
+ <class-descriptor class="org.apache.ojb.broker.ReferenceTest$RefObject">
+ <extent-class class-ref="org.apache.ojb.broker.ReferenceTest$ObjA"/>
+ <extent-class class-ref="org.apache.ojb.broker.ReferenceTest$ObjB"/>
+ <extent-class class-ref="org.apache.ojb.broker.ReferenceTest$ObjC"/>
+ </class-descriptor>
+
+ <class-descriptor
+ class="org.apache.ojb.broker.ReferenceTest$ObjA"
+ table="REF_OBJ_A">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="true"
+ />
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"
+ />
+
+ <field-descriptor
+ name="fkId"
+ column="FK_REF"
+ primarykey="false"
+ jdbc-type="INTEGER"
+ access="anonymous"
+ />
+
+ <reference-descriptor
+ name="ref"
+ class-ref="org.apache.ojb.broker.ReferenceTest$RefObject"
+ proxy="false"
+ auto-retrieve="true"
+ auto-update="true"
+ auto-delete="false">
+ <foreignkey field-ref="fkId"/>
+ </reference-descriptor>
+ </class-descriptor>
+
+ <class-descriptor
+ class="org.apache.ojb.broker.ReferenceTest$ObjB"
+ table="REF_OBJ_B">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="true"
+ />
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"
+ />
+
+ <field-descriptor
+ name="fkId"
+ column="FK_REF"
+ primarykey="false"
+ jdbc-type="INTEGER"
+ access="anonymous"
+ />
+
+ <reference-descriptor
+ name="ref"
+ class-ref="org.apache.ojb.broker.ReferenceTest$RefObject"
+ proxy="false"
+ auto-retrieve="true"
+ auto-update="true"
+ auto-delete="false">
+ <foreignkey field-ref="fkId"/>
+ </reference-descriptor>
+ </class-descriptor>
+
+ <class-descriptor
+ class="org.apache.ojb.broker.ReferenceTest$ObjC"
+ table="REF_OBJ_C">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="true"
+ />
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"
+ />
+
+ <field-descriptor
+ name="fkId"
+ column="FK_REF"
+ primarykey="false"
+ jdbc-type="INTEGER"
+ access="anonymous"
+ />
+
+ <reference-descriptor
+ name="ref"
+ class-ref="org.apache.ojb.broker.ReferenceTest$RefObject"
+ proxy="false"
+ auto-retrieve="true"
+ auto-update="true"
+ auto-delete="false">
+ <foreignkey field-ref="fkId"/>
+ </reference-descriptor>
+ </class-descriptor>
+
+
<!-- ************************************************* -->
1.14 +186 -9 db-ojb/src/test/org/apache/ojb/broker/ReferenceTest.java
Index: ReferenceTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/ReferenceTest.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- ReferenceTest.java 5 Apr 2004 17:11:48 -0000 1.13
+++ ReferenceTest.java 3 May 2004 16:13:39 -0000 1.14
@@ -9,7 +9,7 @@
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryFactory;
-import org.apache.ojb.junit.OJBTestCase;
+import org.apache.ojb.junit.PBTestCase;
/**
* Test case for checking the management of references.
@@ -17,10 +17,9 @@
* @author <a href="mailto:armin@codeAuLait.de">Armin Waibel</a>
* @version $Id$
*/
-public class ReferenceTest extends OJBTestCase
+public class ReferenceTest extends PBTestCase
{
private static String REF_TEST_STRING = "refTest";
- private PersistenceBroker broker;
public static void main(String[] args)
{
@@ -28,11 +27,6 @@
junit.textui.TestRunner.main(arr);
}
- public void setUp() throws PBFactoryException
- {
- broker = PersistenceBrokerFactory.defaultPersistenceBroker();
- }
-
public void tearDown()
{
if(broker != null)
@@ -45,6 +39,68 @@
}
}
+ public void testDeepPathQuery()
+ {
+ /*
+ this bug should be fixed before final 1.0, because it's a basic
+ feature to build query including referenced objects
+ */
+ // if(skipKnownIssueProblem("query using path via reference, like 'ref1.ref2.name'")) return;
+ String name = "testDeepPathQuery_" + System.currentTimeMillis();
+ RefObject a = new ObjA();
+ RefObject b = new ObjB();
+ RefObject c = new ObjC();
+ c.setName(name+"_third");
+ RefObject a2 = new ObjA();
+ a2.setName(name+"_first");
+ a.setRef(b);
+ b.setRef(c);
+ broker.beginTransaction();
+ broker.store(a);
+ broker.store(a2);
+ broker.commitTransaction();
+
+ // check existence of object
+ Criteria crit = new Criteria();
+ crit.addLike("name", name+"%");
+ Query q = QueryFactory.newQuery(ObjA.class, crit);
+ Collection result = broker.getCollectionByQuery(q);
+ assertEquals(1, result.size());
+
+ // check existence of object
+ crit = new Criteria();
+ crit.addLike("name", name+"%");
+ q = QueryFactory.newQuery(ObjC.class, crit);
+ result = broker.getCollectionByQuery(q);
+ assertEquals(1, result.size());
+
+ // here the pain starts
+ //*****************************************
+ crit = new Criteria();
+ crit.addEqualTo("ref.ref.name", name+"_third");
+ q = QueryFactory.newQuery(ObjA.class, crit);
+ result = broker.getCollectionByQuery(q);
+ assertEquals(1, result.size());
+ //*****************************************
+
+ // similar but more complex query
+ crit = new Criteria();
+ crit.addEqualTo("name", name+"_first");
+ Criteria critOr = new Criteria();
+ critOr.addEqualTo("ref.ref.name", name+"_third");
+ crit.addOrCriteria(critOr);
+ q = QueryFactory.newQuery(ObjA.class, crit);
+ result = broker.getCollectionByQuery(q);
+ assertEquals(2, result.size());
+ for(Iterator iterator = result.iterator(); iterator.hasNext();)
+ {
+ RefObject ref = (RefObject) iterator.next();
+ assertTrue(ref instanceof ObjA);
+ String refName = ref.getName();
+ assertTrue(!(refName.indexOf(name)<0));
+ }
+ }
+
public void testAutoUpdateDeleteSettings()
{
changeRepositoryAutoSetting("ref", true, false, false);
@@ -1442,6 +1498,127 @@
public void setDescription(String description)
{
this.description = description;
+ }
+ }
+
+ public static interface RefObject
+ {
+ Integer getId();
+ void setId(Integer id);
+ String getName();
+ void setName(String name);
+ RefObject getRef();
+ void setRef(RefObject ref);
+ }
+
+ public static class ObjA implements RefObject
+ {
+ Integer id;
+ String name;
+ RefObject ref;
+
+ 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 RefObject getRef()
+ {
+ return ref;
+ }
+
+ public void setRef(RefObject ref)
+ {
+ this.ref = ref;
+ }
+ }
+
+ public static class ObjB implements RefObject
+ {
+ Integer id;
+ String name;
+ RefObject ref;
+
+ 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 RefObject getRef()
+ {
+ return ref;
+ }
+
+ public void setRef(RefObject ref)
+ {
+ this.ref = ref;
+ }
+ }
+
+ public static class ObjC implements RefObject
+ {
+ Integer id;
+ String name;
+ RefObject ref;
+
+ 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 RefObject getRef()
+ {
+ return ref;
+ }
+
+ public void setRef(RefObject ref)
+ {
+ this.ref = ref;
}
}
}
1.76 +31 -11 db-ojb/src/schema/ojbtest-schema.xml
Index: ojbtest-schema.xml
===================================================================
RCS file: /home/cvs/db-ojb/src/schema/ojbtest-schema.xml,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- ojbtest-schema.xml 24 Apr 2004 08:25:37 -0000 1.75
+++ ojbtest-schema.xml 3 May 2004 16:13:39 -0000 1.76
@@ -776,10 +776,10 @@
<table name="REF_WINE">
<column name="OBJ_ID" required="true" primaryKey="true" type="VARCHAR" size="100"/>
- <column name="REGION_NAME" type="VARCHAR" size="100" required="true"/>
- <column name="REGION_COUNTRY" type="VARCHAR" size="100" required="true"/>
- <column name="VINTAGE" type="VARCHAR" size="100"/>
- <column name="GRAPE" type="VARCHAR" size="100"/>
+ <column name="REGION_NAME" type="VARCHAR" size="150" required="true"/>
+ <column name="REGION_COUNTRY" type="VARCHAR" size="150" required="true"/>
+ <column name="VINTAGE" type="VARCHAR" size="150"/>
+ <column name="GRAPE" type="VARCHAR" size="150"/>
<foreign-key foreignTable="REF_REGION">
<reference local="REGION_NAME" foreign="NAME"/>
<reference local="REGION_COUNTRY" foreign="COUNTRY"/>
@@ -787,33 +787,53 @@
</table>
<table name="REF_REGION">
- <column name="NAME" required="true" primaryKey="true" type="VARCHAR" size="100"/>
- <column name="COUNTRY" required="true" primaryKey="true" type="VARCHAR" size="100"/>
- <column name="DESCRIPTION" type="VARCHAR" size="100"/>
+ <column name="NAME" required="true" primaryKey="true" type="VARCHAR" size="150"/>
+ <column name="COUNTRY" required="true" primaryKey="true" type="VARCHAR" size="150"/>
+ <column name="DESCRIPTION" type="VARCHAR" size="150"/>
</table>
+ <table name="REF_OBJ_A">
+ <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
+ <column name="FK_REF" type="INTEGER"/>
+ </table>
+
+ <table name="REF_OBJ_B">
+ <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
+ <column name="FK_REF" type="INTEGER"/>
+ </table>
+
+ <table name="REF_OBJ_C">
+ <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
+ <column name="FK_REF" type="INTEGER"/>
+ </table>
+
+
+
<table name="READTEST_ACCOUNT">
<column name="OJB_ID" required="true" primaryKey="true" type="INTEGER"/>
- <column name="NAME" type="VARCHAR" size="100"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
<column name="FK_REF" type="INTEGER"/>
</table>
<table name="READTEST_BUYER">
<column name="OJB_ID" required="true" primaryKey="true" type="INTEGER"/>
- <column name="NAME" type="VARCHAR" size="100"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
<column name="FK_REF" type="INTEGER"/>
</table>
<table name="READTEST_ADDRESS">
<column name="OJB_ID" required="true" primaryKey="true" type="INTEGER"/>
- <column name="NAME" type="VARCHAR" size="100"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
<column name="FK_REF" type="INTEGER"/>
</table>
<table name="READTEST_ADDRESS_TYPE">
<column name="OJB_ID" required="true" primaryKey="true" type="INTEGER"/>
- <column name="NAME" type="VARCHAR" size="100"/>
+ <column name="NAME" type="VARCHAR" size="150"/>
<column name="FK_REF" type="INTEGER"/>
</table>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org