Author: fancy
Date: Thu Mar 19 17:33:03 2009
New Revision: 756104

URL: http://svn.apache.org/viewvc?rev=756104&view=rev
Log:
OPENJPA-967 JPA2 add support for collection valued path thru KEY appear in FROM 
clause

Added:
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
Modified:
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
    
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
 Thu Mar 19 17:33:03 2009
@@ -251,7 +251,8 @@
             if (pstate.field.getKey().getTypeCode() == JavaTypes.PC)
                 return pstate.field.getKeyMapping().getTypeMapping();
             return null;
-        }
+        } else if (_keyPath)
+            return pstate.field.getDefiningMapping();
         if (pstate.field.getElement().getTypeCode() == JavaTypes.PC)
             return pstate.field.getElementMapping().getTypeMapping();
         if (pstate.field.getTypeCode() == JavaTypes.PC)
@@ -483,9 +484,6 @@
                 if (key && !itr.hasNext())
                     field = pstate.field;
 
-                if (_keyPath)
-                    pstate.field = field;
-
                 if (pstate.field != null) {
                     // if this is the second-to-last field and the last is
                     // the related field this field joins to, no need to
@@ -720,27 +718,12 @@
         selectColumns(sel, ctx, state, pks);
     }
 
-    private SQLBuffer getColumns(Select sel, ExpContext ctx, ExpState state) {
-        Column[] cols = getColumns(state);
-        SQLBuffer buf = new SQLBuffer(ctx.store.getDBDictionary());
-        for (int i = 0; i < cols.length; i++) {
-            buf.append(sel.getColumnAlias(cols[i], this));
-            if (i > 0)
-                buf.append(",");
-        }
-        return buf;
-    }
-
     public void selectColumns(Select sel, ExpContext ctx, ExpState state, 
         boolean pks) {
         ClassMapping mapping = getClassMapping(state);
         PathExpState pstate = (PathExpState) state;
-        if (mapping == null || !pstate.joinedRel) {
-            if (_keyPath)
-                sel.select(getColumns(sel, ctx, state), this);
-            else
-                sel.select(getColumns(state), pstate.joins);
-        }
+        if (mapping == null || !pstate.joinedRel || _keyPath)            
+            sel.select(getColumns(state), pstate.joins);
         else if (pks)
             sel.select(mapping.getPrimaryKeyColumns(), pstate.joins);
         else {
@@ -759,11 +742,8 @@
     public void groupBy(Select sel, ExpContext ctx, ExpState state) {
         ClassMapping mapping = getClassMapping(state);
         PathExpState pstate = (PathExpState) state;
-        if (mapping == null || !pstate.joinedRel)
-            if (_keyPath)
-                sel.groupBy(getColumns(sel, ctx, state));
-            else
-                sel.groupBy(getColumns(state), sel.outer(pstate.joins));
+        if (mapping == null || !pstate.joinedRel || _keyPath)
+            sel.groupBy(getColumns(state), sel.outer(pstate.joins));
         else {
             int subs = (_type == UNBOUND_VAR) ? Select.SUBS_JOINABLE
                 : Select.SUBS_ANY_JOINABLE;
@@ -774,11 +754,7 @@
 
     public void orderBy(Select sel, ExpContext ctx, ExpState state, 
         boolean asc) {
-        if (_keyPath)
-            sel.orderBy(getColumns(sel, ctx, state), asc,
-                sel.outer(state.joins), false, this.getSelectAs());
-        else
-            sel.orderBy(getColumns(state), asc, sel.outer(state.joins), false);
+        sel.orderBy(getColumns(state), asc, sel.outer(state.joins), false);
     }
 
     public Object load(ExpContext ctx, ExpState state, Result res)
@@ -818,8 +794,6 @@
             //    example: Map<Integer, Employee> emps
             ret = res.getObject(pstate.cols[0],
                 JavaSQLTypes.JDBC_DEFAULT, pstate.joins);
-        else if (_keyPath)
-            ret = res.getObject(this, JavaSQLTypes.JDBC_DEFAULT, pstate.joins);
         else
             ret = pstate.field.loadProjection(ctx.store, ctx.fetch, res, 
                 pstate.joins);
@@ -902,7 +876,7 @@
         if (pstate.field == null)
             sql.append("1");
         else
-            pstate.field.appendIndex(sql, sel, pstate.joins);;
+            pstate.field.appendIndex(sql, sel, pstate.joins);
     }
 
     public void appendType(Select sel, ExpContext ctx, ExpState state, 

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
 Thu Mar 19 17:33:03 2009
@@ -2012,7 +2012,7 @@
                     buf.append(" AND ");
 
                 // add in "t0.PK = MYTABLE.PK"
-                buf.append(sel.getColumnAlias(cols[i], null)).append(" = ").
+                buf.append(sel.getColumnAlias(cols[i])).append(" = ").
                     append(table).append(catalogSeparator).append(cols[i]);
             }
             buf.append(")");

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
 Thu Mar 19 17:33:03 2009
@@ -743,27 +743,29 @@
         return getColumnAlias(col, table, getJoins(joins, false));
     }
 
+    /**
+     * Return the alias for the give column
+     */
     public String getColumnAlias(Column col, Object path) {
         String columnName = col.getName();
-        String tableName = col.getTable().getFullName();
-        Object[] entries = _aliases.entrySet().toArray();
-        Integer tableAlias = null;
-        for (int i = entries.length-1; i >= 0; i--) {
-            Object obj = ((Map.Entry) entries[i]).getKey();
-            Key key = null;
-            if (obj instanceof Key)
-                key = (Key) obj;
-            String str = key != null ? key.getKey().toString() : 
obj.toString();
-            if (str.equals(tableName)) {
-                tableAlias = (Integer) ((Map.Entry) entries[i]).getValue();
-                break;
-            }
-        }
-        if (tableAlias != null)
-            return new 
StringBuffer("t").append(tableAlias.toString()).append(".").
-                append(columnName).toString();
-        else
-            throw new InternalException(path.toString());
+        Table table = col.getTable();
+        String tableAlias = null;
+        Iterator itr = getJoinIterator();
+        while (itr.hasNext()) {
+            Join join = (Join) itr.next();
+            if (join != null) {
+                if (join.getTable1() == table)
+                    tableAlias = join.getAlias1();
+                else if (join.getTable2() == table)
+                    tableAlias = join.getAlias2();
+                if (tableAlias != null)
+                    return new StringBuffer(tableAlias).append(".").
+                        append(columnName).toString();
+            }
+        }
+        throw new InternalException("Can not resolve alias for field: " +
+            path.toString() + " mapped to column: " + columnName +
+            " table: "+table.getName());
     }
 
     /**

Modified: 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
 (original)
+++ 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
 Thu Mar 19 17:33:03 2009
@@ -572,7 +572,12 @@
      */
     private Expression addJoin(JPQLNode node, boolean inner, Expression exp) {
         // the type will be the declared type for the field
-        Path path = getPath(firstChild(node), false, inner);
+        JPQLNode firstChild = firstChild(node);
+        Path path = null;
+        if (firstChild.id == JJTQUALIFIEDPATH)
+            path = (Path) getQualifiedPath(firstChild);
+        else
+            path = getPath(firstChild, false, inner);
 
         JPQLNode alias = node.getChildCount() >= 2 ? right(node) : null;
         // OPENJPA-15 support subquery's from clause do not start with 

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
 Thu Mar 19 17:33:03 2009
@@ -20,6 +20,7 @@
 
 import javax.persistence.Entity;
 import javax.persistence.Id;
+import javax.persistence.OneToOne;
 import javax.persistence.Table;
 
 @Entity
@@ -29,6 +30,17 @@
     int id;
 
     String name;
+    
+    @OneToOne
+    PhoneNumber phone;
+
+    public PhoneNumber getPhone() {
+        return phone;
+    }
+
+    public void setPhone(PhoneNumber phone) {
+        this.phone = phone;
+    }
 
     public int getId() {
         return id;

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
 Thu Mar 19 17:33:03 2009
@@ -29,6 +29,17 @@
 
     @ManyToMany(mappedBy="phones")
     Map<Division, Employee> emps = new HashMap<Division, Employee>();
+    
+    @OneToOne(mappedBy="phone")
+    Division division;
+
+    public Division getDivision() {
+        return division;
+    }
+
+    public void setDivision(Division division) {
+        this.division = division;
+    }
 
     public int getNumber() {
         return number;

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
 Thu Mar 19 17:33:03 2009
@@ -129,6 +129,38 @@
             " in (e.phones) p GROUP BY KEY(p).name";
         List rs5 = em.createQuery(query5).getResultList();
 
+        em.clear();
+        query2 = "select p.division, KEY(p), KEY(p).name from Employee e, " +
+            " in (e.phones) p ORDER BY KEY(p).name DESC";
+        rs2 = em.createQuery(query2).getResultList();        
+
+        query2 = "select KEY(e) from PhoneNumber p, " +
+            " in (p.emps) e";
+        rs2 = em.createQuery(query2).getResultList();        
+
+        query2 = "select KEY(e) from PhoneNumber p " +
+            " left join p.emps e";
+        rs2 = em.createQuery(query2).getResultList();        
+
+        query = "select p.division, KEY(e), KEY(e).name as nm" +
+            " from PhoneNumber p, " +
+            " in (p.emps) e order by nm";
+        rs = em.createQuery(query).getResultList();
+        String n1 = ((Division) ((Object[]) rs.get(0))[1]).getName();
+        String n2 = (String) ((Object[]) rs.get(0))[2];
+        assertEquals(n1, n2);
+
+        query = "select d.name, KEY(e), KEY(e).name from PhoneNumber p, " +
+            " in (p.emps) e, Division d";
+        rs = em.createQuery(query).getResultList();
+        query = "select d.name, KEY(e), KEY(e).name from " +
+            "Division d join d.phone p, " +
+            " in (p.emps) e order by d.name";
+        rs = em.createQuery(query).getResultList();
+        n1 = ((Division) ((Object[]) rs.get(0))[1]).getName();
+        n2 = (String) ((Object[]) rs.get(0))[2];
+        assertEquals(n1, n2);
+
         em.close();
     }
 
@@ -169,6 +201,8 @@
             phoneNumber.addEmployees(div, e);
             e.addPhoneNumber(dept, phoneNumber);
             phoneMap.put(phoneNumber.getNumber(), phoneNumber);
+            div.setPhone(phoneNumber);
+            phoneNumber.setDivision(div);
             em.persist(phoneNumber);
             em.persist(dept);
             em.persist(div);

Added: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java?rev=756104&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
 (added)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
 Thu Mar 19 17:33:03 2009
@@ -0,0 +1,73 @@
+/*
+ * 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.openjpa.persistence.jdbc.maps.m2mmapex4;
+
+import javax.persistence.*;
+
+...@embeddable   
+public class Address {
+       private String street;
+       private String city;
+       private String state;
+       private String zip;
+       
+       public Address(){
+       }
+       
+       public Address(String street){
+               this.street=street;
+       }
+       
+       public Address(String street, String city, String state, String zip){
+               this.street=street;
+               this.city=city;
+               this.state=state;
+               this.zip=zip;
+       }
+       
+       public String toString(){
+               return street+" "+" "+city+","+state+" "+zip;
+       }
+
+       public String getStreet() {
+               return street;
+       }
+       public void setStreet(String street) {
+               this.street = street;
+       }
+       
+       public String getCity() {
+               return city;
+       }
+       public void setCity(String city) {
+               this.city = city;
+       }
+       public String getState() {
+               return state;
+       }
+       public void setState(String state) {
+               this.state = state;
+       }
+       public String getZip() {
+               return zip;
+       }
+       public void setZip(String zip) {
+               this.zip = zip;
+       }
+}

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
 Thu Mar 19 17:33:03 2009
@@ -18,8 +18,12 @@
  */
 package org.apache.openjpa.persistence.jdbc.maps.m2mmapex4;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 import javax.persistence.Entity;
 import javax.persistence.Id;
+import javax.persistence.OneToMany;
 import javax.persistence.Table;
 
 @Entity
@@ -29,6 +33,21 @@
     int id;
 
     String name;
+    
+    @OneToMany(mappedBy="division")
+    Collection<Office> offices = new ArrayList();
+    
+    public Collection<Office> getOffices() {
+        return offices;
+    }
+
+    public void setOffices(Collection<Office> offices) {
+        this.offices = offices;
+    }
+
+    public void addOffice(Office office) {
+        offices.add(office);
+    }
 
     public int getId() {
         return id;

Added: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java?rev=756104&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
 (added)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
 Thu Mar 19 17:33:03 2009
@@ -0,0 +1,94 @@
+/*
+ * 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.openjpa.persistence.jdbc.maps.m2mmapex4;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+...@entity
+...@table(name="MEX4Office")
+public class Office {
+    @Id
+    int id;
+
+    String name;
+    @Embedded
+    Address address;
+    
+    @ManyToOne
+    Division division;
+    
+    public Office() {
+    }
+    
+    public Office(int id) {
+        this.id = id;
+    }
+    
+    public Address getAddress() {
+        return this.address;
+    }
+
+    public void setAddress(Address address) {
+        this.address = address;
+    }
+
+    public Division getDivision() {
+        return this.division;
+    }
+
+    public void setDivision(Division division) {
+        this.division = division;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public boolean equals(Object o) {
+        if (!(o instanceof Office)) return false;
+        Office other = (Office) o;
+        if (name.equals(other.name) &&
+                id == other.id)
+            return true;
+        return false;
+    }
+
+    public int hashCode() {
+        int ret = 0;
+        ret = ret * 31 + name.hashCode();
+        ret = ret *31 + id;
+        return ret;
+    }        
+}

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
 Thu Mar 19 17:33:03 2009
@@ -53,12 +53,16 @@
     public int phoneId = 1;
     public int divId = 1;
     public int deptId = 1;
+    public int officeId = 1;
+    public int numOfficesPerDivision = 2;
 
     public void setUp() {
         super.setUp(CLEAR_TABLES,
             Division.class,
             Employee.class,
             PhoneNumber.class,
+            Office.class,
+            Address.class,
             "openjpa.jdbc.JDBCListeners", 
             new JDBCListener[] {  this.new Listener() }
         );
@@ -67,7 +71,11 @@
 
     public void testQueryQualifiedId() throws Exception {
         EntityManager em = emf.createEntityManager();
-        String query = "select KEY(e) from PhoneNumber p, " +
+        String query1 = "select o.address.city from PhoneNumber p, " +
+        " in (p.emps) e, in(KEY(e).offices) o";
+    List rs1 = em.createQuery(query1).getResultList();
+
+    String query = "select KEY(e) from PhoneNumber p, " +
             " in (p.emps) e order by e.empId";
         List rs = em.createQuery(query).getResultList();
         Division d = (Division) rs.get(0);
@@ -138,6 +146,16 @@
         Division d = new Division();
         d.setId(id);
         d.setName("d" + id);
+        for (int i = 0; i < numOfficesPerDivision; i++) {
+            Office office = new Office(officeId++);
+            Address address = new Address("street"+i,
+                    "city"+i,
+                    "state"+i,
+                    "zip"+i);
+            office.setAddress(address);
+            em.persist(office);
+            d.addOffice(office);
+        }
         return d;
     }
 


Reply via email to