package net.sourceforge.mayfly.evaluation.what;
import net.sourceforge.mayfly.datastore.Cell;
import net.sourceforge.mayfly.evaluation.Expression;
import net.sourceforge.mayfly.evaluation.ResultRow;
import net.sourceforge.mayfly.evaluation.ResultRows;
import net.sourceforge.mayfly.evaluation.select.Evaluator;
/**
* @internal
* expression AS alias
*
* (as in, for example, SELECT a + b AS total FROM foo).
*/
public class AliasedExpression extends Expression {
public final String alias;
public final Expression expression;
public AliasedExpression(String aliasedColumn, Expression expression) {
this.alias = aliasedColumn;
this.expression = expression;
}
@Override
public String displayName() {
return expression.displayName() + " AS " + alias;
}
@Override
public String firstAggregate() {
return expression.firstAggregate();
}
@Override
public String firstColumn() {
return expression.firstColumn();
}
@Override
public Cell aggregate(ResultRows rows) {
return expression.aggregate(rows);
}
@Override
public Cell evaluate(ResultRow row, Evaluator evaluator) {
return expression.evaluate(row, evaluator);
}
@Override
public boolean sameExpression(Expression other) {
if (!(other instanceof AliasedExpression)) {
return false;
}
AliasedExpression aliasedOther = (AliasedExpression) other;
if (!alias.equalsIgnoreCase(aliasedOther.alias)) {
return false;
}
if (!expression.sameExpression(aliasedOther.expression)) {
return false;
}
return true;
}
@Override
public boolean matches(String columnName) {
return alias.equalsIgnoreCase(columnName);
}
@Override
public Expression lookupAlias(String name) {
return matches(name) ? expression : null;
}
@Override
public Expression lookupName(String name) {
return matches(name) ? this : null;
}
}