[
https://issues.apache.org/jira/browse/DRILL-3431?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chris Westin updated DRILL-3431:
--------------------------------
Assignee: Daniel Barclay (Drill)
> CHAR not handled same as VARCHAR for cast to INTERVAL
> -----------------------------------------------------
>
> Key: DRILL-3431
> URL: https://issues.apache.org/jira/browse/DRILL-3431
> Project: Apache Drill
> Issue Type: Bug
> Components: Functions - Drill
> Reporter: Daniel Barclay (Drill)
> Assignee: Daniel Barclay (Drill)
>
> Expressions of type VARCHAR can be used in casting to an interval type. (The
> expression itself is not rejected, even if a value is invalid and causes an
> error in execution.)
> However, expressions of type CHAR are rejected.
> Note that since character string literals are of type CHAR, that means that
> character string literals cannot be cast to interval types.
>
> In the following, note how the expression of type VARCHAR (the cast
> specification casting to VARCHAR(10)) is accepted (execution gets to the
> conversion's format syntax check), but how the expressions of type CHAR (the
> cast to CHAR(10) and the direct character string literal) are rejected:
> {noformat}
> 0: jdbc:drill:zk=local> SELECT CAST( CAST( 'xxx' AS VARCHAR(10) ) AS INTERVAL
> HOUR ) FROM INFORMATION_SCHEMA.CATALOGS;
> Error: SYSTEM ERROR: IllegalArgumentException: Invalid format: "xxx"
> Fragment 0:0
> [Error Id: 237092b2-d203-4126-9a6b-e036bc229cd4 on dev-linux2:31010]
> (state=,code=0)
> 0: jdbc:drill:zk=local> SELECT CAST( CAST( 'xxx' AS CHAR(10) ) AS INTERVAL
> HOUR ) FROM INFORMATION_SCHEMA.CATALOGS;
> Jun 30, 2015 11:39:55 AM
> org.apache.calcite.sql.validate.SqlValidatorException <init>
> SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: Cast function
> cannot convert value of type CHAR(10) to type INTERVAL HOUR
> Jun 30, 2015 11:39:55 AM org.apache.calcite.runtime.CalciteException <init>
> SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1,
> column 8 to line 1, column 57: Cast function cannot convert value of type
> CHAR(10) to type INTERVAL HOUR
> Error: PARSE ERROR: From line 1, column 8 to line 1, column 57: Cast function
> cannot convert value of type CHAR(10) to type INTERVAL HOUR
> [Error Id: c50b7497-d85f-42af-bcee-512b26363a66 on dev-linux2:31010]
> (state=,code=0)
> 0: jdbc:drill:zk=local> SELECT CAST( 'xxx' AS INTERVAL HOUR ) FROM
> INFORMATION_SCHEMA.CATALOGS;
> Jun 30, 2015 11:40:02 AM
> org.apache.calcite.sql.validate.SqlValidatorException <init>
> SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: Cast function
> cannot convert value of type CHAR(3) to type INTERVAL HOUR
> Jun 30, 2015 11:40:02 AM org.apache.calcite.runtime.CalciteException <init>
> SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1,
> column 8 to line 1, column 37: Cast function cannot convert value of type
> CHAR(3) to type INTERVAL HOUR
> Error: PARSE ERROR: From line 1, column 8 to line 1, column 37: Cast function
> cannot convert value of type CHAR(3) to type INTERVAL HOUR
> [Error Id: 16bda2bf-a907-4c1d-92e5-0344e4b8e286 on dev-linux2:31010]
> (state=,code=0)
> 0: jdbc:drill:zk=local>
> {noformat}
> Is Drill missing an implicit cast (to convert CHAR to VARCHAR before checking
> types for the case specification)? Or is it that the cast specification code
> should accept type CHAR but does not? (Or is it something else?)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)