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)