openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wisnes...@apache.org
Subject svn commit: r534623 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Date Wed, 02 May 2007 21:35:55 GMT
Author: wisneskid
Date: Wed May  2 14:35:55 2007
New Revision: 534623

URL: http://svn.apache.org/viewvc?view=rev&rev=534623
Log:
Fix for issue OPENJPA-51. It should also resolve issue OPENJPA-173.

Modified:
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?view=diff&rev=534623&r1=534622&r2=534623
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
(original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Wed May  2 14:35:55 2007
@@ -158,6 +158,13 @@
     // from select if this select selects from a tmp table created by another
     private SelectImpl _from = null;
     private SelectImpl _outer = null;
+    
+    // bitSet indicating if an alias is removed from parent select
+    // bit 0 : correspond to alias 0
+    // bit 1 : correspond to alias 1, etc.
+    // if the bit is set, the corresponding alias has been removed from parent
+    // and recorded under subselect.
+    private int _removedAliasFromParent = 0;
      
     /**
      * Helper method to return the proper table alias for the given alias index.
@@ -1487,8 +1494,13 @@
     private void removeParentJoins(PathJoins pj) {
         if (_parent == null)
             return;
-        if (_parent._joins != null && !_parent._joins.isEmpty())
-            pj.joins().removeAll(_parent._joins.joins());
+        if (_parent._joins != null && !_parent._joins.isEmpty()) {
+            boolean removed = false;
+            if (_removedAliasFromParent > 0)
+                removed = _parent._joins.joins().removeAll(pj.joins());
+            if (!removed)
+                pj.joins().removeAll(_parent._joins.joins());
+        }
         if (!pj.isEmpty())
             _parent.removeParentJoins(pj);
     }
@@ -1897,9 +1909,15 @@
             }
         }
         if (!fromParent && _parent != null) {
-            alias = _parent.findAlias(table, key, false, this);
-            if (alias != null)
+            boolean removeAliasFromParent = key.toString().contains(":");
+            alias = _parent.findAlias(table, key, removeAliasFromParent, this);
+            if (alias != null) {
+                if (removeAliasFromParent) {
+                    recordTableAlias(table, key, alias);
+                    _removedAliasFromParent |= (1 << alias.intValue());
+                }
                 return alias;
+            }
         }
         if (_subsels != null) {
             SelectImpl sub;
@@ -1913,9 +1931,11 @@
                     if (sub._tables != null)
                         sub._tables.remove(alias);
                 } else {
-                    alias = sub.findAlias(table, key, true, null);
-                    if (!fromParent && alias != null)
-                        recordTableAlias(table, key, alias);
+                    if (fromSub == null) {
+                        alias = sub.findAlias(table, key, true, null);
+                        if (!fromParent && alias != null)
+                            recordTableAlias(table, key, alias);
+                    }
                 }
             }
         }



Mime
View raw message