[ https://issues.apache.org/jira/browse/HIVE-17030?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmitry Tolpeko updated HIVE-17030: ---------------------------------- Attachment: HIVE-17030.1.patch > HPL/SQL: Many cast operations are ignored without warning or notice. > -------------------------------------------------------------------- > > Key: HIVE-17030 > URL: https://issues.apache.org/jira/browse/HIVE-17030 > Project: Hive > Issue Type: Bug > Components: hpl/sql > Reporter: Carter Shanklin > Assignee: Dmitry Tolpeko > Priority: Critical > Attachments: HIVE-17030.1.patch > > > This bug is part of a series of issues and surprising behavior I encountered > writing a reporting script that would aggregate values and give rows > different classifications based on an the aggregate. Addressing some or all > of these issues would make HPL/SQL more accessible to newcomers. > Consider this code: > {code} > val1d := cast('10.0' as double); > val2d := cast('5.0' as double); > declare val1i int = 5; > declare val2i int = 5; > val1i = val1d; > diff := val1i - val2i; > {code} > What is the value of diff? You might think it is 5 but in fact it is 0. Why? > Because when you attempt to assign val1i to val1d, this code in Var.java is > executed: > {code} > else if (type == Type.BIGINT) { > if (val.type == Type.STRING) { > value = Long.parseLong((String)val.value); > } > } > else if (type == Type.DECIMAL) { > {code} > Since there is no case for assigning a double to a bigint, the expression is > essentially ignored and the value remains the same. This behavior leads to > many surprising results. > It would be best if HPL/SQL could re-use the cast code from Hive since there > are a lot of cases to consider. > Version = 3.0.0-SNAPSHOT r71f52d8ad512904b3f2c4f04fe39a33f2834f1f2 -- This message was sent by Atlassian JIRA (v6.4.14#64029)