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