FIX: @Formula: support for discriminator & joins added

This commit is contained in:
Roland Praml
2016-11-11 09:57:02 +01:00
parent 019fdd3a12
commit e4e850717d
5 changed files with 30 additions and 11 deletions
@@ -330,7 +330,7 @@ public abstract class BeanPropertyAssoc<T> extends BeanProperty {
if (descriptor.isRawSqlBased()) {
String dbColumn = owner.getDbColumn();
return new ImportedIdSimple(owner, dbColumn, idProp, 0);
return new ImportedIdSimple(owner, dbColumn, null, idProp, 0);
}
TableJoinColumn[] cols = join.columns();
@@ -373,16 +373,17 @@ public abstract class BeanPropertyAssoc<T> extends BeanProperty {
String matchColumn = col.getForeignDbColumn();
String localColumn = col.getLocalDbColumn();
String localSqlFormula = col.getLocalSqlFormula();
for (int j = 0; j < props.length; j++) {
if (props[j].getDbColumn().equalsIgnoreCase(matchColumn)) {
return new ImportedIdSimple(owner, localColumn, props[j], j);
return new ImportedIdSimple(owner, localColumn, localSqlFormula, props[j], j);
}
}
for (int j = 0; j < others.length; j++) {
if (others[j].getDbColumn().equalsIgnoreCase(matchColumn)) {
return new ImportedIdSimple(owner, localColumn, others[j], j + props.length);
return new ImportedIdSimple(owner, localColumn, localSqlFormula, others[j], j + props.length);
}
}
@@ -561,9 +561,7 @@ public class BeanPropertyAssocOne<T> extends BeanPropertyAssoc<T> {
@Override
public void appendSelect(DbSqlContext ctx, boolean subQuery) {
if (formula) {
ctx.appendFormulaSelect(sqlFormulaSelect);
} else if (!isTransient) {
if (!isTransient) {
localHelp.appendSelect(ctx, subQuery);
}
}
@@ -571,8 +569,10 @@ public class BeanPropertyAssocOne<T> extends BeanPropertyAssoc<T> {
@Override
public void appendFrom(DbSqlContext ctx, SqlJoinType joinType) {
if (!isTransient) {
// TODO JOINS
localHelp.appendFrom(ctx, joinType);
if (sqlFormulaJoin != null) {
ctx.appendFormulaJoin(sqlFormulaJoin, joinType);
}
}
}
@@ -37,6 +37,8 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
protected final BeanPropertyAssoc<?> owner;
protected final String localDbColumn;
protected final String localSqlFormula;
protected final String logicalName;
@@ -44,9 +46,10 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
protected final int position;
public ImportedIdSimple(BeanPropertyAssoc<?> owner, String localDbColumn, BeanProperty foreignProperty, int position) {
public ImportedIdSimple(BeanPropertyAssoc<?> owner, String localDbColumn, String localSqlFormula, BeanProperty foreignProperty, int position) {
this.owner = owner;
this.localDbColumn = InternString.intern(localDbColumn);
this.localSqlFormula = InternString.intern(localSqlFormula);
this.foreignProperty = foreignProperty;
this.position = position;
this.logicalName = InternString.intern(owner.getName() + "." + foreignProperty.getName());
@@ -103,7 +106,11 @@ public final class ImportedIdSimple implements ImportedId, Comparable<ImportedId
}
public void sqlAppend(DbSqlContext ctx) {
ctx.appendColumn(localDbColumn);
if (localSqlFormula != null) {
ctx.appendFormulaSelect(localSqlFormula);
} else {
ctx.appendColumn(localDbColumn);
}
}
@@ -96,4 +96,13 @@ public class DeployBeanPropertyAssocOne<T> extends DeployBeanPropertyAssoc<T> {
tableJoin.setLocalColumn(dbColumn);
}
}
@Override
public void setSqlFormula(String formulaSelect, String formulaJoin) {
super.setSqlFormula(formulaSelect, formulaJoin);
DeployTableJoinColumn[] columns = tableJoin.columns();
if (columns.length == 1) {
columns[0].setLocalSqlFormula(formulaSelect);
}
}
}
@@ -138,7 +138,7 @@ class DefaultDbSqlContext implements DbSqlContext {
}
if (pair.getForeignSqlFormula() != null) {
sb.append(pair.getForeignSqlFormula().replace(tableAliasPlaceHolder, a2));
sb.append(StringHelper.replaceString(pair.getForeignSqlFormula(), tableAliasPlaceHolder, a2));
} else {
sb.append(a2).append(".").append(pair.getForeignDbColumn());
}
@@ -146,7 +146,7 @@ class DefaultDbSqlContext implements DbSqlContext {
sb.append(" = ");
if (pair.getLocalSqlFormula() != null) {
sb.append(pair.getLocalSqlFormula().replace(tableAliasPlaceHolder, a1));
sb.append(StringHelper.replaceString(pair.getLocalSqlFormula(), tableAliasPlaceHolder, a1));
} else {
sb.append(a1).append(".").append(pair.getLocalDbColumn());
}
@@ -255,6 +255,8 @@ class DefaultDbSqlContext implements DbSqlContext {
sb.append(COMMA);
sb.append(converted);
appendColumnAlias();
}
@Override