Julian Hyde created CALCITE-4720: ------------------------------------ Summary: Obsolete the Collect relational operator, using Aggregate and ARRAY_AGG (and new aggregate functions MULTISET_AGG and MAP_AGG) instead Key: CALCITE-4720 URL: https://issues.apache.org/jira/browse/CALCITE-4720 Project: Calcite Issue Type: Bug Reporter: Julian Hyde
The {{Collect}} relational operator converts a multi-row relation into a relation with a single row and a column whose type is {{MULTISET}}. But it is difficult to generalize it; we would like to: * Generating multiple rows, one for each group key, rather than a single row for the whole relation; * Generate an {{ARRAY}} or {{MAP}} rather than a {{MULTISET}; * Generate a collection of scalars rather than a collection of records if the input is a single column (e.g. {{INTEGER MULTISET}} rather than {{ROW(INTEGER i) MULTISET}}) And, it is difficult to maintain; it is a minor RelNode that has only 2 implementations (that I know of) and I'm sure that there are bugs and missing support in SqlToRelConverter and the RelOptRule library. We can achieve the same using the {{Aggregate}} operator and the {{ARRAY_AGG}} aggregate function. We would need new aggregate functions (let's call them {{MULTISET_AGG}} and {{MAP_AGG}}) for the {{MULTISET}} and {{MAP}} types. Then we can obsolete {{Collect}}, and make current code paths use {{Aggregate}} instead. -- This message was sent by Atlassian Jira (v8.3.4#803005)