package net.sourceforge.mayfly.evaluation.select; import net.sourceforge.mayfly.Options; import net.sourceforge.mayfly.datastore.Cell; import net.sourceforge.mayfly.datastore.DataStore; import net.sourceforge.mayfly.datastore.TableData; import net.sourceforge.mayfly.evaluation.Expression; import net.sourceforge.mayfly.evaluation.ResultRow; import net.sourceforge.mayfly.evaluation.from.FromTable; import net.sourceforge.mayfly.evaluation.what.What; import net.sourceforge.mayfly.parser.Location; public class AliasEvaluator extends Evaluator { private final What what; private final Evaluator delegate; public AliasEvaluator(What selected) { this(selected, Evaluator.NO_SUBSELECT_NEEDED); } public AliasEvaluator(What selected, Evaluator evaluator) { this.what = selected; this.delegate = evaluator; } @Override public String currentSchema() { return delegate.currentSchema(); } @Override public DataStore store() { return delegate.store(); } @Override public Cell lookup(ResultRow row, String tableOrAlias, String originalTableOrAlias, String columnName, Location location) { if (tableOrAlias != null) { return delegate.lookup(row, tableOrAlias, originalTableOrAlias, columnName, location); } Expression aliasedTo = what.lookupAlias(columnName); if (aliasedTo != null) { return aliasedTo.evaluate(row); } else { return delegate.lookup(row, tableOrAlias, originalTableOrAlias, columnName, location); } } @Override public Expression lookupName( ResultRow row, String columnName, Location location) { Expression foundinWhat = what.lookupName(columnName); if (foundinWhat != null) { return foundinWhat; } return delegate.lookupName(row, columnName); } @Override public TableData table(FromTable table) { return delegate.table(table); } @Override public Options options() { return delegate.options(); } }