Hello Max,

Thanks for reporting this. At first glance it seems a regression, could you
please create a Jira ticket (and link it to CALCITE-5424)?

Best,
Ruben


On Wed, Feb 15, 2023 at 3:27 PM Maksim Zhuravkov <[email protected]>
wrote:

> Hello, team.
>
> Thank you for all the effort you have put into this project over the years.
>
> After updating to calcite 1.33.0, I found that validation of the following
> query fails with a ClassCastException.
>
> Query: SELECT COALESCE(DATE '2021-07-08', DATE '2020-01-01’)
>
> Error:
>
> org.apache.calcite.tools.ValidationException:
> java.lang.ClassCastException: class org.apache.calcite.sql.SqlLiteral
> cannot be cast to class org.apache.calcite.sql.SqlUnknownLiteral
> (org.apache.calcite.sql.SqlLiteral and
> org.apache.calcite.sql.SqlUnknownLiteral are in unnamed module of loader
> 'app')
>
> at org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:226)
> at
> org.apache.calcite.rex.RexSqlStandardConvertletTableTest.convertSqlToRel(RexSqlStandardConvertletTableTest.java:101)
> at
> com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
> at
> com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
> at
> com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
> at
> com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
> at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
> Caused by: java.lang.ClassCastException: class
> org.apache.calcite.sql.SqlLiteral cannot be cast to class
> org.apache.calcite.sql.SqlUnknownLiteral (org.apache.calcite.sql.SqlLiteral
> and org.apache.calcite.sql.SqlUnknownLiteral are in unnamed module of
> loader 'app')
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.resolveLiteral(SqlValidatorImpl.java:6152)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:6617)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:6590)
>
> When I move a commit pointer prior to the commit that introduces 
> SqlUnknownLiteral ([CALCITE-5424] Customize handling of literals based on 
> type system), the test cases above passes successfully.
>
> I haven’t given a more thorough look at this error and maybe this behaviour 
> was introduced after that commit,  but I think this error is most likely a 
> bug.
>
> The reproducer (added to RexSqlStandardConvertletTableTest):
>
>   @Test void testCoalesceWithUnknownLiteral() {
>     final Project project = (Project) convertSqlToRel(
>         "SELECT COALESCE(DATE '2021-07-08', DATE '2020-01-01')", false);
>
>     final RexNode rex = project.getProjects().get(0);
>     final RexToSqlNodeConverter rexToSqlNodeConverter = 
> rexToSqlNodeConverter();
>     final SqlNode convertedSql = rexToSqlNodeConverter.convertNode(rex);
>
>     assertEquals(
>         "CASE WHEN DATE '2021-07-08' IS NOT NULL THEN DATE '2021-07-08' ELSE 
> DATE '2020-01-01' END",
>         convertedSql.toString());
>   }
>
>
> [CALCITE-5424] Customize handling of literals based on type system - ASF JIRA 
> <https://issues.apache.org/jira/browse/CALCITE-5424>
> issues.apache.org <https://issues.apache.org/jira/browse/CALCITE-5424>
> [image: fav-jsw.png] <https://issues.apache.org/jira/browse/CALCITE-5424> 
> <https://issues.apache.org/jira/browse/CALCITE-5424>
>
>
> Best regards,
>
> Max Zhuravkov
>
>
>
>

Reply via email to