package net.sourceforge.mayfly.evaluation; import net.sourceforge.mayfly.MayflyException; import net.sourceforge.mayfly.evaluation.select.Evaluator; import net.sourceforge.mayfly.evaluation.what.Selected; public class NoGroupBy implements Aggregator { public ResultRows group(ResultRows rows, Evaluator evaluator, Selected selected) { if (isAggregate(selected)) { return selected.aggregate(rows); } return rows; } private boolean isAggregate(Selected selected) { String firstColumn = null; String firstAggregate = null; for (Expression element : selected) { if (firstColumn == null) { firstColumn = element.firstColumn(); } if (firstAggregate == null) { firstAggregate = element.firstAggregate(); } if (firstColumn != null && firstAggregate != null) { throw new MayflyException(firstColumn + " is a column but " + firstAggregate + " is an aggregate"); } } return firstAggregate != null; } public ResultRow check(ResultRow dummyRow, Evaluator evaluator, Selected selected) { if (isAggregate(selected)) { return new ResultRow(); } else { return dummyRow; } } public Aggregator resolve(ResultRow dummyRow, Evaluator evaluator) { return this; } }