package jeql.std.function;
import jeql.api.error.ExecutionException;
import jeql.api.function.AggregateFunction;
import jeql.api.function.FunctionClass;
import jeql.api.row.Row;
import jeql.api.row.RowIterator;
import jeql.api.row.RowList;
import jeql.api.table.Table;
import jeql.std.aggfunction.AvgAggFunction;
import jeql.std.aggfunction.ConcatAggFunction;
import jeql.std.aggfunction.CountAggFunction;
import jeql.std.aggfunction.FirstAggFunction;
import jeql.std.aggfunction.GeomCollectAggFunction;
import jeql.std.aggfunction.GeomConnectAggFunction;
import jeql.std.aggfunction.GeomConvexHullAggFunction;
import jeql.std.aggfunction.GeomExtentAggFunction;
import jeql.std.aggfunction.GeomUnionAggFunction;
import jeql.std.aggfunction.GeomUnionMemAggFunction;
import jeql.std.aggfunction.LastAggFunction;
import jeql.std.aggfunction.MaxAggFunction;
import jeql.std.aggfunction.MinAggFunction;
import jeql.std.aggfunction.StdDevAggFunction;
import jeql.std.aggfunction.SumAggFunction;
import jeql.util.TypeUtil;
public class AggFunction
implements FunctionClass
{
/**
* Counts rows in a table.
*
* @param o
* @return
*/
public static int countRows(Table tbl)
{
RowIterator it = tbl.getRows().iterator();
int count = 0;
while (true) {
Row row = it.next();
if (row == null) break;
count++;
}
return count;
}
public static double sumRows(Table tbl)
{
RowList rows = tbl.getRows();
if (rows.getSchema().size() != 1)
throw new ExecutionException("argument to sum function must have exactly 1 column");
RowIterator it = rows.iterator();
double sum = 0;
while (true) {
Row row = it.next();
if (row == null) break;
Object val = row.getValue(0);
double d = TypeUtil.toDouble(val);
sum += d;
}
return sum;
}
}