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)