You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Vladimir Ozerov (Jira)" <ji...@apache.org> on 2021/05/21 09:24:00 UTC

[jira] [Created] (CALCITE-4615) AggregateUnionTransposeRule may assign wrong aggregate function to input

Vladimir Ozerov created CALCITE-4615:
----------------------------------------

             Summary: AggregateUnionTransposeRule may assign wrong aggregate function to input
                 Key: CALCITE-4615
                 URL: https://issues.apache.org/jira/browse/CALCITE-4615
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.26.0
            Reporter: Vladimir Ozerov


Consider the following query tree:
{code}
1: Aggregate[SUM($0):BIGINT]
2:   Union[$0:BIGINT]
3:     Input[$0:BIGINT]
4:     Input[$0:BIGINT NOT NULL]
{code}
The Union's row type is {{BIGINT}}, and Aggergate's row type is {{BIGINT}} as well. 

When the {{AggregateUnionTransposeRule}} rule pushes {{Aggregate}} below {{Union}}, it installs the aggregate call from the original {{Aggregate}} to new aggregates:
{code}
1: Aggregate[SUM($0):BIGINT]
2:   Union[$0:BIGINT]
3:     Aggregate[SUM($0):BIGINT]
4:       Input[$0:BIGINT]
5:     Aggregate[SUM($0):BIGINT]
6:       Input[$0:BIGINT NOT NULL]
{code}
This leads to a Litmus failure in the {{Aggregate}} on line 5 because the aggregate call returns {{BIGINT}}, while it should return {{BIGINT NOT NULL}}.

The solution is to re-create aggregate calls for inputs and let Calcite deduce the return type.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)