From 65b270073c358baf163ff3c70eb875a483811545 Mon Sep 17 00:00:00 2001 From: Azrael Park Date: Sun, 21 Jul 2013 03:13:14 +0900 Subject: [PATCH] HIVE-4901 Connection should be closed when Statement#execute() failed by TTransportException --- jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java | 2 +- jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index 00f4351..e1beb85 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -299,7 +299,7 @@ public Statement createStatement() throws SQLException { if (isClosed) { throw new SQLException("Can't create Statement, connection is closed"); } - return new HiveStatement(client, sessHandle); + return new HiveStatement(client, sessHandle, this); } /* diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java b/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java index 982ceb8..d69a6af 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java @@ -34,6 +34,7 @@ import org.apache.hive.service.cli.thrift.TExecuteStatementResp; import org.apache.hive.service.cli.thrift.TOperationHandle; import org.apache.hive.service.cli.thrift.TSessionHandle; +import org.apache.thrift.transport.TTransportException; /** * HiveStatement. @@ -43,6 +44,7 @@ private TCLIService.Iface client; private TOperationHandle stmtHandle; private final TSessionHandle sessHandle; + private HiveConnection connection; Map sessConf = new HashMap(); private int fetchSize = 50; /** @@ -74,9 +76,10 @@ /** * */ - public HiveStatement(TCLIService.Iface client, TSessionHandle sessHandle) { + public HiveStatement(TCLIService.Iface client, TSessionHandle sessHandle, HiveConnection connection) { this.client = client; this.sessHandle = sessHandle; + this.connection = connection; } /* @@ -168,6 +171,15 @@ public void closeOnCompletion() throws SQLException { throw new SQLException("Method not supported"); } + public void closeConnection(){ + try { + connection.close(); + } catch (SQLException eS){ + // need to print trace? + // eS.printStackTrace(); + } + } + /* * (non-Javadoc) * @@ -188,6 +200,9 @@ public boolean execute(String sql) throws SQLException { stmtHandle = execResp.getOperationHandle(); } catch (SQLException eS) { throw eS; + }catch (TTransportException ex){ + closeConnection(); + throw new SQLException(ex.toString(), "08S01", ex); } catch (Exception ex) { throw new SQLException(ex.toString(), "08S01", ex); } @@ -195,6 +210,7 @@ public boolean execute(String sql) throws SQLException { if (!stmtHandle.isHasResultSet()) { return false; } + resultSet = new HiveQueryResultSet.Builder().setClient(client).setSessionHandle(sessHandle) .setStmtHandle(stmtHandle).setMaxRows(maxRows).setFetchSize(fetchSize) .build(); -- 1.8.2.1