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:
java.lang.AutoCloseable,java.sql.ResultSet,java.sql.Wrapper,Completion,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 bufferThe 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 Modifier and Type Field Description private intdataFetchTimeprivate ClosableLocklockprivate static intMAX_FETCH_SIZEprivate intrequestedFetchSize-
Fields inherited from class org.mariadb.jdbc.client.result.Result
closed, context, data, dataSize, exceptionFactory, fieldIndex, loaded, maxRows, metadataList, NULL_LENGTH, outputParameter, reader, resultSetType, rowBuf, rowDecoder, rowPointer, statement, traceEnable
-
-
Constructor Summary
Constructors Constructor Description StreamingResult(Statement stmt, boolean binaryProtocol, long maxRows, ColumnDecoder[] metadataList, Reader reader, Context context, int fetchSize, ClosableLock lock, int resultSetType, boolean closeOnCompletion, boolean traceEnable)Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanabsolute(int idx)private voidaddStreamingValue()voidafterLast()voidbeforeFirst()voidfetchRemaining()When protocol has a current Streaming result (this) fetch all to permit another query is executing.booleanfirst()intgetFetchSize()intgetRow()booleanisAfterLast()booleanisBulkResult()Indicate if result-set is a bulk unitary resultbooleanisFirst()booleanisLast()booleanlast()booleannext()Position resultset to next rowprivate voidnextStreamingValue()This permit to replace current stream results by next ones.booleanprevious()booleanrelative(int rows)voidsetBulkResult()Indicate that result is a bulk resultvoidsetFetchSize(int fetchSize)booleanstreaming()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, closeOnCompletion, 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, setNullRowBuf, setRow, 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, wasNull
-
-
-
-
Field Detail
-
MAX_FETCH_SIZE
private static final int MAX_FETCH_SIZE
- See Also:
- Constant Field Values
-
lock
private final ClosableLock lock
-
dataFetchTime
private int dataFetchTime
-
requestedFetchSize
private int requestedFetchSize
-
-
Constructor Detail
-
StreamingResult
public StreamingResult(Statement stmt, boolean binaryProtocol, long maxRows, ColumnDecoder[] metadataList, Reader reader, Context context, int fetchSize, ClosableLock lock, int resultSetType, boolean closeOnCompletion, boolean traceEnable) throws java.sql.SQLException
Constructor- Parameters:
stmt- statement that initiate this resultbinaryProtocol- is result-set binary encodedmaxRows- maximum row numbermetadataList- column metadatareader- packet readercontext- connection contextfetchSize- fetch sizelock- thread safe lockerresultSetType- result-set typecloseOnCompletion- close statement on completiontraceEnable- can network log be logged- Throws:
java.sql.SQLException- if any error occurs
-
-
Method Detail
-
streaming
public boolean streaming()
Description copied from class:ResultIndicate of current result-set is a streaming result-set
-
isBulkResult
public boolean isBulkResult()
Description copied from class:ResultIndicate if result-set is a bulk unitary result- Specified by:
isBulkResultin classResult- Returns:
- true if unitary result-set
-
setBulkResult
public void setBulkResult()
Description copied from class:ResultIndicate that result is a bulk result- Specified by:
setBulkResultin classResult
-
nextStreamingValue
private void nextStreamingValue() throws java.sql.SQLExceptionThis permit to replace current stream results by next ones.- Throws:
java.sql.SQLException- if server return an unexpected error
-
addStreamingValue
private void addStreamingValue() throws java.sql.SQLException- Throws:
java.sql.SQLException
-
fetchRemaining
public void fetchRemaining() throws java.sql.SQLExceptionWhen protocol has a current Streaming result (this) fetch all to permit another query is executing.- Specified by:
fetchRemainingin classResult- Throws:
java.sql.SQLException- if any error occur
-
next
public boolean next() throws java.sql.SQLExceptionDescription copied from class:ResultPosition resultset to next row
-
isAfterLast
public boolean isAfterLast() throws java.sql.SQLException- Specified by:
isAfterLastin interfacejava.sql.ResultSet- Specified by:
isAfterLastin classResult- Throws:
java.sql.SQLException
-
isFirst
public boolean isFirst() throws java.sql.SQLException
-
isLast
public boolean isLast() throws java.sql.SQLException
-
beforeFirst
public void beforeFirst() throws java.sql.SQLException- Specified by:
beforeFirstin interfacejava.sql.ResultSet- Specified by:
beforeFirstin classResult- Throws:
java.sql.SQLException
-
afterLast
public void afterLast() throws java.sql.SQLException
-
first
public boolean first() throws java.sql.SQLException
-
last
public boolean last() throws java.sql.SQLException
-
getRow
public int getRow() throws java.sql.SQLException
-
absolute
public boolean absolute(int idx) throws java.sql.SQLException
-
relative
public boolean relative(int rows) throws java.sql.SQLException
-
previous
public boolean previous() throws java.sql.SQLException
-
getFetchSize
public int getFetchSize() throws java.sql.SQLException- Specified by:
getFetchSizein interfacejava.sql.ResultSet- Overrides:
getFetchSizein classResult- Throws:
java.sql.SQLException
-
setFetchSize
public void setFetchSize(int fetchSize) throws java.sql.SQLException- Specified by:
setFetchSizein interfacejava.sql.ResultSet- Overrides:
setFetchSizein classResult- Throws:
java.sql.SQLException
-
-