Henry Robinson created HIVE-5060:
------------------------------------

             Summary: JDBC driver assumes executeStatement is synchronous
                 Key: HIVE-5060
                 URL: https://issues.apache.org/jira/browse/HIVE-5060
             Project: Hive
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 0.11.0
            Reporter: Henry Robinson


The JDBC driver seems to assume that {{ExecuteStatement}} is a synchronous call 
when performing updates via {{executeUpdate}}, where the following comment on 
the RPC in the Thrift file indicates otherwise:

{code}
// ExecuteStatement()
//
// Execute a statement.
// The returned OperationHandle can be used to check on the
// status of the statement, and to fetch results once the
// statement has finished executing.
{code}

I understand that Hive's implementation of {{ExecuteStatement}} is blocking 
(see https://issues.apache.org/jira/browse/HIVE-4569), but presumably other 
implementations of the HiveServer2 API (and I'm talking specifically about 
Impala here, but others might have a similar concern) should be free to return 
a pollable {{OperationHandle}} per the specification.

The JDBC driver's {{executeUpdate}} is as follows:

{code}
public int executeUpdate(String sql) throws SQLException {
    execute(sql);
    return 0;
  }
{code}

{{execute(sql)}} discards the {{OperationHandle}} that it gets from the server 
after determining whether there are results to be fetched.

This is problematic for us, because Impala will cancel queries that are running 
when a session executes, but there's no easy way to be sure that an {{INSERT}} 
statement has completed before terminating a session on the client.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to