Package org.mariadb.jdbc.client.result

## Class StreamingResult

- java.lang.Object
- - org.mariadb.jdbc.client.result.Result
  - - org.mariadb.jdbc.client.result.StreamingResult

All Implemented Interfaces:
  `AutoCloseable`, `ResultSet`, `Wrapper`, `org.mariadb.jdbc.client.Completion`, `org.mariadb.jdbc.message.ServerMessage`

    public class StreamingResult
    extends Result

Streaming result-set implementation. Implementation rely on reading as many rows than fetch size required, keeping remaining rows in TCP-IP buffer

The server usually expects clients to read off the result set relatively quickly. The net_write_timeout server variable controls this behavior (defaults to 60s).

If you don't expect results to be handled in this amount of time there is a different possibility:

- With >= MariaDB server, you can use the query "SET STATEMENT net_write_timeout=10000 FOR XXX" with XXX your "normal" query. This will indicate that specifically for this query, net_write_timeout will be set to a longer time (10000 in this example).
- for non mariadb servers, a specific query will have to temporarily set net_write_timeout ("SET STATEMENT net_write_timeout=..."), and set it back afterward.
- if your application usually uses a lot of long queries with fetch size, the connection can be set using option "sessionVariables=net_write_timeout=xxx"

Even using setFetchSize, the server will send all results to the client.

If another query is executed on the same connection when a streaming result-set has not been fully read, the connector will put the whole remaining streaming result-set in memory in order to execute the next query. This can lead to OutOfMemoryError if not handled.

### Field Summary

### Fields inherited from class org.mariadb.jdbc.client.result.Result

`closed, context, data, dataSize, exceptionFactory, loaded, maxRows, metadataList, outputParameter, reader, resultSetType, row, rowPointer, statement`

### Fields inherited from interface java.sql.ResultSet

`CLOSE_CURSORS_AT_COMMIT, CONCUR_READ_ONLY, CONCUR_UPDATABLE, FETCH_FORWARD, FETCH_REVERSE, FETCH_UNKNOWN, HOLD_CURSORS_OVER_COMMIT, TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE`

### Constructor Summary

Constructors
`StreamingResult​(Statement stmt, boolean binaryProtocol, long maxRows, org.mariadb.jdbc.client.Column[] metadataList, Reader reader, org.mariadb.jdbc.client.Context context, int fetchSize, ReentrantLock lock, int resultSetType, boolean closeOnCompletion, boolean traceEnable)` Constructor

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `absolute​(int idx)`
`void` `afterLast()`
`void` `beforeFirst()`
`void` `fetchRemaining()` When protocol has a current Streaming result (this) fetch all to permit another query is executing.
`boolean` `first()`
`int` `getFetchSize()`
`int` `getRow()`
`boolean` `isAfterLast()`
`boolean` `isFirst()`
`boolean` `isLast()`
`boolean` `last()`
`boolean` `next()` Position resultset to next row
`boolean` `previous()`
`boolean` `relative​(int rows)`
`void` `setFetchSize​(int fetchSize)`
`boolean` `streaming()` Indicate of current result-set is a streaming result-set

### Methods inherited from class org.mariadb.jdbc.client.result.Result

`abort, addRowData, cancelRowUpdates, checkClose, checkNotForwardOnly, clearWarnings, close, closeFromStmtClose, deleteRow, findColumn, getArray, getArray, getAsciiStream, getAsciiStream, getBigDecimal, getBigDecimal, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBinaryStream, getBinaryStream, getBlob, getBlob, getBoolean, getBoolean, getByte, getByte, getBytes, getBytes, getCharacterStream, getCharacterStream, getClob, getClob, getConcurrency, getCurrentRowData, getCursorName, getDate, getDate, getDate, getDate, getDouble, getDouble, getFetchDirection, getFloat, getFloat, getHoldability, getInt, getInt, getLong, getLong, getMetaData, getNCharacterStream, getNCharacterStream, getNClob, getNClob, getNString, getNString, getObject, getObject, getObject, getObject, getObject, getObject, getRef, getRef, getRowId, getRowId, getShort, getShort, getSQLXML, getSQLXML, getStatement, getString, getString, getTime, getTime, getTime, getTime, getTimestamp, getTimestamp, getTimestamp, getTimestamp, getType, getUnicodeStream, getUnicodeStream, getURL, getURL, getWarnings, insertRow, isBeforeFirst, isClosed, isOutputParameter, isWrapperFor, loaded, moveToCurrentRow, moveToInsertRow, readNext, refreshRow, rowDeleted, rowInserted, rowUpdated, setFetchDirection, setStatement, skipRemaining, unwrap, updateArray, updateArray, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateBigDecimal, updateBigDecimal, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBoolean, updateBoolean, updateByte, updateByte, updateBytes, updateBytes, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateClob, updateClob, updateClob, updateClob, updateClob, updateClob, updateDate, updateDate, updateDouble, updateDouble, updateFloat, updateFloat, updateInt, updateInt, updateLong, updateLong, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNString, updateNString, updateNull, updateNull, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateRef, updateRef, updateRow, updateRowData, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, useAliasAsName, wasNull`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### StreamingResult

    public StreamingResult​(Statement stmt,
                           boolean binaryProtocol,
                           long maxRows,
                           org.mariadb.jdbc.client.Column[] metadataList,
                           Reader reader,
                           org.mariadb.jdbc.client.Context context,
                           int fetchSize,
                           ReentrantLock lock,
                           int resultSetType,
                           boolean closeOnCompletion,
                           boolean traceEnable)
                    throws SQLException

Constructor

Parameters:
  `stmt` - statement that initiate this result
  `binaryProtocol` - is result-set binary encoded
  `maxRows` - maximum row number
  `metadataList` - column metadata
  `reader` - packet reader
  `context` - connection context
  `fetchSize` - fetch size
  `lock` - thread safe locker
  `resultSetType` - result-set type
  `closeOnCompletion` - close statement on completion
  `traceEnable` - can network log be logged
Throws:
  `SQLException` - if any error occurs

### Method Detail

#### streaming

    public boolean streaming()

Description copied from class: `Result`
Indicate of current result-set is a streaming result-set

Specified by:
  `streaming` in class `Result`
Returns:
  if streaming result-set

#### fetchRemaining

    public void fetchRemaining()
                        throws SQLException

When protocol has a current Streaming result (this) fetch all to permit another query is executing.

Specified by:
  `fetchRemaining` in class `Result`
Throws:
  `SQLException` - if any error occur

#### next

    public boolean next()
                 throws SQLException

Description copied from class: `Result`
Position resultset to next row

Specified by:
  `next` in interface `ResultSet`
Specified by:
  `next` in class `Result`
Returns:
  true if next row exists
Throws:
  `SQLException` - if any error occurs

#### isAfterLast

    public boolean isAfterLast()
                        throws SQLException

Specified by:
  `isAfterLast` in interface `ResultSet`
Specified by:
  `isAfterLast` in class `Result`
Throws:
  `SQLException`

#### isFirst

    public boolean isFirst()
                    throws SQLException

Specified by:
  `isFirst` in interface `ResultSet`
Specified by:
  `isFirst` in class `Result`
Throws:
  `SQLException`

#### isLast

    public boolean isLast()
                   throws SQLException

Specified by:
  `isLast` in interface `ResultSet`
Specified by:
  `isLast` in class `Result`
Throws:
  `SQLException`

#### beforeFirst

    public void beforeFirst()
                     throws SQLException

Specified by:
  `beforeFirst` in interface `ResultSet`
Specified by:
  `beforeFirst` in class `Result`
Throws:
  `SQLException`

#### afterLast

    public void afterLast()
                   throws SQLException

Specified by:
  `afterLast` in interface `ResultSet`
Specified by:
  `afterLast` in class `Result`
Throws:
  `SQLException`

#### first

    public boolean first()
                  throws SQLException

Specified by:
  `first` in interface `ResultSet`
Specified by:
  `first` in class `Result`
Throws:
  `SQLException`

#### last

    public boolean last()
                 throws SQLException

Specified by:
  `last` in interface `ResultSet`
Specified by:
  `last` in class `Result`
Throws:
  `SQLException`

#### getRow

    public int getRow()
               throws SQLException

Specified by:
  `getRow` in interface `ResultSet`
Specified by:
  `getRow` in class `Result`
Throws:
  `SQLException`

#### absolute

    public boolean absolute​(int idx)
                     throws SQLException

Specified by:
  `absolute` in interface `ResultSet`
Specified by:
  `absolute` in class `Result`
Throws:
  `SQLException`

#### relative

    public boolean relative​(int rows)
                     throws SQLException

Specified by:
  `relative` in interface `ResultSet`
Specified by:
  `relative` in class `Result`
Throws:
  `SQLException`

#### previous

    public boolean previous()
                     throws SQLException

Specified by:
  `previous` in interface `ResultSet`
Specified by:
  `previous` in class `Result`
Throws:
  `SQLException`

#### getFetchSize

    public int getFetchSize()

#### setFetchSize

    public void setFetchSize​(int fetchSize)
                      throws SQLException

Throws:
  `SQLException`