You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2009/06/28 02:53:38 UTC

svn commit: r789029 - in /openjpa/branches/subquery: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/

Author: faywang
Date: Sun Jun 28 00:53:38 2009
New Revision: 789029

URL: http://svn.apache.org/viewvc?rev=789029&view=rev
Log:
fix on correlated subquery 

Modified:
    openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
    openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractResult.java
    openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Joins.java
    openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
    openjpa/branches/subquery/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java

Modified: openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java?rev=789029&r1=789028&r2=789029&view=diff
==============================================================================
--- openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java (original)
+++ openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java Sun Jun 28 00:53:38 2009
@@ -494,10 +494,9 @@
                     prevaction != null && prevaction.data != null &&
                     sel.ctx().getVariable(action.var) == null) {
                     System.out.println("action var="+action.var);
-                    isCorrelatedPath = 
-                        pstate.joins.isCorrelatedVariable(action.var);
-                }
-                if (!isCorrelatedPath)
+                    isCorrelatedPath = true;
+                    pstate.joins = pstate.joins.setCorrelatedVariable(action.var);
+                } else 
                     pstate.joins = pstate.joins.
                         setVariable((String) action.data);
             }

Modified: openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractResult.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractResult.java?rev=789029&r1=789028&r2=789029&view=diff
==============================================================================
--- openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractResult.java (original)
+++ openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractResult.java Sun Jun 28 00:53:38 2009
@@ -889,10 +889,14 @@
         public void appendTo(SQLBuffer buf) {
         }
 
-        public boolean isCorrelatedVariable(String var) {
-            return false;
+        public Joins setCorrelatedVariable(String var) {
+            return this;
         }
 
+        public String getCorrelatedVariable() {
+            return null;
+        }
+        
         public void moveJoinsToParent() {
         }
     }

Modified: openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Joins.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Joins.java?rev=789029&r1=789028&r2=789029&view=diff
==============================================================================
--- openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Joins.java (original)
+++ openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Joins.java Sun Jun 28 00:53:38 2009
@@ -90,7 +90,9 @@
      * Return true if the variable name being traversed into
      * with the next join is a correlated variable.
      */
-    public boolean isCorrelatedVariable(String var);
+    public Joins setCorrelatedVariable(String var);
+    
+    public String getCorrelatedVariable();
 
     public void moveJoinsToParent();
 

Modified: openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=789029&r1=789028&r2=789029&view=diff
==============================================================================
--- openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ openjpa/branches/subquery/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Sun Jun 28 00:53:38 2009
@@ -2026,7 +2026,9 @@
 
 //        System.out.println((_parent != null) ? "FindAliasForSUBQuery" :
 //            "FindAliasForQuery: " + key.toString());
-        String alias = (pj != null && pj.path() != null) ? null : _schemaAlias;
+        String alias = (pj != null && pj.path() != null && 
+            pj.getCorrelatedVariable() == null) 
+            ? null : _schemaAlias;
 
         if (table.isAssociation()) {
             // create alias in this select
@@ -2551,8 +2553,12 @@
         public void setContext(Context context) {
         }
         
-        public boolean isCorrelatedVariable(String var) {
-            return false;
+        public Joins setCorrelatedVariable(String var) {
+            return this;
+        }
+
+        public String getCorrelatedVariable() {
+            return null;
         }
 
         public void moveJoinsToParent() {
@@ -2606,12 +2612,13 @@
             return this;
         }
 
-        public boolean isCorrelatedVariable(String var) {
-            boolean isCorrelated = getSelect().ctx().getVariable(var) == null;
-            if (isCorrelated)
-                this.correlatedVar = var;
-
-            return isCorrelated;
+        public Joins setCorrelatedVariable(String var) {
+            this.correlatedVar = var;
+            return this;
+        }
+        
+        public String getCorrelatedVariable() {
+            return correlatedVar;
         }
 
         public void setContext(Context context) {
@@ -2693,7 +2700,6 @@
 
         public SelectJoins(SelectImpl sel) {
             _sel = sel;
-            correlatedVar = sel._correlatedVar;
         }
 
         public Select getSelect() {
@@ -3119,12 +3125,14 @@
         }
     }
 
-    public boolean isCorrelatedVariable(String var) {
-        boolean isCorrelated = //_ctx.getVariable(_schemaAlias) == null &&
-            _ctx.getVariable(var) == null;
-        if (isCorrelated)
-            _correlatedVar = var;
-        return isCorrelated;
+    public Joins setCorrelatedVariable(String var) {
+        if (var == null)
+            return this;
+        return new SelectJoins(this).setCorrelatedVariable(var);
+    }
+    
+    public String getCorrelatedVariable() {
+        return null;
     }
 
     public void moveJoinsToParent() {

Modified: openjpa/branches/subquery/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=789029&r1=789028&r2=789029&view=diff
==============================================================================
--- openjpa/branches/subquery/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ openjpa/branches/subquery/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Sun Jun 28 00:53:38 2009
@@ -1442,10 +1442,6 @@
         contexts.push(subContext);
         subContext.setParent(parent);
 
-        // evaluate from clause for resolving variables defined in subquery
-        JPQLNode from = node.getChild(1);
-        subContext.from = evalFromClause(from, true);
-
         ClassMetaData candidate = getCandidateMetaData(node);
         Subquery subq = subContext.getSubquery();
         if (subq == null) {
@@ -1454,6 +1450,10 @@
         }
         subq.setMetaData(candidate);
         subq.setAlias(alias);
+        
+        // evaluate from clause for resolving variables defined in subquery
+        JPQLNode from = node.getChild(1);
+        subContext.from = evalFromClause(from, true);
 
         try {
             QueryExpressions subexp = getQueryExpressions();