Ádám Szita created HIVE-26745:
---------------------------------

             Summary: HPL unable to handle Decimal or null values in hplsql mode
                 Key: HIVE-26745
                 URL: https://issues.apache.org/jira/browse/HIVE-26745
             Project: Hive
          Issue Type: Bug
            Reporter: Ádám Szita
            Assignee: Ádám Szita


Decimal or null values coming from Hive service side are not handled properly 
in HPL.

When we're using beeline in HPL mode then the results of queries such as SELECT 
CAST are returned in RowSet objects directly from HS2 code. This is due to 
HplSqlQueryExecutor expecting RowSet type in OperationRowResult. For this 
RowSet interface, a ColumnBasedSet class brings the imlementation which holds a 
ColumnBuffer list to hold the result data.

The internal representation however cannot hold BigDecimal values, as seen 
here: 
https://github.com/apache/hive/blob/master/serde/src/java/org/apache/hadoop/hive/serde2/thrift/ColumnBuffer.java#L396
 so while the SELECT CAST query will produce a HiveBigDecimal instance, it will 
be converted to String at 
https://github.com/apache/hive/blob/master/service/src/java/org/apache/hive/service/cli/ColumnBasedSet.java#L110-L112
 before we add this piece of data to the result set.

Further down the line we will see class java.lang.String cannot be casted to 
class java.math.BigDecimal.

ColumnBuffer seems like a pretty commonly used code and I don't think we would 
want to try and extend this with the ability the carry decimal types. Perhaps 
we could create a Jira to recreate the BigDecimal value from the String 
representation arriving on the HPL side.

Since the two issues are both about value conversion I'm aiming to fix these in 
one go.



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

Reply via email to