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 2005/03/10 14:11:17 UTC

cvs commit: db-ojb/src/test/org/apache/ojb repository_junit_reference.xml

arminw      2005/03/10 05:11:17

  Modified:    src/schema Tag: OJB_1_0_RELEASE ojbtest-schema.xml
               src/test/org/apache/ojb/broker Tag: OJB_1_0_RELEASE
                        ReferenceTest.java
               src/test/org/apache/ojb Tag: OJB_1_0_RELEASE
                        repository_junit_reference.xml
  Log:
  add new tests using an interface as collection-descriptor ref-class
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.80.2.13 +5 -1      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.80.2.12
  retrieving revision 1.80.2.13
  diff -u -r1.80.2.12 -r1.80.2.13
  --- ojbtest-schema.xml	2 Mar 2005 20:13:49 -0000	1.80.2.12
  +++ ojbtest-schema.xml	10 Mar 2005 13:11:16 -0000	1.80.2.13
  @@ -825,18 +825,22 @@
       <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_COL_REF" type="INTEGER"/>
           <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_COL_REF" type="INTEGER"/>
           <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="NAME_C" type="VARCHAR" size="150"/>
  +        <column name="FK_COL_REF" type="INTEGER"/>
           <column name="FK_REF" type="INTEGER"/>
       </table>
   
  
  
  
  No                   revision
  No                   revision
  1.17.2.1  +318 -55   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.17
  retrieving revision 1.17.2.1
  diff -u -r1.17 -r1.17.2.1
  --- ReferenceTest.java	22 May 2004 16:23:45 -0000	1.17
  +++ ReferenceTest.java	10 Mar 2005 13:11:16 -0000	1.17.2.1
  @@ -3,6 +3,8 @@
   import java.io.Serializable;
   import java.util.Collection;
   import java.util.Iterator;
  +import java.util.List;
  +import java.util.ArrayList;
   
   import org.apache.ojb.broker.metadata.ClassDescriptor;
   import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
  @@ -39,6 +41,278 @@
           }
       }
   
  +    /**
  +     * Test the usage of interface as class-ref in collection-descriptor
  +     * when using inheritance.
  +     */
  +    public void testInterfaceAsCollectionRef_1()
  +    {
  +        // if(skipKnownIssueProblem("query using path via reference, like 'ref1.ref2.name'")) return;
  +        String name = "testQueryWithCollectionRef_" + System.currentTimeMillis();
  +        RefObject a = new ObjA();
  +        RefObject a2 = new ObjA();
  +        RefObject b = new ObjB();
  +        RefObject b2 = new ObjB();
  +        // this object has a 1:n relation
  +        ObjC c1 = new ObjC();
  +        // only used in the c object reference collection
  +        RefObject d1 = new ObjC();
  +        RefObject d2 = new ObjC();
  +        ObjC c2 = new ObjC();
  +
  +        c1.setName(name+"_third");
  +        b.setName(name+"_second_1");
  +        b2.setName(name+"_second_2");
  +        a.setName(name+"_first_1");
  +        a2.setName(name+"_first_2");
  +        d1.setName(name+"_d1");
  +        d2.setName(name+"_d2");
  +        c2.setName(name + "_c2");
  +
  +        c1.setNameC(name + "_1");
  +        c2.setNameC(name + "_2");
  +
  +        a.setRef(b);
  +        b.setRef(c1);
  +        a2.setRef(b2);
  +
  +        List refList = new ArrayList();
  +        refList.add(a);
  +        refList.add(b2);
  +        refList.add(d1);
  +        c1.setReferences(refList);
  +        List refList2 = new ArrayList();
  +        refList2.add(d2);
  +        c2.setReferences(refList2);
  +
  +        broker.beginTransaction();
  +        broker.store(a);
  +        broker.store(a2);
  +        broker.store(c2);
  +        broker.commitTransaction();
  +
  +        // check existence of objects
  +        Criteria crit = new Criteria();
  +        crit.addLike("name", name + "%");
  +        Query q = QueryFactory.newQuery(RefObject.class, crit);
  +        Collection result = broker.getCollectionByQuery(q);
  +        assertEquals(8, result.size());
  +
  +        // expect all 'C' objects with 1:n reference object
  +        // with name '..._d1' --> 'c1'
  +        crit = new Criteria();
  +        crit.addEqualTo("references.name", name+"_d1");
  +        q = QueryFactory.newQuery(ObjC.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(1, result.size());
  +        ObjC newC = (ObjC) result.iterator().next();
  +        assertEquals(name + "_1", newC.getNameC());
  +
  +        // expect all 'C' objects with 1:n reference object
  +        // with nameC '..._%' --> 'c1' 'c2'
  +        crit = new Criteria();
  +        crit.addLike("nameC", name+"_%");
  +        q = QueryFactory.newQuery(ObjC.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(2, result.size());
  +
  +        // expect all 'B' objects with 1:1 to an RefObject which
  +        // has an 1:n reference object
  +        // with name '..._d1' --> 'b'
  +        crit = new Criteria();
  +        crit.addEqualTo("ref.references.name", name+"_d1");
  +        // add this because only 'C' objects have a 1:n reference
  +        crit.addPathClass("ref", ObjC.class);
  +        q = QueryFactory.newQuery(ObjB.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(1, result.size());
  +        ObjB newB = (ObjB) result.iterator().next();
  +        assertNotNull(newB.getRef());
  +        assertTrue(newB.getRef() instanceof ObjC);
  +        newC = (ObjC) newB.getRef();
  +        assertEquals(3, newC.getReferences().size());
  +
  +        // expect all 'B' objects with 1:1 to an RefObject which
  +        // has an 1:n reference object
  +        // with name '..._d1' --> 'b'
  +        crit = new Criteria();
  +        crit.addLike("ref.nameC", name+"_%");
  +        // add this because only 'C' objects have a 1:n reference
  +        crit.addPathClass("ref", ObjC.class);
  +        q = QueryFactory.newQuery(ObjB.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(1, result.size());
  +        newB = (ObjB) result.iterator().next();
  +        assertNotNull(newB.getRef());
  +        assertTrue(newB.getRef() instanceof ObjC);
  +        newC = (ObjC) newB.getRef();
  +        assertEquals(3, newC.getReferences().size());
  +
  +// TODO: Make these queries work
  +//        // expect all A's which third level 'ref' has a 'references'
  +//        // field collection, this is only valid for 'C' class objects
  +//        // and references contain '..._d1' object --> 'a'
  +//        crit = new Criteria();
  +//        crit.addLike("name", name+"_%");
  +//        Criteria critAnd = new Criteria();
  +//        critAnd.addEqualTo("ref.ref.references.name", name+"_d1");
  +//        // TODO: this doesn't work, how can we point to the right class?
  +//        critAnd.addPathClass("ref.ref", ObjC.class);
  +//        crit.addAndCriteria(critAnd);
  +//        q = QueryFactory.newQuery(ObjA.class, crit);
  +//        result = broker.getCollectionByQuery(q);
  +//        assertEquals(1, 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));
  +//        }
  +//
  +//        // expect all A's with reference object named '_second%' and
  +//        // which third level 'ref' has a 'references'
  +//        // field collection, this is only valid for 'C' class objects
  +//        // and references contain '..._second%' objects --> 'a'
  +//        crit = new Criteria();
  +//        crit.addLike("name", name+"_%");
  +//        critAnd = new Criteria();
  +//        critAnd.addLike("ref.name", name+"_second%");
  +//        crit.addAndCriteria(critAnd);
  +//        Criteria critAnd2 = new Criteria();
  +//        critAnd2.addLike("ref.ref.references.name", name+"_second%");
  +//        crit.addAndCriteria(critAnd2);
  +//        q = QueryFactory.newQuery(ObjA.class, crit);
  +//        result = broker.getCollectionByQuery(q);
  +//        assertEquals(1, 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));
  +//        }
  +    }
  +
  +    /**
  +     * Test the usage of interface as class-ref in collection-descriptor
  +     * when using inheritance.
  +     */
  +    public void testInterfaceAsCollectionRef_2()
  +    {
  +        // if(skipKnownIssueProblem("query using path via reference, like 'ref1.ref2.name'")) return;
  +        String name = "testQueryWithCollectionRef_" + System.currentTimeMillis();
  +        RefObject a = new ObjA();
  +        RefObject a2 = new ObjA();
  +        RefObject b = new ObjB();
  +        RefObject b2 = new ObjB();
  +        // this object has a 1:n relation
  +        ObjC c = new ObjC();
  +        // only used in the c object reference collection
  +        RefObject d = new ObjC();
  +
  +        c.setName(name+"_third");
  +        b.setName(name+"_second_1");
  +        b2.setName(name+"_second_2");
  +        a.setName(name+"_first_1");
  +        a2.setName(name+"_first_2");
  +        d.setName(name+"_none");
  +
  +        a.setRef(b);
  +        b.setRef(c);
  +        a2.setRef(b2);
  +
  +        List refList = new ArrayList();
  +        refList.add(a);
  +        refList.add(b2);
  +        refList.add(d);
  +        c.setReferences(refList);
  +
  +        broker.beginTransaction();
  +        broker.store(a);
  +        broker.store(a2);
  +        broker.commitTransaction();
  +
  +        // check existence of objects
  +        Criteria crit = new Criteria();
  +        crit.addEqualTo("name", name+"_third");
  +        Query q = QueryFactory.newQuery(RefObject.class, crit);
  +        Collection result = broker.getCollectionByQuery(q);
  +        assertEquals(1, result.size());
  +        ObjC newC = (ObjC) result.iterator().next();
  +        assertNotNull(newC.getReferences());
  +        assertEquals(3, newC.getReferences().size());
  +
  +        // test n-level depth
  +        //*****************************************
  +        crit = new Criteria();
  +        crit.addEqualTo("ref.ref.name", name+"_third");
  +        q = QueryFactory.newQuery(ObjA.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(1, result.size());
  +        //*****************************************
  +
  +        crit = new Criteria();
  +        crit.addLike("references.name", name+"_first%");
  +        q = QueryFactory.newQuery(ObjC.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(1, result.size());
  +
  +        // expect all A's with name "_first_2" or with second
  +        // level 'ref' "_third" in this case object 'a' and 'a2'
  +        crit = new Criteria();
  +        crit.addEqualTo("name", name+"_first_2");
  +        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));
  +        }
  +
  +        // expect all A's which second level 'ref' is "_third"
  +        // in this case object 'a'
  +        crit = new Criteria();
  +        crit.addLike("name", name+"_%");
  +        Criteria critAnd = new Criteria();
  +        critAnd.addEqualTo("ref.ref.name", name+"_third");
  +        crit.addAndCriteria(critAnd);
  +        q = QueryFactory.newQuery(ObjA.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(1, 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));
  +        }
  +
  +        // expect all A's with first level 'ref' "_second%"
  +        // in this case object 'a' and 'a2'
  +        crit = new Criteria();
  +        crit.addLike("ref.name", name+"_second%");
  +        critAnd = new Criteria();
  +        critAnd.addLike("name", name+"%");
  +        crit.addAndCriteria(critAnd);
  +        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 testDeepPathQuery()
       {
           // if(skipKnownIssueProblem("query using path via reference, like 'ref1.ref2.name'")) return;
  @@ -47,7 +321,7 @@
           RefObject a2 = new ObjA();
           RefObject b = new ObjB();
           RefObject b2 = new ObjB();
  -        RefObject c = new ObjC();
  +        ObjC c = new ObjC();
   
           c.setName(name+"_third");
           b.setName(name+"_second_1");
  @@ -59,6 +333,11 @@
           b.setRef(c);
           a2.setRef(b2);
   
  +        List refList = new ArrayList();
  +        refList.add(a);
  +        refList.add(b2);
  +        c.setReferences(refList);
  +
           broker.beginTransaction();
           broker.store(a);
           broker.store(a2);
  @@ -73,6 +352,13 @@
   
           // check existence of object
           crit = new Criteria();
  +        crit.addLike("name", name+"_third%");
  +        q = QueryFactory.newQuery(ObjC.class, crit);
  +        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);
  @@ -85,6 +371,13 @@
           result = broker.getCollectionByQuery(q);
           assertEquals(2, result.size());
   
  +        // check existence of objects
  +        crit = new Criteria();
  +        crit.addLike("name", name+"%");
  +        q = QueryFactory.newQuery(RefObject.class, crit);
  +        result = broker.getCollectionByQuery(q);
  +        assertEquals(5, result.size());
  +
           // test n-level depth
           //*****************************************
           crit = new Criteria();
  @@ -1394,7 +1687,7 @@
           private String regionCountry;
           private Region region;
   
  -        private Wine()
  +        public Wine()
           {
           }
   
  @@ -1474,7 +1767,7 @@
           private String country;
           private String description;
   
  -        private Region()
  +        public Region()
           {
           }
   
  @@ -1524,6 +1817,8 @@
           void setName(String name);
           RefObject getRef();
           void setRef(RefObject ref);
  +        Integer getFkColRef();
  +        void setFkColRef(Integer id);
       }
   
       public static class ObjA implements RefObject
  @@ -1531,6 +1826,7 @@
           Integer id;
           String name;
           RefObject ref;
  +        Integer fkColRef;
   
           public Integer getId()
           {
  @@ -1552,41 +1848,14 @@
               this.name = name;
           }
   
  -        public RefObject getRef()
  +        public Integer getFkColRef()
           {
  -            return ref;
  +            return fkColRef;
           }
   
  -        public void setRef(RefObject ref)
  +        public void setFkColRef(Integer fkColRef)
           {
  -            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;
  +            this.fkColRef = fkColRef;
           }
   
           public RefObject getRef()
  @@ -1600,40 +1869,34 @@
           }
       }
   
  -    public static class ObjC implements RefObject
  +    public static class ObjB extends ObjA
       {
  -        Integer id;
  -        String name;
  -        RefObject ref;
   
  -        public Integer getId()
  -        {
  -            return id;
  -        }
  +    }
   
  -        public void setId(Integer id)
  -        {
  -            this.id = id;
  -        }
  +    public static class ObjC extends ObjA
  +    {
  +        String nameC;
  +        List references;
   
  -        public String getName()
  +        public String getNameC()
           {
  -            return name;
  +            return nameC;
           }
   
  -        public void setName(String name)
  +        public void setNameC(String nameC)
           {
  -            this.name = name;
  +            this.nameC = nameC;
           }
   
  -        public RefObject getRef()
  +        public List getReferences()
           {
  -            return ref;
  +            return references;
           }
   
  -        public void setRef(RefObject ref)
  +        public void setReferences(List references)
           {
  -            this.ref = ref;
  +            this.references = references;
           }
       }
   }
  
  
  
  No                   revision
  No                   revision
  1.17.2.3  +39 -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.17.2.2
  retrieving revision 1.17.2.3
  diff -u -r1.17.2.2 -r1.17.2.3
  --- repository_junit_reference.xml	28 Sep 2004 14:13:50 -0000	1.17.2.2
  +++ repository_junit_reference.xml	10 Mar 2005 13:11:17 -0000	1.17.2.3
  @@ -486,6 +486,13 @@
           />
   
           <field-descriptor
  +             name="fkColRef"
  +             column="FK_COL_REF"
  +             primarykey="false"
  +             jdbc-type="INTEGER"
  +        />
  +
  +        <field-descriptor
                name="fkId"
                column="FK_REF"
                primarykey="false"
  @@ -523,6 +530,13 @@
           />
   
           <field-descriptor
  +             name="fkColRef"
  +             column="FK_COL_REF"
  +             primarykey="false"
  +             jdbc-type="INTEGER"
  +        />
  +
  +        <field-descriptor
               name="fkId"
               column="FK_REF"
               primarykey="false"
  @@ -560,6 +574,19 @@
           />
   
           <field-descriptor
  +             name="nameC"
  +             column="NAME_C"
  +             jdbc-type="VARCHAR"
  +        />
  +
  +        <field-descriptor
  +             name="fkColRef"
  +             column="FK_COL_REF"
  +             primarykey="false"
  +             jdbc-type="INTEGER"
  +        />
  +
  +        <field-descriptor
                name="fkId"
                column="FK_REF"
                primarykey="false"
  @@ -576,6 +603,17 @@
               auto-delete="false">
                   <foreignkey field-ref="fkId"/>
           </reference-descriptor>
  +
  +        <collection-descriptor
  +            name="references"
  +            element-class-ref="org.apache.ojb.broker.ReferenceTest$RefObject"
  +            proxy="false"
  +            auto-retrieve="true"
  +            auto-update="true"
  +            auto-delete="false"
  +        >
  +            <inverse-foreignkey field-ref="fkColRef"/>
  +        </collection-descriptor>
       </class-descriptor>
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org