mirror of https://github.com/apache/openjpa.git
Fix for issue OPENJPA-51. It should also resolve issue OPENJPA-173.
git-svn-id: https://svn.apache.org/repos/asf/incubator/openjpa/trunk@534623 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
43c931014a
commit
d5d214c182
|
@ -159,6 +159,13 @@ public class SelectImpl
|
||||||
private SelectImpl _from = null;
|
private SelectImpl _from = null;
|
||||||
private SelectImpl _outer = 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.
|
* Helper method to return the proper table alias for the given alias index.
|
||||||
*/
|
*/
|
||||||
|
@ -1487,8 +1494,13 @@ public class SelectImpl
|
||||||
private void removeParentJoins(PathJoins pj) {
|
private void removeParentJoins(PathJoins pj) {
|
||||||
if (_parent == null)
|
if (_parent == null)
|
||||||
return;
|
return;
|
||||||
if (_parent._joins != null && !_parent._joins.isEmpty())
|
if (_parent._joins != null && !_parent._joins.isEmpty()) {
|
||||||
pj.joins().removeAll(_parent._joins.joins());
|
boolean removed = false;
|
||||||
|
if (_removedAliasFromParent > 0)
|
||||||
|
removed = _parent._joins.joins().removeAll(pj.joins());
|
||||||
|
if (!removed)
|
||||||
|
pj.joins().removeAll(_parent._joins.joins());
|
||||||
|
}
|
||||||
if (!pj.isEmpty())
|
if (!pj.isEmpty())
|
||||||
_parent.removeParentJoins(pj);
|
_parent.removeParentJoins(pj);
|
||||||
}
|
}
|
||||||
|
@ -1897,9 +1909,15 @@ public class SelectImpl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!fromParent && _parent != null) {
|
if (!fromParent && _parent != null) {
|
||||||
alias = _parent.findAlias(table, key, false, this);
|
boolean removeAliasFromParent = key.toString().contains(":");
|
||||||
if (alias != null)
|
alias = _parent.findAlias(table, key, removeAliasFromParent, this);
|
||||||
|
if (alias != null) {
|
||||||
|
if (removeAliasFromParent) {
|
||||||
|
recordTableAlias(table, key, alias);
|
||||||
|
_removedAliasFromParent |= (1 << alias.intValue());
|
||||||
|
}
|
||||||
return alias;
|
return alias;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (_subsels != null) {
|
if (_subsels != null) {
|
||||||
SelectImpl sub;
|
SelectImpl sub;
|
||||||
|
@ -1913,9 +1931,11 @@ public class SelectImpl
|
||||||
if (sub._tables != null)
|
if (sub._tables != null)
|
||||||
sub._tables.remove(alias);
|
sub._tables.remove(alias);
|
||||||
} else {
|
} else {
|
||||||
alias = sub.findAlias(table, key, true, null);
|
if (fromSub == null) {
|
||||||
if (!fromParent && alias != null)
|
alias = sub.findAlias(table, key, true, null);
|
||||||
recordTableAlias(table, key, alias);
|
if (!fromParent && alias != null)
|
||||||
|
recordTableAlias(table, key, alias);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue