package net.sourceforge.mayfly.evaluation.expression; import net.sourceforge.mayfly.datastore.Cell; import net.sourceforge.mayfly.datastore.LongCell; 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; import net.sourceforge.mayfly.parser.Location; public class CountAll extends Expression { private final String functionName; public CountAll(String functionName, Location location) { super(location); this.functionName = functionName; } public CountAll(String functionName) { this(functionName, Location.UNKNOWN); } @Override public Cell evaluate(ResultRow row, Evaluator evaluator) { /** This is just for checking; aggregation happens in {@link #aggregate(Rows)}. */ return new LongCell(0); } @Override public String firstAggregate() { return displayName(); } @Override public String displayName() { return functionName + "(*)"; } @Override public Cell aggregate(ResultRows rows) { return new LongCell(rows.rowCount()); } @Override public boolean sameExpression(Expression other) { return other instanceof CountAll; } }