[ 
https://issues.apache.org/jira/browse/CALCITE-6556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17877886#comment-17877886
 ] 

Karamsetty Vishnu vardhan commented on CALCITE-6556:
----------------------------------------------------

can i take this issue and fix it?

> Return Data Type of CASE Statement is Incorrect
> -----------------------------------------------
>
>                 Key: CALCITE-6556
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6556
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Karamsetty Vishnu vardhan
>            Assignee: Karamsetty Vishnu vardhan
>            Priority: Major
>
> I have encountered an issue where Trino is throwing a stale view error when 
> it shouldn't. My environment involves a table and a view created in hive. 
> Here are the DDL statements used:
> Table I have created:
> create table test.DECBIGINTCHECK ( ID DECIMAL(12,0), NAME varchar);
> View I have created:
> create view test.decview2 as select name,case when ID=1 then 123456789012 
> else id end as newid from test.DECBIGINTCHECK;
>  
>  
> As i dig deeper i found that trino is using linkedin-coral library to 
> calculate the data types of columns and this linkedin-coral is using apache 
> calcite.
> There the return type of "{*}case when ID=1 then 1234567890123 else id 
> end{*}" of statement is coming decimal(12,0) instead of decimal(19,0). This 
> is happening because the return type is calculated as the superset of then 
> and else clauses return type.
> Here one clause return type is *BIGINT* and other one is {*}DECIMAL(12,0){*}.
> Found the root cause is 
>  
> SqlTypeFactoryImpl.leastRestrictiveSqlType function is not considering the 
> edge case of one type having precision and other not having precision. which 
> is pushing my use-case to
> where the calcite returns the leastrestrictive based on the precision values 
> (Here precision of BIGINT is -1)
>  
> This can be fixed by adding another flow in the if-else clause where one of 
> the types doesn't have precision.



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

Reply via email to