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