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

[jira] [Created] (CALCITE-5523) RelToSql converter generates GROUP BY clause with window expression

Leonid Chistov created CALCITE-5523:
---------------------------------------

             Summary: RelToSql converter generates GROUP BY clause with window expression
                 Key: CALCITE-5523
                 URL: https://issues.apache.org/jira/browse/CALCITE-5523
             Project: Calcite
          Issue Type: Bug
          Components: jdbc-adapter
            Reporter: Leonid Chistov


Wrong SQL code is generated when aggregation is done on the field being a result of window expression evaluation.

Example can be demonstrated by adding following code to RelToSqlConverterTest.java:
{code:java}
@Test void testConvertWindowGroupByToSql() {
  String query = "SELECT * FROM ("
      + "SELECT rank() over (order by \"hire_date\") \"rank\" FROM \"employee\""
      + ") GROUP BY \"rank\"";
  String expected ="SELECT * FROM ("
      + "SELECT rank() over (order by \"hire_date\") AS \"$0\" FROM \"employee\""
      + ") GROUP BY \"$0\"";

  sql(query).ok(expected);
}
{code}
Generated SQL code will look like:
{code:java}
SELECT RANK() OVER (ORDER BY hire_date) AS rank
FROM foodmart.employee
GROUP BY RANK() OVER (ORDER BY hire_date){code}
This is incorrect - window expressions are not allowed in GROUP BY clause by SQL standard and Calcite itself would produce following error message if this SQL code would be passed as input: 
{code:java}
Windowed aggregate expression is illegal in GROUP BY clause {code}



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