You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by br...@apache.org on 2013/10/27 16:36:38 UTC
svn commit: r1536153 - in /hive/trunk/jdbc/src: java/org/apache/hive/jdbc/
test/org/apache/hive/jdbc/
Author: brock
Date: Sun Oct 27 15:36:37 2013
New Revision: 1536153
URL: http://svn.apache.org/r1536153
Log:
HIVE-4974 - JDBC2 statements and result sets are not able to return their parents (Chris Dome via Brock Noland)
Modified:
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java
hive/trunk/jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java Sun Oct 27 15:36:37 2013
@@ -59,6 +59,7 @@ import org.apache.hive.service.cli.thrif
* 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 abstract class HiveBaseResultSet
}
public Statement getStatement() throws SQLException {
- throw new SQLException("Method not supported");
+ return this.statement;
}
/**
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveCallableStatement.java Sun Oct 27 15:36:37 2013
@@ -46,12 +46,13 @@ import java.util.Map;
*
*/
public class HiveCallableStatement implements java.sql.CallableStatement {
+ private final Connection connection;
/**
*
*/
- public HiveCallableStatement() {
- // TODO Auto-generated constructor stub
+ public HiveCallableStatement(Connection connection) {
+ this.connection = connection;
}
/*
@@ -1387,7 +1388,7 @@ public class HiveCallableStatement imple
*/
public ResultSet executeQuery() throws SQLException {
- return new HiveQueryResultSet.Builder().build();
+ return new HiveQueryResultSet.Builder(this).build();
}
/*
@@ -2169,8 +2170,7 @@ public class HiveCallableStatement imple
*/
public Connection getConnection() throws SQLException {
- // TODO Auto-generated method stub
- throw new SQLException("Method not supported");
+ return this.connection;
}
/*
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java Sun Oct 27 15:36:37 2013
@@ -415,7 +415,7 @@ public class HiveConnection implements j
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 class HiveConnection implements j
*/
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 class HiveConnection implements j
*/
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 class HiveConnection implements j
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 class HiveConnection implements j
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency) throws SQLException {
- return new HivePreparedStatement(client, sessHandle, sql);
+ return new HivePreparedStatement(this, client, sessHandle, sql);
}
/*
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java Sun Oct 27 15:36:37 2013
@@ -55,6 +55,7 @@ import org.apache.thrift.TException;
*/
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 class HiveDatabaseMetaData implem
/**
*
*/
- 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;
}
@@ -128,7 +131,7 @@ public class HiveDatabaseMetaData implem
}
Utils.verifySuccess(catalogResp.getStatus());
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(catalogResp.getOperationHandle())
@@ -212,7 +215,7 @@ public class HiveDatabaseMetaData implem
}
Utils.verifySuccess(colResp.getStatus());
// build the resultset from response
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(colResp.getOperationHandle())
@@ -241,7 +244,7 @@ public class HiveDatabaseMetaData implem
}
public Connection getConnection() throws SQLException {
- throw new SQLException("Method not supported");
+ return this.connection;
}
public ResultSet getCrossReference(String primaryCatalog,
@@ -327,7 +330,7 @@ public class HiveDatabaseMetaData implem
}
Utils.verifySuccess(funcResp.getStatus());
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(funcResp.getOperationHandle())
@@ -340,7 +343,7 @@ public class HiveDatabaseMetaData implem
public ResultSet getImportedKeys(String catalog, String schema, String table)
throws SQLException {
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setEmptyResultSet(true)
.setSchema(
@@ -482,7 +485,7 @@ public class HiveDatabaseMetaData implem
throws SQLException {
// Hive doesn't support primary keys
// using local schema with empty resultset
- return new HiveQueryResultSet.Builder().setClient(client).setEmptyResultSet(true).
+ return new HiveQueryResultSet.Builder(null).setClient(client).setEmptyResultSet(true).
setSchema(Arrays.asList("TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "KEY_SEQ", "PK_NAME" ),
Arrays.asList("STRING", "STRING", "STRING", "STRING", "INT", "STRING"))
.build();
@@ -493,7 +496,7 @@ public class HiveDatabaseMetaData implem
throws SQLException {
// Hive doesn't support primary keys
// using local schema with empty resultset
- return new HiveQueryResultSet.Builder().setClient(client).setEmptyResultSet(true).
+ return new HiveQueryResultSet.Builder(null).setClient(client).setEmptyResultSet(true).
setSchema(
Arrays.asList("PROCEDURE_CAT", "PROCEDURE_SCHEM", "PROCEDURE_NAME", "COLUMN_NAME", "COLUMN_TYPE",
"DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH", "SCALE", "RADIX", "NULLABLE", "REMARKS",
@@ -514,7 +517,7 @@ public class HiveDatabaseMetaData implem
String procedureNamePattern) throws SQLException {
// Hive doesn't support primary keys
// using local schema with empty resultset
- return new HiveQueryResultSet.Builder().setClient(client).setEmptyResultSet(true).
+ return new HiveQueryResultSet.Builder(null).setClient(client).setEmptyResultSet(true).
setSchema(
Arrays.asList("PROCEDURE_CAT", "PROCEDURE_SCHEM", "PROCEDURE_NAME", "RESERVERD", "RESERVERD",
"RESERVERD", "REMARKS", "PROCEDURE_TYPE", "SPECIFIC_NAME"),
@@ -568,7 +571,7 @@ public class HiveDatabaseMetaData implem
}
Utils.verifySuccess(schemaResp.getStatus());
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(schemaResp.getOperationHandle())
@@ -612,7 +615,7 @@ public class HiveDatabaseMetaData implem
}
Utils.verifySuccess(tableTypeResp.getStatus());
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(tableTypeResp.getOperationHandle())
@@ -645,7 +648,7 @@ public class HiveDatabaseMetaData implem
}
Utils.verifySuccess(getTableResp.getStatus());
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(getTableResp.getOperationHandle())
@@ -701,7 +704,7 @@ public class HiveDatabaseMetaData implem
throw new SQLException(e.getMessage(), "08S01", e);
}
Utils.verifySuccess(getTypeInfoResp.getStatus());
- return new HiveQueryResultSet.Builder()
+ return new HiveQueryResultSet.Builder(null)
.setClient(client)
.setSessionHandle(sessHandle)
.setStmtHandle(getTypeInfoResp.getOperationHandle())
@@ -1123,7 +1126,7 @@ public class HiveDatabaseMetaData implem
}
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());
}
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java Sun Oct 27 15:36:37 2013
@@ -55,9 +55,9 @@ public class HivePreparedStatement exten
*/
private final HashMap<Integer, String> parameters=new HashMap<Integer, String>();
- 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;
}
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java Sun Oct 27 15:36:37 2013
@@ -21,6 +21,7 @@ package org.apache.hive.jdbc;
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;
@@ -55,7 +56,6 @@ public class HiveQueryResultSet extends
private TCLIService.Iface client;
private TOperationHandle stmtHandle;
- private HiveStatement hiveStatement;
private TSessionHandle sessHandle;
private int maxRows;
private int fetchSize;
@@ -68,10 +68,10 @@ public class HiveQueryResultSet extends
public static class Builder {
+ private final Statement statement;
private TCLIService.Iface client = null;
private TOperationHandle stmtHandle = null;
private TSessionHandle sessHandle = null;
- private HiveStatement hiveStatement = null;
/**
* Sets the limit for the maximum number of rows that any ResultSet object produced by this
@@ -86,6 +86,10 @@ public class HiveQueryResultSet extends
private int fetchSize = 50;
private boolean emptyResultSet = false;
+ public Builder(Statement statement) {
+ this.statement = statement;
+ }
+
public Builder setClient(TCLIService.Iface client) {
this.client = client;
return this;
@@ -101,11 +105,6 @@ public class HiveQueryResultSet extends
return this;
}
- public Builder setHiveStatement(HiveStatement hiveStatement) {
- this.hiveStatement = hiveStatement;
- return this;
- }
-
public Builder setMaxRows(int maxRows) {
this.maxRows = maxRows;
return this;
@@ -149,11 +148,11 @@ public class HiveQueryResultSet extends
}
protected HiveQueryResultSet(Builder builder) throws SQLException {
+ this.statement = builder.statement;
this.client = builder.client;
this.stmtHandle = builder.stmtHandle;
this.sessHandle = builder.sessHandle;
this.fetchSize = builder.fetchSize;
- this.hiveStatement = builder.hiveStatement;
columnNames = new ArrayList<String>();
columnTypes = new ArrayList<String>();
columnAttributes = new ArrayList<JdbcColumnAttributes>();
@@ -252,13 +251,13 @@ public class HiveQueryResultSet extends
@Override
public void close() throws SQLException {
- if (hiveStatement != null) {
- hiveStatement.closeClientOperation();
+ if (this.statement != null && (this.statement instanceof HiveStatement)) {
+ HiveStatement s = (HiveStatement) this.statement;
+ s.closeClientOperation();
}
// Need reset during re-open when needed
client = null;
stmtHandle = null;
- hiveStatement = null;
sessHandle = null;
isClosed = true;
}
Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java Sun Oct 27 15:36:37 2013
@@ -42,6 +42,7 @@ import org.apache.hive.service.cli.thrif
*
*/
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 class HiveStatement implements ja
/**
*
*/
- 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,8 +247,8 @@ public class HiveStatement implements ja
}
return false;
}
- resultSet = new HiveQueryResultSet.Builder().setClient(client).setSessionHandle(sessHandle)
- .setStmtHandle(stmtHandle).setHiveStatement(this).setMaxRows(maxRows).setFetchSize(fetchSize)
+ resultSet = new HiveQueryResultSet.Builder(this).setClient(client).setSessionHandle(sessHandle)
+ .setStmtHandle(stmtHandle).setMaxRows(maxRows).setFetchSize(fetchSize)
.build();
return true;
}
@@ -351,7 +354,7 @@ public class HiveStatement implements ja
*/
public Connection getConnection() throws SQLException {
- throw new SQLException("Method not supported");
+ return this.connection;
}
/*
Modified: hive/trunk/jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java?rev=1536153&r1=1536152&r2=1536153&view=diff
==============================================================================
--- hive/trunk/jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java (original)
+++ hive/trunk/jdbc/src/test/org/apache/hive/jdbc/TestJdbcDriver2.java Sun Oct 27 15:36:37 2013
@@ -262,6 +262,78 @@ public class TestJdbcDriver2 {
}
@Test
+ public void testParentReferences() throws Exception {
+ /* Test parent references from Statement */
+ Statement s = this.con.createStatement();
+ ResultSet rs = s.executeQuery("SELECT * FROM " + dataTypeTableName);
+
+ rs.close();
+ s.close();
+
+ assertTrue(s.getConnection() == this.con);
+ assertTrue(rs.getStatement() == s);
+
+ /* Test parent references from PreparedStatement */
+ PreparedStatement ps = this.con.prepareStatement("SELECT * FROM " + dataTypeTableName);
+ rs = ps.executeQuery();
+
+ rs.close();
+ ps.close();
+
+ assertTrue(ps.getConnection() == this.con);
+ assertTrue(rs.getStatement() == ps);
+
+ /* Test DatabaseMetaData queries which do not have a parent Statement */
+ DatabaseMetaData md = this.con.getMetaData();
+
+ assertTrue(md.getConnection() == this.con);
+
+ rs = md.getCatalogs();
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getColumns(null, null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getFunctions(null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getImportedKeys(null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getPrimaryKeys(null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getProcedureColumns(null, null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getProcedures(null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getSchemas();
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getTableTypes();
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getTables(null, null, null, null);
+ assertNull(rs.getStatement());
+ rs.close();
+
+ rs = md.getTypeInfo();
+ assertNull(rs.getStatement());
+ rs.close();
+ }
+
+ @Test
public void testDataTypes2() throws Exception {
Statement stmt = con.createStatement();