#527 - @OrderBy on child-of-child property

This commit is contained in:
Robin Bygrave
2016-01-13 11:37:38 +13:00
parent 0453892ebd
commit b04419d9c7
7 changed files with 147 additions and 57 deletions
@@ -603,7 +603,7 @@ public class SqlTreeBuilder {
// no extra join required for embedded beans
return null;
}
SqlTreeNodeExtraJoin extraJoin = new SqlTreeNodeExtraJoin(propertyName, assocProp);
SqlTreeNodeExtraJoin extraJoin = new SqlTreeNodeExtraJoin(propertyName, assocProp, elGetValue.containsMany());
joinRegister.put(propertyName, extraJoin);
return extraJoin;
}
@@ -29,11 +29,14 @@ public class SqlTreeNodeExtraJoin implements SqlTreeNode {
private final boolean manyJoin;
private final boolean pathContainsMany;
private List<SqlTreeNodeExtraJoin> children;
public SqlTreeNodeExtraJoin(String prefix, BeanPropertyAssoc<?> assocBeanProperty) {
public SqlTreeNodeExtraJoin(String prefix, BeanPropertyAssoc<?> assocBeanProperty, boolean pathContainsMany) {
this.prefix = prefix;
this.assocBeanProperty = assocBeanProperty;
this.pathContainsMany = pathContainsMany;
this.manyJoin = assocBeanProperty instanceof BeanPropertyAssocMany<?>;
}
@@ -95,13 +98,16 @@ public class SqlTreeNodeExtraJoin implements SqlTreeNode {
}
}
if (!manyToMany) {
if (pathContainsMany) {
// "promote" to left outer as the path contains a many
assocBeanProperty.addJoin(SqlJoinType.OUTER, prefix, ctx);
} else if (!manyToMany) {
assocBeanProperty.addJoin(joinType, prefix, ctx);
}
if (children != null) {
if (manyJoin) {
if (manyJoin || pathContainsMany) {
// if AUTO then make all descendants use OUTER JOIN
joinType = joinType.autoToOuter();
}