@Override public void updateAggregate(Session session) { // TODO aggregates: check nested MIN(MAX(ID)) and so on // if (on != null) { // on.updateAggregate(); // } HashMap<Expression, Object> group = select.getCurrentGroup(); if (group == null) { // this is a different level (the enclosing query) return; } int groupRowId = select.getCurrentGroupRowId(); if (lastGroupRowId == groupRowId) { // already visited return; } lastGroupRowId = groupRowId; AggregateData data = (AggregateData) group.get(this); if (data == null) { data = AggregateData.create(type); group.put(this, data); } Value v = on == null ? null : on.getValue(session); if (type == GROUP_CONCAT) { if (v != ValueNull.INSTANCE) { v = v.convertTo(Value.STRING); if (groupConcatOrderList != null) { int size = groupConcatOrderList.size(); Value[] array = new Value[1 + size]; array[0] = v; for (int i = 0; i < size; i++) { SelectOrderBy o = groupConcatOrderList.get(i); array[i + 1] = o.expression.getValue(session); } v = ValueArray.get(array); } } } data.add(session.getDatabase(), dataType, distinct, v); }