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 3aa6bce..70016ca 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 @@ -265,6 +265,14 @@ public void testBadURL() throws Exception { "principal=hive/HiveServer2Host@YOUR-REALM.COM"); 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{ diff --git jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index ba971fd..e15c02f 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -125,6 +125,7 @@ private final List supportedProtocols = new LinkedList(); private int loginTimeout = 0; private TProtocolVersion protocol; + private int fetchSize = HiveStatement.fetchSize; public HiveConnection(String uri, Properties info) throws SQLException { setupLoginTimeout(); @@ -156,6 +157,10 @@ public HiveConnection(String uri, Properties info) throws SQLException { } } } + + if (sessConfMap.containsKey(JdbcConnectionParams.FETCH_SIZE)) { + fetchSize = Integer.parseInt(sessConfMap.get(JdbcConnectionParams.FETCH_SIZE)); + } isEmbeddedMode = connParams.isEmbeddedMode(); @@ -828,7 +833,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); } /* diff --git jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java index d4041bb..4a6733c 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java @@ -59,7 +59,7 @@ private TOperationHandle stmtHandle = null; private final TSessionHandle sessHandle; Map sessConf = new HashMap(); - private int fetchSize = 1000; + static int fetchSize = 1000; private boolean isScrollableResultset = false; /** * We need to keep a reference to the result set to support the following: @@ -115,10 +115,21 @@ public HiveStatement(HiveConnection connection, TCLIService.Iface client, public HiveStatement(HiveConnection connection, TCLIService.Iface client, TSessionHandle sessHandle, boolean isScrollableResultset) { + this(connection, client, sessHandle, isScrollableResultset, fetchSize); + } + + 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, int fetchSize) { this.connection = connection; this.client = client; this.sessHandle = sessHandle; this.isScrollableResultset = isScrollableResultset; + this.fetchSize = fetchSize; } /* @@ -303,6 +314,7 @@ public boolean execute(String sql) throws SQLException { if (!stmtHandle.isHasResultSet()) { return false; } + resultSet = new HiveQueryResultSet.Builder(this).setClient(client).setSessionHandle(sessHandle) .setStmtHandle(stmtHandle).setMaxRows(maxRows).setFetchSize(fetchSize) .setScrollable(isScrollableResultset) diff --git jdbc/src/java/org/apache/hive/jdbc/Utils.java jdbc/src/java/org/apache/hive/jdbc/Utils.java index d8368a4..6f05aff 100644 --- jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -111,6 +111,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