You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Alessandro Solimando (Jira)" <ji...@apache.org> on 2023/09/01 17:47:00 UTC

[jira] [Assigned] (CALCITE-5861) ReduceExpressionsRule rules should constant-fold expressions in window bounds

     [ https://issues.apache.org/jira/browse/CALCITE-5861?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alessandro Solimando reassigned CALCITE-5861:
---------------------------------------------

    Assignee: Mihai Budiu

> ReduceExpressionsRule rules should constant-fold expressions in window bounds
> -----------------------------------------------------------------------------
>
>                 Key: CALCITE-5861
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5861
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.34.0, 1.35.0
>            Reporter: Mihai Budiu
>            Assignee: Mihai Budiu
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 1.36.0
>
>
> This bug is a bit more complicated to describe, and there is a possibility that I am doing something wrong.
> Consider the following test that can be added to RelOptRulesTest:
> {code:java}
> @Test void testExpressionPreceding() {
>     HepProgramBuilder preBuilder = new HepProgramBuilder();
>     preBuilder.addRuleInstance(CoreRules.WINDOW_REDUCE_EXPRESSIONS);
>     preBuilder.addRuleInstance(CoreRules.PROJECT_TO_LOGICAL_PROJECT_AND_WINDOW);
>     HepProgramBuilder builder = new HepProgramBuilder();
>     builder.addRuleInstance(CoreRules.PROJECT_REDUCE_EXPRESSIONS);
>     HepPlanner hepPlanner = new HepPlanner(builder.build());
>     final String sql =
>         "select COUNT(*) over (\n"
>             + "ORDER BY empno\n"
>             + "ROWS BETWEEN 5 + 5 PRECEDING AND 1 PRECEDING) AS w_avg\n"
>             + "  from emp\n";
>     sql(sql)
>         .withPre(preBuilder.build())
>         .withPlanner(hepPlanner)
>         .check();
>   }
> {code}
> The plan before looks like this:
> {code:java}
> LogicalProject($0=[$2])
>   LogicalWindow(window#0=[window(order by [0] rows between $1 PRECEDING and $2 PRECEDING aggs [COUNT()])])
>     LogicalProject(EMPNO=[$0], $1=[+(5, 5)])
>       LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> {code}
> The problem is that the expression "5+5", which appears in the window bounds, has not been reduced to a constant by the rule WINDOW_REDUCE_EXPRESSIONS. Moreover, the next optimization rule PROJECT_TO_LOGICAL_PROJECT_AND_WINDOW has pushed this expression into the LogicalProject. So it appears locally that the LogicalWindow no longer has a constant bound, which is required by the SQL language spec (it is constant, but that is no longer apparent in the query). (At least our code generator is upset by this state of affairs.)
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)