[ https://issues.apache.org/jira/browse/CALCITE-5856?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steven Talbot updated CALCITE-5856: ----------------------------------- Description: Currently, the rule switches off getGroupCount to determine if an aggregation is empty. However, "select sum(1) as s from empty group by grouping sets((a), ())" will return null, but getGroupCount() will return non-zero, so the return type for an operator using ARG0_NULLABLE_IF_EMPTY will incorrectly be marked as non-nullable (if the input was non-nullable). As a practical matter, this mostly matters if you try to rewrite GROUPING SETS to some kind of UNION, at which point the branch of the UNION emulating the "()" grouping set _will_ infer nullable using this strategy, and the type of your rewritten RelNode will no longer match. was: Currently, the rule switches off getGroupCount to determine if an aggregation is empty. However, "select sum(1) as s from empty group by grouping sets((a), ())" will return null, but getGroupCount() will return non-zero, so the return type for an operator using ARG0_NULLABLE_IF_EMPTY will incorrectly be marked as non-nullable (if the input was non-nullable). As a practical matter, this mostly matters if you try to rewrite GROUPING SETS to some kind of UNION, at which point the branch of the UNION on the "()" grouping set _will_ infer nullable using this strategy, and the type of your rewritten RelNode will no longer match. > ARG0_NULLABLE_IF_EMPTY should consider GROUPING SETS (.., ()) > ------------------------------------------------------------- > > Key: CALCITE-5856 > URL: https://issues.apache.org/jira/browse/CALCITE-5856 > Project: Calcite > Issue Type: Bug > Reporter: Steven Talbot > Priority: Major > > Currently, the rule switches off getGroupCount to determine if an aggregation > is empty. However, "select sum(1) as s from empty group by grouping sets((a), > ())" will return null, but getGroupCount() will return non-zero, so the > return type for an operator using ARG0_NULLABLE_IF_EMPTY will incorrectly be > marked as non-nullable (if the input was non-nullable). > > As a practical matter, this mostly matters if you try to rewrite GROUPING > SETS to some kind of UNION, at which point the branch of the UNION emulating > the "()" grouping set _will_ infer nullable using this strategy, and the type > of your rewritten RelNode will no longer match. -- This message was sent by Atlassian Jira (v8.20.10#820010)