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.NoColumn;
import net.sourceforge.mayfly.evaluation.ResultRow;
import net.sourceforge.mayfly.evaluation.from.FromTable;
import net.sourceforge.mayfly.parser.Location;
public class RowEvaluator extends Evaluator {
private final Evaluator nestedEvaluator;
private final ResultRow row;
public RowEvaluator(ResultRow row, Evaluator nestedEvaluator) {
this.row = row;
this.nestedEvaluator = nestedEvaluator;
}
@Override
public String currentSchema() {
return nestedEvaluator.currentSchema();
}
@Override
public DataStore store() {
return nestedEvaluator.store();
}
@Override
public Cell lookup(ResultRow row,
String tableOrAlias, String originalTableOrAlias, String columnName, Location location) {
try {
return super.lookup(row, tableOrAlias, originalTableOrAlias, columnName, location);
}
catch (NoColumn e) {
return nestedEvaluator.lookup(this.row, tableOrAlias, originalTableOrAlias, columnName, location);
}
}
@Override
public Expression lookupName(
ResultRow nonCorrelatedRow, String columnName, Location location) {
Expression found = row.findColumnOrNull(null, columnName, Location.UNKNOWN);
if (found != null) {
return found;
}
return nestedEvaluator.lookupName(nonCorrelatedRow, columnName);
}
@Override
public Options options() {
return nestedEvaluator.options();
}
@Override
public TableData table(FromTable table) {
return nestedEvaluator.table(table);
}
}