All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazon.redshift.core.ResultHandler Maven / Gradle / Ivy

There is a newer version: 2.1.0.30
Show newest version
/*
 * Copyright (c) 2004, PostgreSQL Global Development Group
 * See the LICENSE file in the project root for more information.
 */
// Copyright (c) 2004, Open Cloud Limited.

package com.amazon.redshift.core;

import java.sql.SQLException;
import java.sql.SQLWarning;
import java.util.List;

import com.amazon.redshift.core.v3.MessageLoopState;
import com.amazon.redshift.core.v3.RedshiftRowsBlockingQueue;

/**
 * 

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 ([email protected]) */ public interface ResultHandler { /** * Called when result rows are received from a query. * * @param 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). * @param fields column metadata for the resultset; might be null if * Query.QUERY_NO_METADATA was specified. * @param tuples the actual data. If this is set then queueTuples will be null. * @param cursor a cursor to use to fetch additional data; null if no further results * are present. * @param queueTuples the actual data in a blocking queue. If this is set then tuples will be null. * @param rowCount number of rows fetched from the socket. * @param ringBufferThread a thread to fetch rows in the limited rows buffer. */ void handleResultRows(Query fromQuery, Field[] fields, List tuples, ResultCursor cursor, RedshiftRowsBlockingQueue queueTuples, int[] rowCount, Thread ringBufferThread); /** * Called when a query that did not return a resultset completes. * * @param status the command status string (e.g. "SELECT") returned by the backend * @param updateCount the number of rows affected by an INSERT, UPDATE, DELETE, FETCH, or MOVE * command; -1 if not available. * @param insertOID for a single-row INSERT query, the OID of the newly inserted row; 0 if not * available. */ void handleCommandStatus(String status, long updateCount, long insertOID); /** * Called when a warning is emitted. * * @param warning the warning that occurred. */ void handleWarning(SQLWarning warning); /** * 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. * * @param error the error that occurred */ void handleError(SQLException error); /** * 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. */ void handleCompletion() throws SQLException; /** * 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. */ void secureProgress(); /** * Returns the first encountered exception. The rest are chained via {@link SQLException#setNextException(SQLException)} * @return the first encountered exception */ SQLException getException(); /** * Returns the first encountered warning. The rest are chained via {@link SQLException#setNextException(SQLException)} * @return the first encountered warning */ SQLWarning getWarning(); /** * Set statement state on completion of the Ring buffer thread. */ void setStatementStateIdleFromInQuery(); /** * Set statement state on start from IDLE to IN_QUERY, * in case Ring Buffer thread reset the new query state as IDLE. */ void setStatementStateInQueryFromIdle(); /** Check the statement type * * @return true if scrollable, false for forward only. */ boolean wantsScrollableResultSet(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy