You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Ashutosh Chauhan (JIRA)" <ji...@apache.org> on 2016/07/11 05:34:10 UTC
[jira] [Updated] (HIVE-13625) Hive Prepared Statement when executed
with escape characters in parameter fails
[ https://issues.apache.org/jira/browse/HIVE-13625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ashutosh Chauhan updated HIVE-13625:
------------------------------------
Resolution: Fixed
Fix Version/s: 2.2.0
Status: Resolved (was: Patch Available)
Pushed to master. Thanks, Zoltan!
> Hive Prepared Statement when executed with escape characters in parameter fails
> -------------------------------------------------------------------------------
>
> Key: HIVE-13625
> URL: https://issues.apache.org/jira/browse/HIVE-13625
> Project: Hive
> Issue Type: Bug
> Components: JDBC
> Reporter: Daya Venkatesan
> Assignee: Zoltan Haindrich
> Fix For: 2.2.0
>
> Attachments: HIVE-13625.patch
>
>
> When setting parameters to a Hive Prepared Statement, if the parameter has an odd number of escape characters, then the Statement fails.
> For example, I set one of the parameters to "/somepath/\044{yyyy}/\044{MM}/\044{dd}/". Here, I have escaped the dollar character with \044 because Hive gives an Atlas exception with "$" character.
> Now, when the parameters are getting set inside Hive, getCharIndexFromSqlByParamLocation throws an Exception.
> Hive records something called signal count.
> if (c == '\'' || c == '\\')// record the count of char "'" and char "\"
> {
> signalCount++;
> }
> And the parameter is set only if the signalCount %2 is 0.
> else if (c == cchar && signalCount % 2 == 0) {// check if the ? is really the parameter
> num++;
> if (num == paramLoc) {
> charIndex = i;
> break;
> }
> Since my parameter has three "\" characters, the signal Count modulo is not 0 and the parameter is not set at all throwing an exception.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)