Choi JaeHwan created HIVE-18268:
-----------------------------------

             Summary: Hive Prepared Statement when split with double quoted in 
query fails
                 Key: HIVE-18268
                 URL: https://issues.apache.org/jira/browse/HIVE-18268
             Project: Hive
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 2.3.2
            Reporter: Choi JaeHwan
            Assignee: Choi JaeHwan


HIVE-13625, Change sql statement split when odd number of escape characters, 
and add parameter counter validation, above 

{code:java}
// prev code
    StringBuilder newSql = new StringBuilder(parts.get(0));
    for(int i=1;i<parts.size();i++){
      if(!parameters.containsKey(i)){
        throw new SQLException("Parameter #"+i+" is unset");
      }
      newSql.append(parameters.get(i));
      newSql.append(parts.get(i));
    }

// change from HIVE-13625
    int paramLoc = 1;
    while (getCharIndexFromSqlByParamLocation(sql, '?', paramLoc) > 0) {
      // check the user has set the needs parameters
      if (parameters.containsKey(paramLoc)) {
        int tt = getCharIndexFromSqlByParamLocation(newSql.toString(), '?', 1);
        newSql.deleteCharAt(tt);
        newSql.insert(tt, parameters.get(paramLoc));
      }
      paramLoc++;
    }
{code}

If the number of split SQL and the number of parameters are not matched, an 
SQLException is thrown

Currently, when splitting SQL, there is no processing for double quoted, and 
when the token ('?' ) is between double quote, SQL is split.

i think when the token between double quoted is literal, it is correct to not 
split.

for example, above the query;

{code:java}
// Some comments here
1:  String query =  " select 1 from x where qa="?" "
2:  String query = " SELECT 1 FROM `x` WHERE (trecord LIKE "ALA[d_?]%")
{code}

? is literal, then query do not split. 




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to