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

Jinfeng Ni commented on DRILL-2199:
-----------------------------------

+. Overall looks good to me. 

Just one minor comments:

1. toType.getMinorType().name().startsWith("DECIMAL")
Will it better to add a static method Types.isDecimal() which will use the Enum 
for MinorType?  This will prevent bug when Drill adds support of user defined 
type, and the UDT has a name starts with "DECIMAL", but actually is something 
else.



> Wrong results while using case expression with decimal data type
> ----------------------------------------------------------------
>
>                 Key: DRILL-2199
>                 URL: https://issues.apache.org/jira/browse/DRILL-2199
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Mehant Baid
>            Assignee: Jinfeng Ni
>         Attachments: DRILL-2199.patch
>
>
> Consider the below SQL statement:
> "select 
> case when true then cast(employee_id as decimal(15, 5)) else cast('0.0' as 
> decimal(5, 2)) end 
> from cp.`employee.json` where employee_id = 1"
> This should return 1.00000 instead Drill returns 100000. In the case 
> statement the first expression (condition expression) is nullable and the 
> else expression is non-nullable. For our codegen to work correctly we make 
> the non-nullable expression also nullable using convertToNullableXHolder() 
> functions. These functions however do not preserve the scale and precision of 
> the input, hence the output we get is the unscaled value of the decimal.
> Fix is to make the converToNullableDecimalHolder() functions preserve the 
> scale and precision by returning the correct major type.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to