#1333 - ENH: Support "dynamic formula" with findSingleAttributeList() ... e.g. .select("concat(lastName,', ',firstName)")

Support property alias via "AS" ...  concat(lastName,', ',firstName) as lastName
This commit is contained in:
Rob Bygrave
2018-03-06 21:14:26 +13:00
parent 873c14faaf
commit a18cac035b
5 changed files with 41 additions and 7 deletions
@@ -67,7 +67,7 @@ public interface DbSqlContext {
/**
* Parse and add formula with standard table alias replacement.
*/
void appendParseSelect(String parseSelect);
void appendParseSelect(String parseSelect, String alias);
/**
* Append a Sql Formula select. This converts the "${ta}" keyword to the
@@ -16,11 +16,14 @@ class DynamicPropertyAggregationFormula extends DynamicPropertyBase {
private final BeanProperty asTarget;
DynamicPropertyAggregationFormula(String name, ScalarType<?> scalarType, String parsedFormula, boolean aggregate, BeanProperty asTarget) {
private final String alias;
DynamicPropertyAggregationFormula(String name, ScalarType<?> scalarType, String parsedFormula, boolean aggregate, BeanProperty asTarget, String alias) {
super(name, name, null, scalarType);
this.parsedFormula = parsedFormula;
this.aggregate = aggregate;
this.asTarget = asTarget;
this.alias = alias;
}
@Override
@@ -49,7 +52,7 @@ class DynamicPropertyAggregationFormula extends DynamicPropertyBase {
@Override
public void appendSelect(DbSqlContext ctx, boolean subQuery) {
ctx.appendParseSelect(parsedFormula);
ctx.appendParseSelect(parsedFormula, alias);
}
}
@@ -125,7 +125,7 @@ class FormulaPropertyPath {
}
String parsedAggregation = buildFormula(parsed);
return new DynamicPropertyAggregationFormula(logicalName, scalarType, parsedAggregation, isAggregate(), targetProperty);
return new DynamicPropertyAggregationFormula(logicalName, scalarType, parsedAggregation, isAggregate(), targetProperty, alias);
}
private boolean isAggregate() {
@@ -274,11 +274,15 @@ class DefaultDbSqlContext implements DbSqlContext {
}
@Override
public void appendParseSelect(String parseSelect) {
String converted = alias.parse(parseSelect);
public void appendParseSelect(String parseSelect, String columnAlias) {
String converted = this.alias.parse(parseSelect);
sb.append(COMMA);
sb.append(converted);
appendColumnAlias();
if (columnAlias != null) {
sb.append(" ").append(columnAlias);
} else {
appendColumnAlias();
}
}
@Override