Author: fancy
Date: Wed May 27 04:22:37 2009
New Revision: 778990
URL: http://svn.apache.org/viewvc?rev=778990&view=rev
Log:
OPENJPA-1098 JPA2 Query support for subselect_identification_variable
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=778990&r1=778989&r2=778990&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
Wed May 27 04:22:37 2009
@@ -569,6 +569,19 @@
return exp;
}
+ private Expression bindVariableForKeyPath(Path path, String alias,
+ Expression exp) {
+ if (alias != null && !isSeendVariable(alias)) {
+ // subquery may have KEY range over a variable
+ // that is not defined.
+ JPQLNode key = root().findChildByID(JJTKEY, true);
+ if (key != null && firstChild(key).text.equalsIgnoreCase(alias)) {
+ Value var = getVariable(alias, true);
+ exp = and(exp, factory.bindVariable(var, path));
+ }
+ }
+ return exp;
+ }
/**
* Adds a join condition to the given expression.
*
@@ -594,13 +607,7 @@
Path subpath = factory.newPath(ctx().subquery);
subpath.setMetaData(ctx().subquery.getMetaData());
- // subquery may have KEY range over a variable
- // that is not defined.
- JPQLNode key = root().findChildByID(JJTKEY, true);
- if (key != null && firstChild(key).text.equals(alias.text)) {
- Value var = getVariable(alias.text, false);
- exp = and(exp, factory.bindVariable(var, path));
- }
+ exp = bindVariableForKeyPath(path, alias.text, exp);
exp = and(exp, factory.equal(path, subpath));
return exp;
}
@@ -672,15 +679,7 @@
Path subpath = factory.newPath(ctx().subquery);
subpath.setMetaData(ctx().subquery.getMetaData());
- if (alias != null && !isSeendVariable(alias)) {
- // subquery may have KEY range over a variable
- // that is not defined.
- JPQLNode key = root().findChildByID(JJTKEY, true);
- if (key != null && firstChild(key).text.equals(alias)) {
- Value var = getVariable(alias, false);
- exp = and(exp, factory.bindVariable(var, path));
- }
- }
+ exp = bindVariableForKeyPath(path, alias, exp);
return and(exp, factory.equal(path, subpath));
} else {
// we have an alias: bind it as a variable