You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Zoltan Haindrich (JIRA)" <ji...@apache.org> on 2016/05/03 15:18:12 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 ]

Zoltan Haindrich updated HIVE-13625:
------------------------------------
    Attachment: HIVE-13625.patch

i've changed the logic to split up the sql statement.

i've also added an SQLException if there are unset parameters

> 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
>            Reporter: Daya Venkatesan
>            Assignee: Zoltan Haindrich
>         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)