Andrus,
Are you interested in the joins support (and outer join support) that
I added to 1.2? I can try to get it integrated into either 2.0 or
3.0 later this week if you want. The biggest weakness was the
expression language support backing it.
On 4/1/07, aadamchi..pache.org <aadamchik@apache.org> wrote:
> Author: aadamchik
> Date: Sun Apr 1 06:33:06 2007
> New Revision: 524591
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=524591
> Log:
> CAY-452: EJB QL Cayenne Query
> starting on the joins support - initial unit tests
>
> Added:
> cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java
> cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLJoinsTest.xml
>
> Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java
> URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java?view=auto&rev=524591
> ==============================================================================
> --- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java (added)
> +++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java Sun Apr 1 06:33:06 2007
>.. -0,0 +1,89 @@
> +/*****************************************************************
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + ****************************************************************/
> +package org.apache.cayenne.access;
> +
> +import java.util.HashSet;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Set;
> +
> +import org.apache.art.Artist;
> +import org.apache.cayenne.DataObjectUtils;
> +import org.apache.cayenne.query.EJBQLQuery;
> +import org.apache.cayenne.unit.CayenneCase;
> +
> +public class DataContextEJBQLJoinsTest extends CayenneCase {
> +
> + protected void setUp() throws Exception {
> + deleteTestData();
> + }
> +
> + public void testThetaJoins() throws Exception {
> + createTestData("testThetaJoins");
> +
> +// String ejbql = "SELECT DISTINCT a "
> +// + "FROM Artist a, Painting b "
> +// + "WHERE a.artistName = b.paintingTitle";
> +//
> +// List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
> +// assertEquals(2, artists.size());
> +//
> +// Set names = new HashSet(2);
> +// Iterator it = artists.iterator();
> +// while (it.hasNext()) {
> +// Artist a = (Artist) it.next();
> +// names.add(a.getArtistName());
> +// }
> +//
> +// assertTrue(names.contains("AA1"));
> +// assertTrue(names.contains("BB2"));
> + }
> +
> + public void testInnerJoins() throws Exception {
> + createTestData("testInnerJoins");
> +
> +// String ejbql = "SELECT a "
> +// + "FROM Artist a INNER JOIN a.paintingArray p "
> +// + "WHERE a.artistName = 'A1'";
> +//
> +// List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
> +// assertEquals(1, artists.size());
> +// assertEquals(33001, DataObjectUtils.intPKForObject((Artist) artists.get(0)));
> + }
> +
> + public void testOuterJoins() throws Exception {
> + createTestData("testInnerJoins");
> +
> + // String ejbql = "SELECT a "
> + // + "FROM Artist a LEFT JOIN a.paintingArray p "
> + // + "WHERE a.artistName = 'A1'";
> + //
> + // List artists = createDataContext().performQuery(new EJBQLQuery(ejbql));
> + // assertEquals(2, artists.size());
> + // Set ids = new HashSet(2);
> + // Iterator it = artists.iterator();
> + // while (it.hasNext()) {
> + // Artist a = (Artist) it.next();
> + // ids.add(DataObjectUtils.pkForObject(a));
> + // }
> + //
> + // assertTrue(ids.contains(new Integer(33001)));
> + // assertTrue(ids.contains(new Integer(33005)));
> + }
> +}
>
> Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLJoinsTest.xml
> URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLJoinsTest.xml?view=auto&rev=524591
> ==============================================================================
> --- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLJoinsTest.xml (added)
> +++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLJoinsTest.xml Sun Apr 1 06:33:06 2007
>.. -0,0 +1,97 @@
> +<?xml version="1.0" encoding="UTF-8" ?>
> +<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
> +
> +<beans default-lazy-init="true">
> + <bean id="A1" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
> + <constructor-arg><value>
> + insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33001, 'AA1')
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="A2" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
> + <constructor-arg><value>
> + insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33002, 'AA2')
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="A3" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
> + <constructor-arg><value>
> + insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33003, 'BB1')
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="A4" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
> + <constructor-arg><value>
> + insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33004, 'BB2')
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="A5" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
> + <constructor-arg><value>
> + insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33005, 'AA1')
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="P11" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Painting</value></constructor-arg>
> + <constructor-arg><value>
> + INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ARTIST_ID, ESTIMATED_PRICE) VALUES (33001, 'P1', 33001, 3000)
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="P12" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Painting</value></constructor-arg>
> + <constructor-arg><value>
> + INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ARTIST_ID, ESTIMATED_PRICE) VALUES (33002, 'P2', 33002, 5000)
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="P13" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Painting</value></constructor-arg>
> + <constructor-arg><value>
> + INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ARTIST_ID, ESTIMATED_PRICE) VALUES (33003, 'AA1', 33001, 3000)
> + </value></constructor-arg>
> + </bean>
> +
> + <bean id="P23" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
> + <constructor-arg type="java.lang.Class"><value>org.apache.art.Painting</value></constructor-arg>
> + <constructor-arg><value>
> + INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ARTIST_ID, ESTIMATED_PRICE) VALUES (33004, 'BB2', 33002, 3000)
> + </value></constructor-arg>
> + </bean>
> +
> +
> + <!-- ======================================= -->
> + <!-- Data Sets -->
> + <!-- ======================================= -->
> +
> + <bean id="testThetaJoins" class="java.util.ArrayList">
> + <constructor-arg>
> + <list>
> + <ref bean="A1"/>
> + <ref bean="A2"/>
> + <ref bean="A3"/>
> + <ref bean="A4"/>
> + <ref bean="P11"/>
> + <ref bean="P12"/>
> + <ref bean="P13"/>
> + <ref bean="P23"/>
> + </list>
> + </constructor-arg>
> + </bean>
> +
> + <bean id="testInnerJoins" class="java.util.ArrayList">
> + <constructor-arg>
> + <list>
> + <ref bean="A1"/>
> + <ref bean="A5"/>
> + <ref bean="P11"/>
> + </list>
> + </constructor-arg>
> + </bean>
> +</beans>
> \ No newline at end of file
>
>
>
This archive was generated by hypermail 2.0.0 : Sun Apr 01 2007 - 20:51:33 EDT