|| !canGroupWith(newRow, groupIndicies))) {
return false;
}
for(int i=0; i< cols.size(); i++) {
AggregateFunction col = cols.get(i);
Object value = newRow.values[i];
//null values not take apart in group merging
if(value == null) {
continue;
}
if(col.equals(AggregateFunction.SUM)) {
values[i] = sum(values[i], value);
} else if(col.equals(AggregateFunction.AVG)) {
Double dval = null;
if(value instanceof Long) {
dval = new Double(((Long) value).doubleValue());
} else if(value instanceof Double) {
dval = (Double) value;
} else {
throw new ReportException("Невозможно рассчитать среднее значение для класса "
+ value.getClass().getSimpleName());
}
values[i] = (Double) sum(values[i], dval);
//update scaler
Integer scaler = normalizeScaler.get(i);
normalizeScaler.put(i, scaler+1);
} else if(col.equals(AggregateFunction.COUNT)) {
values[i] = (Long) values[i] + 1;
} else if(col.equals(AggregateFunction.COUNT_DISTINCT)) {
Set set = distinct.get(i);
if(!set.contains(value)) {
set.add(value);
values[i] = (Long) values[i] + 1;
}
} else if(col.equals(AggregateFunction.MAX)) {
if(compare(values[i], value) < 0) {
values[i] = value;
}
} else if(col.equals(AggregateFunction.MIN)) {
if(compare(values[i], value) > 0) {
values[i] = value;
}
}
}