org.postgresql.core.v3
Class QueryExecutorImpl

java.lang.Object
  extended by org.postgresql.core.v3.QueryExecutorImpl
All Implemented Interfaces:
QueryExecutor

public class QueryExecutorImpl
extends Object
implements QueryExecutor

QueryExecutor implementation for the V3 protocol.


Field Summary
 
Fields inherited from interface org.postgresql.core.QueryExecutor
QUERY_BOTH_ROWS_AND_STATUS, QUERY_DESCRIBE_ONLY, QUERY_DISALLOW_BATCHING, QUERY_FORWARD_CURSOR, QUERY_NO_METADATA, QUERY_NO_RESULTS, QUERY_ONESHOT, QUERY_SUPPRESS_BEGIN
 
Constructor Summary
QueryExecutorImpl(org.postgresql.core.v3.ProtocolConnectionImpl protoConnection, PGStream pgStream, Properties info, Logger logger)
           
 
Method Summary
 void cancelCopy(CopyOperationImpl op)
          Finishes a copy operation and unlocks connection discarding any exchanged data.
 ParameterList createFastpathParameters(int count)
          Create a new ParameterList implementation suitable for invoking a fastpath function via QueryExecutor.fastpathCall(int, org.postgresql.core.ParameterList, boolean).
 Query createParameterizedQuery(String sql)
          Create a parameterized Query object suitable for execution by this QueryExecutor.
 Query createSimpleQuery(String sql)
          Create an unparameterized Query object suitable for execution by this QueryExecutor.
 void doSubprotocolBegin()
           
 long endCopy(CopyInImpl op)
          Finishes writing to copy and unlocks connection
 void execute(Query[] queries, ParameterList[] parameterLists, ResultHandler handler, int maxRows, int fetchSize, int flags)
          Execute several Query, passing results to a provided ResultHandler.
 void execute(Query query, ParameterList parameters, ResultHandler handler, int maxRows, int fetchSize, int flags)
          Execute a Query, passing results to a provided ResultHandler.
 byte[] fastpathCall(int fnid, ParameterList parameters, boolean suppressBegin)
          Invoke a backend function via the fastpath interface.
 void fetch(ResultCursor cursor, ResultHandler handler, int fetchSize)
          Fetch additional rows from a cursor.
 void flushCopy(CopyInImpl op)
           
 void processNotifies()
          Prior to attempting to retrieve notifications, we need to pull any recently received notifications off of the network buffers.
protected  void processResults(ResultHandler handler, int flags)
           
 CopyOperation startCopy(String sql, boolean suppressBegin)
          Sends given query to BE to start, initialize and lock connection for a CopyOperation.
 void writeToCopy(CopyInImpl op, byte[] data, int off, int siz)
          Sends data during a live COPY IN operation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

QueryExecutorImpl

public QueryExecutorImpl(org.postgresql.core.v3.ProtocolConnectionImpl protoConnection,
                         PGStream pgStream,
                         Properties info,
                         Logger logger)
Method Detail

createSimpleQuery

public Query createSimpleQuery(String sql)
Description copied from interface: QueryExecutor
Create an unparameterized Query object suitable for execution by this QueryExecutor. The provided query string is not parsed for parameter placeholders ('?' characters), and the Query.createParameterList() of the returned object will always return an empty ParameterList.

Specified by:
createSimpleQuery in interface QueryExecutor
Parameters:
sql - the SQL for the query to create
Returns:
a new Query object

createParameterizedQuery

public Query createParameterizedQuery(String sql)
Description copied from interface: QueryExecutor
Create a parameterized Query object suitable for execution by this QueryExecutor. The provided query string is parsed for parameter placeholders ('?' characters), and the Query.createParameterList() of the returned object will create an appropriately-sized ParameterList.

Specified by:
createParameterizedQuery in interface QueryExecutor
Parameters:
sql - the SQL for the query to create, with '?' placeholders for parameters.
Returns:
a new Query object

execute

public void execute(Query query,
                    ParameterList parameters,
                    ResultHandler handler,
                    int maxRows,
                    int fetchSize,
                    int flags)
             throws SQLException
Description copied from interface: QueryExecutor
Execute a Query, passing results to a provided ResultHandler.

Specified by:
execute in interface QueryExecutor
Parameters:
query - the query to execute; must be a query returned from calling QueryExecutor.createSimpleQuery(String) or QueryExecutor.createParameterizedQuery(String) on this QueryExecutor object.
parameters - the parameters for the query. Must be non-null if the query takes parameters. Must be a parameter object returned by Query.createParameterList().
handler - a ResultHandler responsible for handling results generated by this query
maxRows - the maximum number of rows to retrieve
fetchSize - if QUERY_FORWARD_CURSOR is set, the preferred number of rows to retrieve before suspending
flags - a combination of QUERY_* flags indicating how to handle the query.
Throws:
SQLException - if query execution fails

