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)