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:
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:
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.