com.amazon.redshift.core

## Interface ResultHandler

All Known Implementing Classes:
  BatchResultHandler, RedshiftResultSet.CursorResultHandler, RedshiftStatementImpl.StatementResultHandler, ResultHandlerBase, ResultHandlerDelegate

    public interface ResultHandler

Callback interface for passing query results from the protocol-specific layer to the protocol-independent JDBC implementation code.

In general, a single query execution will consist of a number of calls to handleResultRows, handleCommandStatus, handleWarning, and handleError, followed by a single call to handleCompletion when query execution is complete. If the caller wants to throw SQLException, this can be done in handleCompletion.

Each executed query ends with a call to handleResultRows, handleCommandStatus, or handleError. If an error occurs, subsequent queries won't generate callbacks.

Author:
  Oliver Jowett (oliver@opencloud.com)

### Method Summary

Methods
`SQLException` `getException()` Returns the first encountered exception.
`SQLWarning` `getWarning()` Returns the first encountered warning.
`void` `handleCommandStatus(String status, long updateCount, long insertOID)` Called when a query that did not return a resultset completes.
`void` `handleCompletion()` Called before a QueryExecutor method returns.
`void` `handleError(SQLException error)` Called when an error occurs.
`void` `handleResultRows(Query fromQuery, Field[] fields, List<Tuple> tuples, ResultCursor cursor, RedshiftRowsBlockingQueue<Tuple> queueTuples, int[] rowCount, Thread ringBufferThread)` Called when result rows are received from a query.
`void` `handleWarning(SQLWarning warning)` Called when a warning is emitted.
`void` `secureProgress()` Callback for batch statements.
`void` `setStatementStateIdleFromInQuery()` Set statement state on completion of the Ring buffer thread.
`void` `setStatementStateInQueryFromIdle()` Set statement state on start from IDLE to IN_QUERY, in case Ring Buffer thread reset the new query state as IDLE.
`boolean` `wantsScrollableResultSet()` Check the statement type

### Method Detail

#### handleResultRows

    void handleResultRows(Query fromQuery,
                        Field[] fields,
                        List<Tuple> tuples,
                        ResultCursor cursor,
                        RedshiftRowsBlockingQueue<Tuple> queueTuples,
                        int[] rowCount,
                        Thread ringBufferThread)

Called when result rows are received from a query.

Parameters:
  `fromQuery` - the underlying query that generated these results; this may not be very specific (e.g. it may be a query that includes multiple statements).
  `fields` - column metadata for the resultset; might be `null` if Query.QUERY_NO_METADATA was specified.
  `tuples` - the actual data. If this is set then queueTuples will be null.
  `cursor` - a cursor to use to fetch additional data; `null` if no further results are present.
  `queueTuples` - the actual data in a blocking queue. If this is set then tuples will be null.
  `rowCount` - number of rows fetched from the socket.
  `ringBufferThread` - a thread to fetch rows in the limited rows buffer.

#### handleCommandStatus

    void handleCommandStatus(String status,
                           long updateCount,
                           long insertOID)

Called when a query that did not return a resultset completes.

Parameters:
  `status` - the command status string (e.g. "SELECT") returned by the backend
  `updateCount` - the number of rows affected by an INSERT, UPDATE, DELETE, FETCH, or MOVE command; -1 if not available.
  `insertOID` - for a single-row INSERT query, the OID of the newly inserted row; 0 if not available.

#### handleWarning

    void handleWarning(SQLWarning warning)

Called when a warning is emitted.

Parameters:
  `warning` - the warning that occurred.

#### handleError

    void handleError(SQLException error)

Called when an error occurs. Subsequent queries are abandoned; in general the only calls between a handleError call and a subsequent handleCompletion call are handleError or handleWarning.

Parameters:
  `error` - the error that occurred

#### handleCompletion

    void handleCompletion()
                          throws SQLException

Called before a QueryExecutor method returns. This method may throw a SQLException if desired; if it does, the QueryExecutor method will propagate that exception to the original caller.

Throws:
  `SQLException` - if the handler wishes the original method to throw an exception.

#### secureProgress

    void secureProgress()

Callback for batch statements. In case batch statement is executed in autocommit==true mode, the executor might commit "as it this it is best", so the result handler should track which statements are executed successfully and which are not.

#### getException

    SQLException getException()

Returns the first encountered exception. The rest are chained via `SQLException.setNextException(SQLException)`

Returns:
  the first encountered exception

#### getWarning

    SQLWarning getWarning()

Returns the first encountered warning. The rest are chained via `SQLException.setNextException(SQLException)`

Returns:
  the first encountered warning

#### setStatementStateIdleFromInQuery

    void setStatementStateIdleFromInQuery()

Set statement state on completion of the Ring buffer thread.

#### setStatementStateInQueryFromIdle

    void setStatementStateInQueryFromIdle()

Set statement state on start from IDLE to IN_QUERY, in case Ring Buffer thread reset the new query state as IDLE.

#### wantsScrollableResultSet

    boolean wantsScrollableResultSet()

Check the statement type

Returns:
  true if scrollable, false for forward only.