You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Steven Talbot (Jira)" <ji...@apache.org> on 2020/06/24 23:52:00 UTC

[jira] [Commented] (CALCITE-4090) DB2 aliasing breaks with a complex select above a subselect

    [ https://issues.apache.org/jira/browse/CALCITE-4090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17144498#comment-17144498 ] 

Steven Talbot commented on CALCITE-4090:
----------------------------------------

There is a related case that is important to have a test for, because I hit it even after making what seemed like an obvious quick fix for above:
{code:java}
@Test void testDb2DialectSubselectFromUnion() {
  String query = "select count(foo), \"units_per_case\" "
      + "from (select \"units_per_case\", \"cases_per_pallet\", \"product_id\", 1 as foo from \"product\" where \"cases_per_pallet\" > 100 "
      + "union all select \"units_per_case\", \"cases_per_pallet\", \"product_id\", 1 as foo from \"product\" where \"cases_per_pallet\" < 100) "
      + "where \"cases_per_pallet\" > 100\n"
      + "group by \"product_id\", \"units_per_case\" "
      + "order by \"units_per_case\" desc";
  final String expected = "SELECT COUNT(*), t.units_per_case\n" +
      "FROM (SELECT product.units_per_case, product.cases_per_pallet, product.product_id, 1 AS " +
      "FOO\n" +
      "FROM foodmart.product AS product) AS t\n" +
      "WHERE t.cases_per_pallet > 100\n" +
      "GROUP BY t.product_id, t.units_per_case\n" +
      "ORDER BY t.units_per_case DESC";
  sql(query).withDb2().ok(expected);
}
{code}

> DB2 aliasing breaks with a complex select above a subselect
> -----------------------------------------------------------
>
>                 Key: CALCITE-4090
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4090
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Steven Talbot
>            Priority: Major
>
> Test in RelToSqlConverterTest:
> {code:java}
> @Test void testDb2DialectSubselect() {
>   String query = "select count(foo), \"units_per_case\" "
>       + "from (select \"units_per_case\", \"cases_per_pallet\", \"product_id\", 1 as foo from \"product\") where \"cases_per_pallet\" > 100 "
>       + "group by \"product_id\", \"units_per_case\" "
>       + "order by \"units_per_case\" desc";
>   final String expected = "SELECT COUNT(*), t.units_per_case\n" +
>       "FROM (SELECT product.units_per_case, product.cases_per_pallet, product.product_id, 1 AS " +
>       "FOO\n" +
>       "FROM foodmart.product AS product) AS t\n" +
>       "WHERE t.cases_per_pallet > 100\n" +
>       "GROUP BY t.product_id, t.units_per_case\n" +
>       "ORDER BY t.units_per_case DESC";
>   sql(query).withDb2().ok(expected);
> }
> {code}
> The test fails with the "t." alias qualifier in the group by/order by/main select actually being "t0.". 
> From stepping through the code in the debugger, I believe this is a general problem with the way aliases are calculated in situations like this by SqlImplementor, but other dialects with hasImplicitTableAlias() do not force qualified contexts and therefore do not hit this.



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