Leonid Chistov created CALCITE-5518:
---------------------------------------

             Summary: RelToSql converter generates invalid order of ROLLUP 
fields
                 Key: CALCITE-5518
                 URL: https://issues.apache.org/jira/browse/CALCITE-5518
             Project: Calcite
          Issue Type: Bug
          Components: jdbc-adapter
    Affects Versions: 1.32.0
            Reporter: Leonid Chistov


RelToSqlConverter generates wrong code for Aggregate nodes with grouping sets 
classified as `ROLLUP` grouping but with order of rollup not matching order of 
grouping fields.

This can be demonstrated by the following test, that would fail if added to 
RelToSqlConverterTest class:
{code:java}
@Test void testGroupingSetsRollupNonNaturalOrder() {
  final String query = "select \"product_class_id\", \"brand_name\"\n"
      + "from \"product\"\n"
      + "group by GROUPING SETS ((\"product_class_id\", \"brand_name\"),"
      + " (\"brand_name\"), ())\n";
  final String expected = "SELECT \"product_class_id\", \"brand_name\"\n"
      + "FROM \"foodmart\".\"product\"\n"
      + "GROUP BY ROLLUP (\"brand_name\", \"product_class_id\")";
  sql(query)
      .withPostgresql().ok(expected);
}{code}
As the result we get the following SQL code:
{code:java}
SELECT product_class_id, brand_name
FROM foodmart.product
GROUP BY ROLLUP(product_class_id, brand_name){code}
While the correct code would be:
{code:java}
SELECT product_class_id, brand_name
FROM foodmart.product
GROUP BY ROLLUP(brand_name, product_class_id){code}
Source of the bug is that we treat grouping sets \{0, 1}, \{1}, {} as rollup 
grouping, but right after that we generate SQL code as if grouping sets were 
\{0, 1}, \{0}, {}.



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

Reply via email to