mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user