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/08 15:31:00 UTC

[jira] [Updated] (CALCITE-5519) RelToSql converter fails when aggregate under filter with correlation variable

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

Leonid Chistov updated CALCITE-5519:
------------------------------------
    Affects Version/s: 1.32.0

> RelToSql converter fails when aggregate under filter with correlation variable
> ------------------------------------------------------------------------------
>
>                 Key: CALCITE-5519
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5519
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.32.0
>            Reporter: Leonid Chistov
>            Priority: Minor
>
> The following test case would fail if added to RelToSqlConverterTest.java:
> {code:java}
> @Test void testExistsWithAggregateBelowFilter() {
>   String query = "select \"product_name\" from \"product\" "
>       + "where exists (select 1 from ("
>       + "select b.\"customer_id\" as customer_id, max(b.\"unit_sales\") as umax "
>       + "from \"sales_fact_1997\"b "
>       + "group by b.\"customer_id\") where umax > \"product_id\")";
>   String expected = "?";
>   sql(query).withConfig(c -> c.withExpand(false)).ok(expected);
> } {code}
> The exception is:
> {code:java}
> java.lang.UnsupportedOperationException
>     at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.getAliasContext(SqlImplementor.java:977)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:650)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:1096)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.callToSql(SqlImplementor.java:798)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:772)
>     at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:426)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
>     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.base/java.lang.reflect.Method.invoke(Method.java:568)
>     at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:531)
>     at org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:139)
>     at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:147)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:216)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:204)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor.visitRoot(SqlImplementor.java:180)
>     at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:745)
>     at 
> ........................................................................
>     Suppressed: java.lang.Throwable: Error while converting RelNode to SqlNode:
> LogicalFilter(condition=[>($1, $cor0.product_id)])
>   LogicalAggregate(group=[{0}], UMAX=[MAX($1)])
>     LogicalProject(CUSTOMER_ID=[$2], unit_sales=[$7])
>       JdbcTableScan(table=[[foodmart, sales_fact_1997]]) {code}
> What happens is that for tree
> {code:java}
> LogicalProject(product_name=[$3])
>   LogicalFilter(condition=[EXISTS({
> LogicalFilter(condition=[>($1, $cor0.product_id)])
>   LogicalAggregate(group=[{0}], UMAX=[MAX($1)])
>     LogicalProject(CUSTOMER_ID=[$2], unit_sales=[$7])
>       JdbcTableScan(table=[[foodmart, sales_fact_1997]])
> })], variablesSet=[[$cor0]])
>     JdbcTableScan(table=[[foodmart, product]]) {code}
> with LogicalAggregate under LogicalFilter with correlation variable reference, we construct a Context that is not capable of providing AliasContext.



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