Mihai Budiu created CALCITE-7238:
------------------------------------

             Summary: Query that creates a ROW value triggers an assertion 
failure in SqlToRelConverter
                 Key: CALCITE-7238
                 URL: https://issues.apache.org/jira/browse/CALCITE-7238
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.40.0
            Reporter: Mihai Budiu


Here is a test that fails in SqlToRelConverterTest:

{code:java}
    sql("WITH tbl(r) AS (VALUES(1)) SELECT\n"
        + "ARRAY(SELECT r, r FROM tbl)").ok();
{code}

This is the stack trace:

{code}
java.lang.AssertionError: Conversion to relational algebra failed to preserve 
datatypes:
validated type:
RecordType(RecordType(INTEGER NOT NULL R, INTEGER NOT NULL R) NOT NULL ARRAY 
NOT NULL EXPR$0) NOT NULL
converted type:
RecordType(RecordType(INTEGER NOT NULL R, INTEGER NOT NULL R0) NOT NULL ARRAY 
NOT NULL EXPR$0) NOT NULL
rel:
LogicalProject(EXPR$0=[$1])
  LogicalJoin(condition=[true], joinType=[inner])
    LogicalValues(tuples=[[{ 0 }]])
    Collect(field=[EXPR$0])
      LogicalProject(R=[$0], R0=[$0])
        LogicalValues(tuples=[[{ 1 }]])

        at 
org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:526)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:645)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertWith(SqlToRelConverter.java:4916)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3957)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:630)
        at 
org.apache.calcite.sql.test.AbstractSqlTester.convertSqlToRel2(AbstractSqlTester.java:570)
        at 
org.apache.calcite.sql.test.AbstractSqlTester.assertSqlConvertsTo(AbstractSqlTester.java:511)
        at 
org.apache.calcite.sql.test.AbstractSqlTester.assertConvertsTo(AbstractSqlTester.java:489)
{code}

The problem seems to be that the inferred original type is actually incorrect, 
since it is a ROW type with two fields with the same name (R).  After 
conversion the fields are renamed, which makes the types not match.



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

Reply via email to