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

Yingyu Wang updated CALCITE-5145:
---------------------------------
    Description: 
Adding following test in SqlToRelConverterTest.java can reproduce the problem
{code:java}
//core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
  @Test public void testGroupingSetsDerivedCol() {    sql("SELECT empno,\n"     
   + "CASE\n"        + "when ename in ('Fred','Eric') then 'CEO'\n"        + 
"else 'Other'\n"        + "END AS derived_col\n"        + "from emp\n"        + 
"group by grouping sets ((empno, derived_col),(empno))")        
.withConformance(SqlConformanceEnum.LENIENT).ok();  } {code}
The error:
{code:java}
Conversion to relational algebra failed to preserve datatypes:validated 
type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) NOT NULL DERIVED_COL) NOT 
NULLconverted type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) DERIVED_COL) NOT 
NULLrel:LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]])  
LogicalProject(EMPNO=[$0], DERIVED_COL=[CASE(SEARCH($1, Sarg['Eric', 
'Fred']:CHAR(4)), 'CEO  ', 'Other')])    LogicalTableScan(table=[[CATALOG, 
SALES, EMP]])
java.lang.AssertionError: Conversion to relational algebra failed to preserve 
datatypes:validated type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) NOT NULL 
DERIVED_COL) NOT NULLconverted type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) 
DERIVED_COL) NOT NULLrel:LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, 
{0}]])  LogicalProject(EMPNO=[$0], DERIVED_COL=[CASE(SEARCH($1, Sarg['Eric', 
'Fred']:CHAR(4)), 'CEO  ', 'Other')])    LogicalTableScan(table=[[CATALOG, 
SALES, EMP]])
    at 
org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:487)
    at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:602)
    at 
org.apache.calcite.sql.test.AbstractSqlTester.convertSqlToRel2(AbstractSqlTester.java:536)
    at 
org.apache.calcite.sql.test.AbstractSqlTester.assertSqlConvertsTo(AbstractSqlTester.java:477)
    at 
org.apache.calcite.sql.test.AbstractSqlTester.assertConvertsTo(AbstractSqlTester.java:455)
    at 
org.apache.calcite.test.SqlToRelFixture.convertsTo(SqlToRelFixture.java:106)    
at org.apache.calcite.test.SqlToRelFixture.ok(SqlToRelFixture.java:94)    at 
org.apache.calcite.test.SqlToRelConverterTest.testGroupingSetsDerivedCol(SqlToRelConverterTest.java:344)
 {code}

  was:
Adding filling test in SqlToRelConverterTest.java can reproduce the problem
{code:java}
//core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
  @Test public void testGroupingSetsDerivedCol() {    sql("SELECT empno,\n"     
   + "CASE\n"        + "when ename in ('Fred','Eric') then 'CEO'\n"        + 
"else 'Other'\n"        + "END AS derived_col\n"        + "from emp\n"        + 
"group by grouping sets ((empno, derived_col),(empno))")        
.withConformance(SqlConformanceEnum.LENIENT).ok();  } {code}
The error:
{code:java}
Conversion to relational algebra failed to preserve datatypes:validated 
type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) NOT NULL DERIVED_COL) NOT 
NULLconverted type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) DERIVED_COL) NOT 
NULLrel:LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]])  
LogicalProject(EMPNO=[$0], DERIVED_COL=[CASE(SEARCH($1, Sarg['Eric', 
'Fred']:CHAR(4)), 'CEO  ', 'Other')])    LogicalTableScan(table=[[CATALOG, 
SALES, EMP]])
java.lang.AssertionError: Conversion to relational algebra failed to preserve 
datatypes:validated type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) NOT NULL 
DERIVED_COL) NOT NULLconverted type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) 
DERIVED_COL) NOT NULLrel:LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, 
{0}]])  LogicalProject(EMPNO=[$0], DERIVED_COL=[CASE(SEARCH($1, Sarg['Eric', 
'Fred']:CHAR(4)), 'CEO  ', 'Other')])    LogicalTableScan(table=[[CATALOG, 
SALES, EMP]])
    at 
org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:487)
    at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:602)
    at 
org.apache.calcite.sql.test.AbstractSqlTester.convertSqlToRel2(AbstractSqlTester.java:536)
    at 
org.apache.calcite.sql.test.AbstractSqlTester.assertSqlConvertsTo(AbstractSqlTester.java:477)
    at 
org.apache.calcite.sql.test.AbstractSqlTester.assertConvertsTo(AbstractSqlTester.java:455)
    at 
org.apache.calcite.test.SqlToRelFixture.convertsTo(SqlToRelFixture.java:106)    
at org.apache.calcite.test.SqlToRelFixture.ok(SqlToRelFixture.java:94)    at 
org.apache.calcite.test.SqlToRelConverterTest.testGroupingSetsDerivedCol(SqlToRelConverterTest.java:344)
 {code}


> AssertionError: "Conversion to relational algebra failed to preserve 
> datatypes" when use derived column ing Grouping Sets
> -------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-5145
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5145
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Yingyu Wang
>            Priority: Major
>
> Adding following test in SqlToRelConverterTest.java can reproduce the problem
> {code:java}
> //core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
>   @Test public void testGroupingSetsDerivedCol() {    sql("SELECT empno,\n"   
>      + "CASE\n"        + "when ename in ('Fred','Eric') then 'CEO'\n"        
> + "else 'Other'\n"        + "END AS derived_col\n"        + "from emp\n"      
>   + "group by grouping sets ((empno, derived_col),(empno))")        
> .withConformance(SqlConformanceEnum.LENIENT).ok();  } {code}
> The error:
> {code:java}
> Conversion to relational algebra failed to preserve datatypes:validated 
> type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) NOT NULL DERIVED_COL) NOT 
> NULLconverted type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) DERIVED_COL) 
> NOT NULLrel:LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]])  
> LogicalProject(EMPNO=[$0], DERIVED_COL=[CASE(SEARCH($1, Sarg['Eric', 
> 'Fred']:CHAR(4)), 'CEO  ', 'Other')])    LogicalTableScan(table=[[CATALOG, 
> SALES, EMP]])
> java.lang.AssertionError: Conversion to relational algebra failed to preserve 
> datatypes:validated type:RecordType(INTEGER NOT NULL EMPNO, CHAR(5) NOT NULL 
> DERIVED_COL) NOT NULLconverted type:RecordType(INTEGER NOT NULL EMPNO, 
> CHAR(5) DERIVED_COL) NOT NULLrel:LogicalAggregate(group=[{0, 1}], 
> groups=[[{0, 1}, {0}]])  LogicalProject(EMPNO=[$0], 
> DERIVED_COL=[CASE(SEARCH($1, Sarg['Eric', 'Fred']:CHAR(4)), 'CEO  ', 
> 'Other')])    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:487)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:602)
>     at 
> org.apache.calcite.sql.test.AbstractSqlTester.convertSqlToRel2(AbstractSqlTester.java:536)
>     at 
> org.apache.calcite.sql.test.AbstractSqlTester.assertSqlConvertsTo(AbstractSqlTester.java:477)
>     at 
> org.apache.calcite.sql.test.AbstractSqlTester.assertConvertsTo(AbstractSqlTester.java:455)
>     at 
> org.apache.calcite.test.SqlToRelFixture.convertsTo(SqlToRelFixture.java:106)  
>   at org.apache.calcite.test.SqlToRelFixture.ok(SqlToRelFixture.java:94)    
> at 
> org.apache.calcite.test.SqlToRelConverterTest.testGroupingSetsDerivedCol(SqlToRelConverterTest.java:344)
>  {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to