Leonid Chistov created CALCITE-5519:
---------------------------------------

             Summary: 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
            Reporter: Leonid Chistov


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)

Reply via email to