diff --git jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java index 4cda742..b693e93 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java @@ -59,6 +59,7 @@ * all Hive result sets. */ public abstract class HiveBaseResultSet implements ResultSet { + protected Statement statement = null; protected SQLWarning warningChain = null; protected boolean wasNull = false; protected TRow row; @@ -615,7 +616,7 @@ public short getShort(String columnName) throws SQLException { } public Statement getStatement() throws SQLException { - throw new SQLException("Method not supported"); + return this.statement; } /** diff --git jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java index 2bc4317..f08c6b7 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java @@ -1387,7 +1387,7 @@ public boolean execute() throws SQLException { */ public ResultSet executeQuery() throws SQLException { - return new HiveQueryResultSet.Builder().build(); + return new HiveQueryResultSet.Builder(this).build(); } /* diff --git jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index f155686..5a6ce44 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -415,7 +415,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(this, client, sessHandle); } /* @@ -514,7 +514,7 @@ public int getHoldability() throws SQLException { */ public DatabaseMetaData getMetaData() throws SQLException { - return new HiveDatabaseMetaData(client, sessHandle); + return new HiveDatabaseMetaData(this, client, sessHandle); } public int getNetworkTimeout() throws SQLException { @@ -643,7 +643,7 @@ public CallableStatement prepareCall(String sql, int resultSetType, */ public PreparedStatement prepareStatement(String sql) throws SQLException { - return new HivePreparedStatement(client, sessHandle, sql); + return new HivePreparedStatement(this, client, sessHandle, sql); } /* @@ -654,7 +654,7 @@ public PreparedStatement prepareStatement(String sql) throws SQLException { public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { - return new HivePreparedStatement(client, sessHandle, sql); + return new HivePreparedStatement(this, client, sessHandle, sql); } /* @@ -690,7 +690,7 @@ public PreparedStatement prepareStatement(String sql, String[] columnNames) public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { - return new HivePreparedStatement(client, sessHandle, sql); + return new HivePreparedStatement(this, client, sessHandle, sql); } /* diff --git jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java index 7a3170a..daa73bf 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java @@ -55,6 +55,7 @@ */ public class HiveDatabaseMetaData implements DatabaseMetaData { + private final HiveConnection connection; private final TCLIService.Iface client; private final TSessionHandle sessHandle; private static final String CATALOG_SEPARATOR = "."; @@ -67,7 +68,9 @@ /** * */ - public HiveDatabaseMetaData(TCLIService.Iface client, TSessionHandle sessHandle) { + public HiveDatabaseMetaData(HiveConnection connection, TCLIService.Iface client, + TSessionHandle sessHandle) { + this.connection = connection; this.client = client; this.sessHandle = sessHandle; } @@ -241,7 +244,7 @@ public int compare(JdbcColumn o1, JdbcColumn o2) { } public Connection getConnection() throws SQLException { - throw new SQLException("Method not supported"); + return this.connection; } public ResultSet getCrossReference(String primaryCatalog, @@ -1123,7 +1126,7 @@ public boolean isWrapperFor(Class iface) throws SQLException { } public static void main(String[] args) throws SQLException { - HiveDatabaseMetaData meta = new HiveDatabaseMetaData(null, null); + HiveDatabaseMetaData meta = new HiveDatabaseMetaData(null, null, null); System.out.println("DriverName: " + meta.getDriverName()); System.out.println("DriverVersion: " + meta.getDriverVersion()); } diff --git jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java index 8fb23cc..3116100 100644 --- jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java +++ jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java @@ -55,9 +55,9 @@ */ private final HashMap parameters=new HashMap(); - public HivePreparedStatement(TCLIService.Iface client, TSessionHandle sessHandle, - String sql) { - super(client, sessHandle); + public HivePreparedStatement(HiveConnection connection, TCLIService.Iface client, + TSessionHandle sessHandle, String sql) { + super(connection, client, sessHandle); this.sql = sql; } diff --git jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java index 131a522..f4c8716 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java @@ -21,6 +21,7 @@ import static org.apache.hive.service.cli.thrift.TCLIServiceConstants.TYPE_NAMES; import java.sql.ResultSetMetaData; +import java.sql.Statement; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; @@ -53,6 +54,7 @@ public static final Log LOG = LogFactory.getLog(HiveQueryResultSet.class); + private final Statement statement; private TCLIService.Iface client; private TOperationHandle stmtHandle; private HiveStatement hiveStatement; @@ -68,6 +70,7 @@ public static class Builder { + private final Statement statement; private TCLIService.Iface client = null; private TOperationHandle stmtHandle = null; private TSessionHandle sessHandle = null; @@ -86,6 +89,14 @@ private int fetchSize = 50; private boolean emptyResultSet = false; + public Builder() { + this(null); + } + + public Builder(Statement statement) { + this.statement = statement; + } + public Builder setClient(TCLIService.Iface client) { this.client = client; return this; @@ -149,6 +160,7 @@ public HiveQueryResultSet build() throws SQLException { } protected HiveQueryResultSet(Builder builder) throws SQLException { + this.statement = builder.statement; this.client = builder.client; this.stmtHandle = builder.stmtHandle; this.sessHandle = builder.sessHandle; diff --git jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java index 2912ece..ef088c5 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java @@ -42,6 +42,7 @@ * */ public class HiveStatement implements java.sql.Statement { + private final HiveConnection connection; private TCLIService.Iface client; private TOperationHandle stmtHandle = null; private final TSessionHandle sessHandle; @@ -76,7 +77,9 @@ /** * */ - public HiveStatement(TCLIService.Iface client, TSessionHandle sessHandle) { + public HiveStatement(HiveConnection connection, TCLIService.Iface client, + TSessionHandle sessHandle) { + this.connection = connection; this.client = client; this.sessHandle = sessHandle; } @@ -244,7 +247,7 @@ public boolean execute(String sql) throws SQLException { } return false; } - resultSet = new HiveQueryResultSet.Builder().setClient(client).setSessionHandle(sessHandle) + resultSet = new HiveQueryResultSet.Builder(this).setClient(client).setSessionHandle(sessHandle) .setStmtHandle(stmtHandle).setHiveStatement(this).setMaxRows(maxRows).setFetchSize(fetchSize) .build(); return true; @@ -351,7 +354,7 @@ public int executeUpdate(String sql, String[] columnNames) throws SQLException { */ public Connection getConnection() throws SQLException { - throw new SQLException("Method not supported"); + return this.connection; } /*