Author: mikedd
Date: Thu Jan 22 11:16:37 2009
New Revision: 736748

URL: http://svn.apache.org/viewvc?rev=736748&view=rev
Log:
OPENJPA-864 do not remove table aliases for databases which use 
JoinSyntaxes.SYNTAX_DATABASE (no joins).

Added:
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/Dependent.java
      - copied unchanged from r736493, 
openjpa/branches/1.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/Dependent.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/DependentId.java
      - copied unchanged from r736493, 
openjpa/branches/1.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/DependentId.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/Employee.java
      - copied unchanged from r736493, 
openjpa/branches/1.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/Employee.java
Modified:
    openjpa/trunk/   (props changed)
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M21UniDepartment.java
   (props changed)
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M21UniEmployee.java
   (props changed)
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M2MBiDepartment.java
   (props changed)
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M2MBiEmployee.java
   (props changed)
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestM21UniVersion.java
   (props changed)
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestM2MBiVersion.java
   (props changed)
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestSubquery.java

Propchange: openjpa/trunk/
------------------------------------------------------------------------------
    svn:mergeinfo = /openjpa/branches/1.0.x:736493

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=736748&r1=736747&r2=736748&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 Jan 22 11:16:37 2009
@@ -581,39 +581,41 @@
 
         if (_parent._aliases.size() <= 1)
             return;
- 
-        // resolve aliases for subselect from parent
-        Set<Map.Entry> entries = _parent.getAliases().entrySet();
-        for (Map.Entry entry : entries) {
-            Object key = entry.getKey();
-            Integer alias = (Integer) entry.getValue();
-            if (key.toString().indexOf(_subPath) != -1 ||
-                _parent.findTableAlias(alias) == false) {
-                if (_aliases == null)
-                    _aliases = new HashMap();
-                _aliases.put(key, alias);
-
-                Object tableString = _parent.getTables().get(alias);
-                if (_tables == null)
-                    _tables = new TreeMap();
-                _tables.put(alias, tableString);
-                
-                _removedAliasFromParent.set(alias.intValue());
-            }
-        }
-        
-        if (_aliases != null) {
-            // aliases moved into subselect should be removed from parent
-            entries = _aliases.entrySet();
+        // Do not remove aliases for databases that use SYNTAX_DATABASE 
(oracle)
+        if(_parent._joinSyntax != JoinSyntaxes.SYNTAX_DATABASE) {
+            // resolve aliases for subselect from parent
+            Set<Map.Entry> entries = _parent.getAliases().entrySet();
             for (Map.Entry entry : entries) {
                 Object key = entry.getKey();
                 Integer alias = (Integer) entry.getValue();
                 if (key.toString().indexOf(_subPath) != -1 ||
                     _parent.findTableAlias(alias) == false) {
-                    _parent.removeAlias(key);
-
+                    if (_aliases == null)
+                        _aliases = new HashMap();
+                    _aliases.put(key, alias);
+    
                     Object tableString = _parent.getTables().get(alias);
-                    _parent.removeTable(alias);
+                    if (_tables == null)
+                        _tables = new TreeMap();
+                    _tables.put(alias, tableString);
+                    
+                    _removedAliasFromParent.set(alias.intValue());
+                }
+            }
+            
+            if (_aliases != null) {
+                // aliases moved into subselect should be removed from parent
+                entries = _aliases.entrySet();
+                for (Map.Entry entry : entries) {
+                    Object key = entry.getKey();
+                    Integer alias = (Integer) entry.getValue();
+                    if (key.toString().indexOf(_subPath) != -1 ||
+                        _parent.findTableAlias(alias) == false) {
+                        _parent.removeAlias(key);
+    
+                        Object tableString = _parent.getTables().get(alias);
+                        _parent.removeTable(alias);
+                    }
                 }
             }
         }

Propchange: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M21UniDepartment.java
            ('svn:mergeinfo' removed)

Propchange: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M21UniEmployee.java
            ('svn:mergeinfo' removed)

Propchange: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M2MBiDepartment.java
            ('svn:mergeinfo' removed)

Propchange: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/M2MBiEmployee.java
            ('svn:mergeinfo' removed)

Propchange: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestM21UniVersion.java
            ('svn:mergeinfo' removed)

Propchange: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/kernel/TestM2MBiVersion.java
            ('svn:mergeinfo' removed)

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestSubquery.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestSubquery.java?rev=736748&r1=736747&r2=736748&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestSubquery.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestSubquery.java
 Thu Jan 22 11:16:37 2009
@@ -18,9 +18,11 @@
  */
 package org.apache.openjpa.persistence.query;
 
+import java.util.Date;
 import java.util.List;
 
 import javax.persistence.EntityManager;
+import javax.persistence.Query;
 
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
@@ -31,9 +33,9 @@
     extends SingleEMFTestCase {
 
     public void setUp() {
-        setUp(Customer.class, Customer.CustomerKey.class,
-            Order.class, OrderItem.class,
-            Magazine.class, Publisher.class, CLEAR_TABLES);
+        setUp(Customer.class, Customer.CustomerKey.class, Order.class,
+            OrderItem.class, Magazine.class, Publisher.class, Employee.class,
+            Dependent.class, DependentId.class, CLEAR_TABLES);
     }
 
     static String[]  querys = new String[] {
@@ -111,4 +113,25 @@
         em.getTransaction().rollback();
         em.close();
     }
+    
+    /**
+     * Verify a sub query can contain MAX and additional date comparisons 
+     * without losing the correct alias information. This sort of query 
+     * originally caused problems for DBDictionaries which used DATABASE 
syntax. 
+     */
+    public void testSubSelectMaxDateRange() {        
+        String query =
+            "SELECT e,d from Employee e, Dependent d "
+                + "WHERE e.empId = :empid "
+                + "AND d.id.empid = (SELECT MAX (e2.empId) FROM Employee e2) "
+                + "AND d.id.effDate > :minDate "
+                + "AND d.id.effDate < :maxDate ";
+        EntityManager em = emf.createEntityManager();
+        Query q = em.createQuery(query);
+        q.setParameter("empid", (long) 101);
+        q.setParameter("minDate", new Date(100));
+        q.setParameter("maxDate", new Date(100000));
+        q.getResultList();
+        em.close();
+    }
 }


Reply via email to