Julian Hyde created CALCITE-3763: ------------------------------------ Summary: RelBuilder.aggregate should prune unused fields from the input, if the input is a Project Key: CALCITE-3763 URL: https://issues.apache.org/jira/browse/CALCITE-3763 Project: Calcite Issue Type: Bug Reporter: Julian Hyde
{{RelBuilder.aggregate}} should prune unused fields from the input, if the input is a {{Project}}. Pruning fields during the planning process is desirable, but often cannot do it - we are applying a {{RelOptRule}} that has to return the same fields, or we don't want to add an extra Project do so the pruning. But when we are in {{RelBuilder.aggregate}} and the input is a Project, neither of those limitations apply. We already have a Project, we are just making it narrower; and we know what fields the {{Aggregate}} will produce. For example, {code:sql} SELECT deptno, SUM(sal) FILTER (WHERE b) FROM ( SELECT deptno, empno + 10, sal, job = 'CLERK' AS b FROM emp) GROUP BY deptno {code} becomes {code:sql} SELECT deptno, SUM(sal) FILTER (WHERE b) FROM ( SELECT deptno, sal, job = 'CLERK' AS b FROM emp) GROUP BY deptno {code} If there are no fields used, remove the {{Project}}. (A {{RelNode}} with no fields is not allowed.) {code:sql} SELECT COUNT(*) AS C FROM ( SELECT deptno, empno + 10, sal, job = 'CLERK' AS b FROM emp) {code} becomes {code:sql} SELECT COUNT(*) AS c FROM emp {code} Add an option {{RelBuilder.Config.pruneInputOfAggregate}}, default true, so that people can disable this rewrite if it causes problems. -- This message was sent by Atlassian Jira (v8.3.4#803005)