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

Danny Chen resolved CALCITE-4265.
---------------------------------
    Fix Version/s: next
         Assignee: Danny Chen
       Resolution: Fixed

Fixed in 
[207bc8a|https://github.com/apache/calcite/commit/207bc8a0d731fa40e84309dfea3f8189b383e117],
 thanks for the PR, [~lllouiskuang] ~

> Improve error message when CAST to unknown type
> -----------------------------------------------
>
>                 Key: CALCITE-4265
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4265
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Danny Chen
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: next
>
>          Time Spent: 3h 40m
>  Remaining Estimate: 0h
>
> Improve error message when {{CAST}} to unknown type. If you add the following 
> test case to {{RelToSqlConverterTest}}, you get an 
> {{UnsupportedOperationException}} during validation due to the unknown 
> datatype {{SIGNED}}:
> {code}
> @Test void testSelectFromUnionGrouping() {
>     String query = "SELECT CASE WHEN \"t3\".\"groupingVal\" IN (0, 1) THEN 
> \"t\".\"fname\" ELSE NULL END AS name, "
>         + "CASE WHEN \"t3\".\"groupingVal\" = 0 THEN \"t\".\"birthdate\" ELSE 
> NULL END AS birthdate, AVG(\"t\".\"__f2\") AS "
>     + "\"__f2\", CAST(CASE WHEN \"t3\".\"groupingVal\" = 0 THEN 0 ELSE 1 END 
> AS SIGNED) AS \"__f3\", CAST(CASE WHEN"
>     + " \"t3\".\"groupingVal\" IN (0, 1) THEN 0 ELSE 1 END + CASE WHEN 
> \"t3\".\"groupingVal\" = 0 THEN 0 ELSE 2 "
>     + "END AS SIGNED) AS \"__f4\"\n"
>         + "FROM (SELECT \"fname\", \"birthdate\", \"total_children\" + 2 AS 
> \"__f2\"\n"
>         + "FROM \"foodmart\".\"customer\") AS \"t\",\n"
>         + "(SELECT 0 AS \"groupingVal\"\n"
>         + "UNION ALL\n"
>         + "SELECT 1 AS \"groupingVal\"\n"
>         + "UNION ALL\n"
>         + "SELECT 2 AS \"groupingVal\") AS \"t3\"\n"
>         + "GROUP BY CASE WHEN \"t3\".\"groupingVal\" IN (0, 1) THEN 
> \"t\".\"fname\" ELSE NULL END, CASE WHEN \"t3\""
>         + ".\"groupingVal\" = 0 THEN \"t\".\"birthdate\" ELSE NULL END, 
> \"t3\".\"groupingVal\"";
>     sql(query).ok("--");
>   }{code} throws
> {noformat}
> java.lang.UnsupportedOperationException: class 
> org.apache.calcite.sql.SqlIdentifier: SIGNED
>       at org.apache.calcite.util.Util.needToImplement(Util.java:1074)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.getValidatedNodeType(SqlValidatorImpl.java:1655)
>       at 
> org.apache.calcite.sql.SqlUserDefinedTypeNameSpec.deriveType(SqlUserDefinedTypeNameSpec.java:49)
>       at 
> org.apache.calcite.sql.SqlDataTypeSpec.deriveType(SqlDataTypeSpec.java:222)
>       at 
> org.apache.calcite.sql.SqlDataTypeSpec.deriveType(SqlDataTypeSpec.java:209)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5868)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5753)
>       at 
> org.apache.calcite.sql.SqlDataTypeSpec.accept(SqlDataTypeSpec.java:186)
> {noformat}
> If you change {{SIGNED}} to {{INTEGER}} the exception goes away.
> Clearly this test case is not minimal. There could probably be a 1 line test 
> case for {{SqlValidatorTest}}.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to