commit 02d2972f46099f411b31c587be1c8982cb5bbb91 Author: Alan Gates Date: Mon Dec 14 11:21:49 2015 -0800 HIVE-10982 Customizable the value of java.sql.statement.setFetchSize in Hive JDBC Driver (Bing Li via Alan Gates) diff --git itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index 8cb9689..e9206b9 100644 --- itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -307,6 +307,14 @@ public void testBadURL() throws Exception { checkBadUrl("jdbc:hive2://localhost:10000test"); } + @Test + public void testURLWithFetchSize() throws SQLException { + Connection con = getConnection("default;fetchSize=1234"); + Statement stmt = con.createStatement(); + + assertEquals(stmt.getFetchSize(), 1234); + } + private void checkBadUrl(String url) throws SQLException { try{ DriverManager.getConnection(url, "", ""); diff --git jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index c312ece..3c5dc0c 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -122,6 +122,7 @@ private final List supportedProtocols = new LinkedList(); private int loginTimeout = 0; private TProtocolVersion protocol; + private int fetchSize = HiveStatement.DEFAULT_FETCH_SIZE; public HiveConnection(String uri, Properties info) throws SQLException { setupLoginTimeout(); @@ -143,6 +144,10 @@ public HiveConnection(String uri, Properties info) throws SQLException { hiveVarMap = connParams.getHiveVars(); isEmbeddedMode = connParams.isEmbeddedMode(); + if (sessConfMap.containsKey(JdbcConnectionParams.FETCH_SIZE)) { + fetchSize = Integer.parseInt(sessConfMap.get(JdbcConnectionParams.FETCH_SIZE)); + } + if (isEmbeddedMode) { EmbeddedThriftBinaryCLIService embeddedClient = new EmbeddedThriftBinaryCLIService(); embeddedClient.init(null); @@ -821,7 +826,7 @@ public Statement createStatement() throws SQLException { if (isClosed) { throw new SQLException("Can't create Statement, connection is closed"); } - return new HiveStatement(this, client, sessHandle); + return new HiveStatement(this, client, sessHandle, fetchSize); } /* @@ -842,7 +847,7 @@ public Statement createStatement(int resultSetType, int resultSetConcurrency) " is not supported", "HYC00"); // Optional feature not implemented } return new HiveStatement(this, client, sessHandle, - resultSetType == ResultSet.TYPE_SCROLL_INSENSITIVE); + resultSetType == ResultSet.TYPE_SCROLL_INSENSITIVE, fetchSize); } /* diff --git jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java index 180f99e8..3f9024a 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java @@ -18,16 +18,6 @@ package org.apache.hive.jdbc; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.SQLFeatureNotSupportedException; -import java.sql.SQLWarning; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.hive.service.cli.RowSet; import org.apache.hive.service.cli.RowSetFactory; import org.apache.hive.service.cli.thrift.TCLIService; @@ -37,23 +27,33 @@ import org.apache.hive.service.cli.thrift.TCloseOperationResp; import org.apache.hive.service.cli.thrift.TExecuteStatementReq; import org.apache.hive.service.cli.thrift.TExecuteStatementResp; +import org.apache.hive.service.cli.thrift.TFetchOrientation; +import org.apache.hive.service.cli.thrift.TFetchResultsReq; +import org.apache.hive.service.cli.thrift.TFetchResultsResp; import org.apache.hive.service.cli.thrift.TGetOperationStatusReq; import org.apache.hive.service.cli.thrift.TGetOperationStatusResp; import org.apache.hive.service.cli.thrift.TOperationHandle; import org.apache.hive.service.cli.thrift.TSessionHandle; -import org.apache.hive.service.cli.thrift.TFetchResultsReq; -import org.apache.hive.service.cli.thrift.TFetchResultsResp; -import org.apache.hive.service.cli.thrift.TFetchOrientation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.sql.SQLWarning; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * HiveStatement. * */ public class HiveStatement implements java.sql.Statement { public static final Logger LOG = LoggerFactory.getLogger(HiveStatement.class.getName()); - private static final int DEFAULT_FETCH_SIZE = 1000; + public static final int DEFAULT_FETCH_SIZE = 1000; private final HiveConnection connection; private TCLIService.Iface client; private TOperationHandle stmtHandle = null; @@ -110,15 +110,26 @@ public HiveStatement(HiveConnection connection, TCLIService.Iface client, TSessionHandle sessHandle) { - this(connection, client, sessHandle, false); + this(connection, client, sessHandle, false, DEFAULT_FETCH_SIZE); + } + + public HiveStatement(HiveConnection connection, TCLIService.Iface client, + TSessionHandle sessHandle, int fetchSize) { + this(connection, client, sessHandle, false, fetchSize); + } + + public HiveStatement(HiveConnection connection, TCLIService.Iface client, + TSessionHandle sessHandle, boolean isScrollableResultset) { + this(connection, client, sessHandle, isScrollableResultset, DEFAULT_FETCH_SIZE); } public HiveStatement(HiveConnection connection, TCLIService.Iface client, - TSessionHandle sessHandle, boolean isScrollableResultset) { + TSessionHandle sessHandle, boolean isScrollableResultset, int fetchSize) { this.connection = connection; this.client = client; this.sessHandle = sessHandle; this.isScrollableResultset = isScrollableResultset; + this.fetchSize = fetchSize; } /* diff --git jdbc/src/java/org/apache/hive/jdbc/Utils.java jdbc/src/java/org/apache/hive/jdbc/Utils.java index d3f8878..c9fbe1f 100644 --- jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -112,6 +112,8 @@ static final String DEFAULT_COOKIE_NAMES_HS2 = "hive.server2.auth"; // The http header prefix for additional headers which have to be appended to the request static final String HTTP_HEADER_PREFIX = "http.header."; + // Set the fetchSize + static final String FETCH_SIZE = "fetchSize"; // --------------- Begin 2 way ssl options ------------------------- // Use two way ssl. This param will take effect only when ssl=true