execute

public void execute(Query[] queries,
                    ParameterList[] parameterLists,
                    ResultHandler handler,
                    int maxRows,
                    int fetchSize,
                    int flags)
             throws SQLException
Description copied from interface: QueryExecutor
Execute several Query, passing results to a provided ResultHandler.

Specified by:
execute in interface QueryExecutor
Parameters:
queries - the queries to execute; each must be a query returned from calling QueryExecutor.createSimpleQuery(String) or QueryExecutor.createParameterizedQuery(String) on this QueryExecutor object.
parameterLists - the parameter lists for the queries. The parameter lists correspond 1:1 to the queries passed in the queries array. Each must be non-null if the corresponding query takes parameters, and must be a parameter object returned by Query.createParameterList() created by the corresponding query.
handler - a ResultHandler responsible for handling results generated by this query
maxRows - the maximum number of rows to retrieve
fetchSize - if QUERY_FORWARD_CURSOR is set, the preferred number of rows to retrieve before suspending
flags - a combination of QUERY_* flags indicating how to handle the query.
Throws:
SQLException - if query execution fails

fastpathCall

public byte[] fastpathCall(int fnid,
                           ParameterList parameters,
                           boolean suppressBegin)
                    throws SQLException
Description copied from interface: QueryExecutor
Invoke a backend function via the fastpath interface.

Specified by:
fastpathCall in interface QueryExecutor
Parameters:
fnid - the OID of the backend function to invoke
parameters - a ParameterList returned from QueryExecutor.createFastpathParameters(int) containing the parameters to pass to the backend function
Returns:
the binary-format result of the fastpath call, or null if a void result was returned
Throws:
SQLException - if an error occurs while executing the fastpath call

doSubprotocolBegin

public void doSubprotocolBegin()
                        throws SQLException
Throws:
SQLException

createFastpathParameters

public ParameterList createFastpathParameters(int count)
Description copied from interface: QueryExecutor
Create a new ParameterList implementation suitable for invoking a fastpath function via QueryExecutor.fastpathCall(int, org.postgresql.core.ParameterList, boolean).

Specified by:
createFastpathParameters in interface QueryExecutor
Parameters:
count - the number of parameters the fastpath call will take
Returns:
a ParameterList suitable for passing to QueryExecutor.fastpathCall(int, org.postgresql.core.ParameterList, boolean).

processNotifies

public void processNotifies()
                     throws SQLException
Description copied from interface: QueryExecutor
Prior to attempting to retrieve notifications, we need to pull any recently received notifications off of the network buffers. The notification retrieval in ProtocolConnection cannot do this as it is prone to deadlock, so the higher level caller must be responsible which requires exposing this method.

Specified by:
processNotifies in interface QueryExecutor
Throws:
SQLException

startCopy

public CopyOperation startCopy(String sql,
                               boolean suppressBegin)
                        throws SQLException
Sends given query to BE to start, initialize and lock connection for a CopyOperation.

Specified by:
startCopy in interface QueryExecutor
Parameters:
sql - COPY FROM STDIN / COPY TO STDOUT statement
Returns:
CopyIn or CopyOut operation object
Throws:
SQLException - on failure

cancelCopy

public void cancelCopy(CopyOperationImpl op)
                throws SQLException
Finishes a copy operation and unlocks connection discarding any exchanged data.

Parameters:
op - the copy operation presumably currently holding lock on this connection
Throws:
SQLException - on any additional failure

endCopy

public long endCopy(CopyInImpl op)
             throws SQLException
Finishes writing to copy and unlocks connection

Parameters:
op - the copy operation presumably currently holding lock on this connection
Returns:
number of rows updated for server versions 8.2 or newer
Throws:
SQLException - on failure

writeToCopy

public void writeToCopy(CopyInImpl op,
                        byte[] data,
                        int off,
                        int siz)
                 throws SQLException
Sends data during a live COPY IN operation. Only unlocks the connection if server suddenly returns CommandComplete, which should not happen

Parameters:
op - the CopyIn operation presumably currently holding lock on this connection
data - bytes to send
off - index of first byte to send (usually 0)
siz - number of bytes to send (usually data.length)
Throws:
SQLException - on failure

flushCopy

public void flushCopy(CopyInImpl op)
               throws SQLException
Throws:
SQLException

processResults

protected void processResults(ResultHandler handler,
                              int flags)
                       throws IOException
Throws:
IOException

fetch

public void fetch(ResultCursor cursor,
                  ResultHandler handler,
                  int fetchSize)
           throws SQLException
Description copied from interface: QueryExecutor
Fetch additional rows from a cursor.

Specified by:
fetch in interface QueryExecutor
Parameters:
cursor - the cursor to fetch from
handler - the handler to feed results to
fetchSize - the preferred number of rows to retrieve before suspending
Throws:
SQLException - if query execution fails


Copyright © 2013. All Rights Reserved.