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();
+ }
}