throws TypeMismatchException {
if (!queryHasAggregation(query) || (table.getNumberOfRows() == 0)) {
return table;
}
QueryGroup group = query.getGroup();
QueryPivot pivot = query.getPivot();
QuerySelection selection = query.getSelection();
List<String> groupByIds = Lists.newArrayList();
if (group != null) {
groupByIds = group.getColumnIds();
}
List<String> pivotByIds = Lists.newArrayList();
if (pivot != null) {
pivotByIds = pivot.getColumnIds(); // contained in groupByIds
}
List<String> groupAndPivotIds = Lists.newArrayList(groupByIds);
groupAndPivotIds.addAll(pivotByIds);
List<AggregationColumn> tmpColumnAggregations = selection.getAggregationColumns();
List<ScalarFunctionColumn> selectedScalarFunctionColumns = selection.getScalarFunctionColumns();
// Remove duplicates from tmpColumnAggregations, creating columnAggregations:
List<AggregationColumn> columnAggregations =
Lists.newArrayListWithExpectedSize(tmpColumnAggregations.size());
for (AggregationColumn aggCol : tmpColumnAggregations) {
if (!columnAggregations.contains(aggCol)) {
columnAggregations.add(aggCol);
}
}
List<String> aggregationIds = Lists.newArrayList();
for (AggregationColumn col : columnAggregations) {
aggregationIds.add(col.getAggregatedColumn().getId());
}
List<ScalarFunctionColumn> groupAndPivotScalarFunctionColumns = Lists.newArrayList();
if (group != null) {
groupAndPivotScalarFunctionColumns.addAll(group.getScalarFunctionColumns());
}
if (pivot != null) {
groupAndPivotScalarFunctionColumns.addAll(pivot.getScalarFunctionColumns());
}
List<ColumnDescription> newColumnDescriptions = Lists.newArrayList();
newColumnDescriptions.addAll(table.getColumnDescriptions());