This is an automated email from the ASF dual-hosted git repository. zabetak pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/calcite-avatica.git
The following commit(s) were added to refs/heads/main by this push: new 5047b566d [CALCITE-2322] Support fetch size in connection url and JDBC statement 5047b566d is described below commit 5047b566d139fb9c4c691ccda3e5c18e15fc621f Author: Kevin Minder <kevin.min...@oracle.com> AuthorDate: Tue May 22 21:46:23 2018 -0400 [CALCITE-2322] Support fetch size in connection url and JDBC statement Co-authored-by: Zac Farrell <z...@modeanalytics.com> Close apache/calcite-avatica#49 Close apache/calcite-avatica#148 --- .../main/java/org/apache/calcite/avatica/AvaticaStatement.java | 3 ++- .../org/apache/calcite/avatica/BuiltInConnectionProperty.java | 5 ++++- .../main/java/org/apache/calcite/avatica/ConnectionConfig.java | 2 ++ .../java/org/apache/calcite/avatica/ConnectionConfigImpl.java | 4 ++++ core/src/main/java/org/apache/calcite/avatica/MetaImpl.java | 10 +++++++++- site/_docs/client_reference.md | 10 ++++++++++ 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/avatica/AvaticaStatement.java b/core/src/main/java/org/apache/calcite/avatica/AvaticaStatement.java index 2d3c75689..1eff01bad 100644 --- a/core/src/main/java/org/apache/calcite/avatica/AvaticaStatement.java +++ b/core/src/main/java/org/apache/calcite/avatica/AvaticaStatement.java @@ -66,7 +66,7 @@ public abstract class AvaticaStatement final int resultSetType; final int resultSetConcurrency; final int resultSetHoldability; - private int fetchSize = DEFAULT_FETCH_SIZE; + private int fetchSize; private int fetchDirection; protected long maxRowCount = 0; @@ -108,6 +108,7 @@ public abstract class AvaticaStatement this.resultSetType = resultSetType; this.resultSetConcurrency = resultSetConcurrency; this.resultSetHoldability = resultSetHoldability; + this.fetchSize = connection.config().fetchSize(); // Default to connection config value this.signature = signature; this.closed = false; if (h == null) { diff --git a/core/src/main/java/org/apache/calcite/avatica/BuiltInConnectionProperty.java b/core/src/main/java/org/apache/calcite/avatica/BuiltInConnectionProperty.java index 0313e4cc5..62c570298 100644 --- a/core/src/main/java/org/apache/calcite/avatica/BuiltInConnectionProperty.java +++ b/core/src/main/java/org/apache/calcite/avatica/BuiltInConnectionProperty.java @@ -88,7 +88,10 @@ public enum BuiltInConnectionProperty implements ConnectionProperty { HOSTNAME_VERIFICATION("hostname_verification", Type.ENUM, HostnameVerification.STRICT, HostnameVerification.class, false), - TRANSPARENT_RECONNECTION("transparent_reconnection", Type.BOOLEAN, Boolean.FALSE, false); + TRANSPARENT_RECONNECTION("transparent_reconnection", Type.BOOLEAN, Boolean.FALSE, false), + + /** Number of rows to fetch per call. */ + FETCH_SIZE("fetch_size", Type.NUMBER, AvaticaStatement.DEFAULT_FETCH_SIZE, false); private final String camelName; private final Type type; diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfig.java b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfig.java index 30d0c574e..bc06f8af5 100644 --- a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfig.java +++ b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfig.java @@ -64,6 +64,8 @@ public interface ConnectionConfig { HostnameVerification hostnameVerification(); /** @see BuiltInConnectionProperty#TRANSPARENT_RECONNECTION */ boolean transparentReconnectionEnabled(); + /** @see BuiltInConnectionProperty#FETCH_SIZE */ + int fetchSize(); } // End ConnectionConfig.java diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java index 7a2cbe411..0bb367732 100644 --- a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java +++ b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java @@ -133,6 +133,10 @@ public class ConnectionConfigImpl implements ConnectionConfig { .getBoolean(); } + public int fetchSize() { + return BuiltInConnectionProperty.FETCH_SIZE.wrap(properties).getInt(); + } + /** Converts a {@link Properties} object containing (name, value) * pairs into a map whose keys are * {@link org.apache.calcite.avatica.InternalProperty} objects. diff --git a/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java b/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java index 1b3b20ec5..c41f8edfc 100644 --- a/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java +++ b/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java @@ -1543,6 +1543,7 @@ public abstract class MetaImpl implements Meta { private class FetchIterator implements Iterator<Object> { private final AvaticaStatement stmt; private final QueryState state; + private final int fetchSize; private Frame frame; private Iterator<Object> rows; private long currentOffset = 0; @@ -1550,6 +1551,13 @@ public abstract class MetaImpl implements Meta { private FetchIterator(AvaticaStatement stmt, QueryState state, Frame firstFrame) { this.stmt = stmt; this.state = state; + int fetchRowCount; + try { + fetchRowCount = stmt.getFetchSize(); + } catch (SQLException e) { + fetchRowCount = AvaticaStatement.DEFAULT_FETCH_SIZE; + } + this.fetchSize = fetchRowCount; if (firstFrame == null) { frame = Frame.MORE; rows = EmptyIterator.INSTANCE; @@ -1589,7 +1597,7 @@ public abstract class MetaImpl implements Meta { } try { // currentOffset updated after element is read from `rows` iterator - frame = fetch(stmt.handle, currentOffset, AvaticaStatement.DEFAULT_FETCH_SIZE); + frame = fetch(stmt.handle, currentOffset, fetchSize); } catch (NoSuchStatementException e) { resetStatement(); // re-fetch the batch where we left off diff --git a/site/_docs/client_reference.md b/site/_docs/client_reference.md index f49372ab5..060612e62 100644 --- a/site/_docs/client_reference.md +++ b/site/_docs/client_reference.md @@ -172,3 +172,13 @@ on-hover images for the permalink, but oh well. : _Default_: `null`. : _Required_: Only if `truststore` was provided. + +<strong><a name="fetch_size" href="#fetch_size">fetch_size</a></strong> + +: _Description_: The number of rows to fetch. If + <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#setFetchSize-int-"> + Statement:setFetchSize</a> is set, that value overrides fetch_size. + +: _Default_: `100`. + +: _Required_: No.