Package org.postgresql.core.v3

# Class QueryExecutorImpl

java.lang.Object
org.postgresql.core.QueryExecutorBase
org.postgresql.core.v3.QueryExecutorImpl

All Implemented Interfaces:
  `QueryExecutor`, `TypeTransferModeRegistry`

public class QueryExecutorImpl extends QueryExecutorBase
QueryExecutor implementation for the V3 protocol.

- ## Field Summary

  ### Fields inherited from class org.postgresql.core.QueryExecutorBase

  `closeAction, lock, lockCondition, logServerErrorDetail, pgStream, protocolVersion`

  ### Fields inherited from interface org.postgresql.core.QueryExecutor

  `MAX_SAVE_POINTS, QUERY_BOTH_ROWS_AND_STATUS, QUERY_DESCRIBE_ONLY, QUERY_DISALLOW_BATCHING, QUERY_EXECUTE_AS_SIMPLE, QUERY_FORCE_DESCRIBE_PORTAL, QUERY_FORWARD_CURSOR, QUERY_NO_BINARY_TRANSFER, QUERY_NO_METADATA, QUERY_NO_RESULTS, QUERY_ONESHOT, QUERY_READ_ONLY_HINT, QUERY_SUPPRESS_BEGIN`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `QueryExecutorImpl(PGStream pgStream, int cancelSignalTimeout, Properties info)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addBinaryReceiveOid(int oid)`
  Adds a single oid that should be received using binary encoding.
  `void`
  `addBinarySendOid(int oid)`
  Adds a single oid that should be sent using binary encoding.
  `void`
  `addQueryToAdaptiveFetchCache(boolean adaptiveFetch, ResultCursor cursor)`
  Add query to adaptive fetch cache inside QueryExecutor.
  `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`
  `createSimpleQuery(String sql)`
  Create an unparameterized Query object suitable for execution by this QueryExecutor.
  `void`
  `doSubprotocolBegin()`
  `long`
  `endCopy(CopyOperationImpl op)`
  Finishes writing to copy and unlocks connection.
  `void`
  `execute(Query[] queries, @Nullable ParameterList[] parameterLists, BatchResultHandler batchHandler, int maxRows, int fetchSize, int flags)`
  Execute several Query, passing results to a provided ResultHandler.
  `void`
  `execute(Query[] queries, @Nullable ParameterList[] parameterLists, BatchResultHandler batchHandler, int maxRows, int fetchSize, int flags, boolean adaptiveFetch)`
  Execute several Query with adaptive fetch, passing results to a provided ResultHandler.
  `void`
  `execute(Query query, @Nullable ParameterList parameters, ResultHandler handler, int maxRows, int fetchSize, int flags)`
  Execute a Query, passing results to a provided ResultHandler.
  `void`
  `execute(Query query, @Nullable ParameterList parameters, ResultHandler handler, int maxRows, int fetchSize, int flags, boolean adaptiveFetch)`
  Execute a Query with adaptive fetch, passing results to a provided ResultHandler.
  `byte @Nullable []`
  `fastpathCall(int fnid, ParameterList parameters, boolean suppressBegin)`
  Invoke a backend function via the fastpath interface.
  `void`
  `fetch(ResultCursor cursor, ResultHandler handler, int fetchSize, boolean adaptiveFetch)`
  Fetch additional rows from a cursor.
  `void`
  `flushCopy(CopyOperationImpl op)`
  `boolean`
  `getAdaptiveFetch()`
  Get state of adaptive fetch inside QueryExecutor.
  `int`
  `getAdaptiveFetchSize(boolean adaptiveFetch, ResultCursor cursor)`
  Get fetch size computed by adaptive fetch size for given query.
  `String`
  `getApplicationName()`
  Returns application_name connection property.
  `Set<? extends Integer>`
  `getBinaryReceiveOids()`
  Gets the oids that should be received using binary encoding.
  `Set<? extends Integer>`
  `getBinarySendOids()`
  Gets the oids that should be sent using binary encoding.
  `boolean`
  `getIntegerDateTimes()`
  Returns true if server uses integer instead of double for binary date and time encodings.
  `ProtocolVersion`
  `getProtocolVersion()`
  `ReplicationProtocol`
  `getReplicationProtocol()`
  `@Nullable TimeZone`
  `getTimeZone()`
  Returns backend timezone in java format.
  `void`
  `processNotifies()`
  Prior to attempting to retrieve notifications, we need to pull any recently received notifications off of the network buffers.
  `void`
  `processNotifies(int timeoutMillis)`
  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)`
  `protected void`
  `processResults(ResultHandler handler, int flags, boolean adaptiveFetch)`
  `void`
  `readStartupMessages()`
  `void`
  `receiveParameterStatus()`
  `void`
  `removeBinaryReceiveOid(int oid)`
  Remove given oid from the list of oids for binary receive encoding.
  `void`
  `removeBinarySendOid(int oid)`
  Remove given oid from the list of oids for binary send encoding.
  `void`
  `removeQueryFromAdaptiveFetchCache(boolean adaptiveFetch, ResultCursor cursor)`
  Remove query from adaptive fetch cache inside QueryExecutor
  `protected void`
  `sendCloseMessage()`
  Sends "terminate connection" message to the backend.
  `void`
  `setAdaptiveFetch(boolean adaptiveFetch)`
  Set state of adaptive fetch inside QueryExecutor.
  `void`
  `setApplicationName(String applicationName)`
  `void`
  `setBinaryReceiveOids(Set<Integer> oids)`
  Sets the oids that should be received using binary encoding.
  `void`
  `setBinarySendOids(Set<Integer> oids)`
  Sets the oids that should be sent using binary encoding.
  `void`
  `setTimeZone(TimeZone timeZone)`
  `CopyOperation`
  `startCopy(String sql, boolean suppressBegin)`
  Sends given query to BE to start, initialize and lock connection for a CopyOperation.
  `boolean`
  `useBinaryForReceive(int oid)`
  Returns if given oid should be received in binary format.
  `boolean`
  `useBinaryForSend(int oid)`
  Returns if given oid should be sent in binary format.
  `Query`
  `wrap(List<NativeQuery> queries)`
  Wrap given native query into a ready for execution format.
  `void`
  `writeToCopy(CopyOperationImpl op, byte[] data, int off, int siz)`
  Sends data during a live COPY IN operation.
  `void`
  `writeToCopy(CopyOperationImpl op, ByteStreamWriter from)`
  Sends data during a live COPY IN operation.

  ### Methods inherited from class org.postgresql.core.QueryExecutorBase

  `abort, addNotification, addWarning, borrowCallableQuery, borrowQuery, borrowQueryByKey, borrowReturningQuery, close, createCloseAction, createQuery, createQueryByKey, createQueryKey, getAutoSave, getBackendPID, getCloseAction, getDatabase, getEncoding, getEscapeSyntaxCallMode, getHostSpec, getNetworkTimeout, getNotifications, getParameterStatus, getParameterStatuses, getPreferQueryMode, getQuoteReturningIdentifiers, getServerVersion, getServerVersionNum, getStandardConformingStrings, getTransactionState, getUser, getWarnings, hasNotifications, isClosed, isColumnSanitiserDisabled, isFlushCacheOnDeallocate, isReWriteBatchedInsertsEnabled, onParameterStatus, releaseQuery, sendQueryCancel, setAutoSave, setBackendKeyData, setEncoding, setFlushCacheOnDeallocate, setNetworkTimeout, setPreferQueryMode, setServerVersion, setServerVersionNum, setStandardConformingStrings, setTransactionState, willHealOnRetry, willHealViaReparse`

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

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

- ## Constructor Details

  - ### QueryExecutorImpl

    public QueryExecutorImpl(PGStream pgStream, int cancelSignalTimeout, Properties info) throws SQLException, IOException
    Throws:
      `SQLException`
      `IOException`

- ## Method Details

  - ### getProtocolVersion

    public ProtocolVersion getProtocolVersion()
    Returns:
      the version of the implementation

  - ### createSimpleQuery

    public Query createSimpleQuery(String sql) throws SQLException
    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.
    Parameters:
      `sql` - the SQL for the query to create
    Returns:
      a new Query object
    Throws:
      `SQLException` - if something goes wrong

  - ### wrap

    public Query wrap(List<NativeQuery> queries)
    Description copied from interface: `QueryExecutor`
    Wrap given native query into a ready for execution format.
    Parameters:
      `queries` - list of queries in native to database syntax
    Returns:
      query object ready for execution by this query executor

  - ### execute

    public void execute(Query query, @Nullable 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.
    Parameters:
      `query` - the query to execute; must be a query returned from calling `QueryExecutor.wrap(List)` 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 query, @Nullable ParameterList parameters, ResultHandler handler, int maxRows, int fetchSize, int flags, boolean adaptiveFetch) throws SQLException
    Description copied from interface: `QueryExecutor`
    Execute a Query with adaptive fetch, passing results to a provided ResultHandler.
    Parameters:
      `query` - the query to execute; must be a query returned from calling `QueryExecutor.wrap(List)` 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.
      `adaptiveFetch` - state of adaptiveFetch to use during execution
    Throws:
      `SQLException` - if query execution fails

  - ### execute

    public void execute(Query[] queries, @Nullable ParameterList[] parameterLists, BatchResultHandler batchHandler, int maxRows, int fetchSize, int flags) throws SQLException
    Description copied from interface: `QueryExecutor`
    Execute several Query, passing results to a provided ResultHandler.
    Parameters:
      `queries` - the queries to execute; each must be a query returned from calling `QueryExecutor.wrap(List)` 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.
      `batchHandler` - 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, @Nullable ParameterList[] parameterLists, BatchResultHandler batchHandler, int maxRows, int fetchSize, int flags, boolean adaptiveFetch) throws SQLException
    Description copied from interface: `QueryExecutor`
    Execute several Query with adaptive fetch, passing results to a provided ResultHandler.
    Parameters:
      `queries` - the queries to execute; each must be a query returned from calling `QueryExecutor.wrap(List)` 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.
      `batchHandler` - 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.
      `adaptiveFetch` - state of adaptiveFetch to use during execution
    Throws:
      `SQLException` - if query execution fails

  - ### fastpathCall

    public byte @Nullable [] fastpathCall(int fnid, ParameterList parameters, boolean suppressBegin) throws SQLException
    Description copied from interface: `QueryExecutor`
    Invoke a backend function via the fastpath interface.
    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
      `suppressBegin` - if begin should be suppressed
    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)`.
    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.
    Throws:
      `SQLException` - if and error occurs while fetching notifications

  - ### processNotifies

    public void processNotifies(int timeoutMillis) 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. This variant supports blocking for the given time in millis.
    Parameters:
      `timeoutMillis` - when > 0, block for this time when =0, block forever when < 0, don't block
    Throws:
      `SQLException` - if and error occurs while fetching notifications

  - ### startCopy

    public CopyOperation startCopy(String sql, boolean suppressBegin) throws SQLException
    Sends given query to BE to start, initialize and lock connection for a CopyOperation.
    Parameters:
      `sql` - COPY FROM STDIN / COPY TO STDOUT statement
      `suppressBegin` - if begin should be suppressed
    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(CopyOperationImpl 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(CopyOperationImpl 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

  - ### writeToCopy

    public void writeToCopy(CopyOperationImpl op, ByteStreamWriter from) 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
      `from` - the source of bytes, e.g. a ByteBufferByteStreamWriter
    Throws:
      `SQLException` - on failure

  - ### flushCopy

    public void flushCopy(CopyOperationImpl op) throws SQLException
    Throws:
      `SQLException`

  - ### processResults

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

  - ### processResults

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

  - ### fetch

    public void fetch(ResultCursor cursor, ResultHandler handler, int fetchSize, boolean adaptiveFetch) throws SQLException
    Description copied from interface: `QueryExecutor`
    Fetch additional rows from a cursor.
    Parameters:
      `cursor` - the cursor to fetch from
      `handler` - the handler to feed results to
      `fetchSize` - the preferred number of rows to retrieve before suspending
      `adaptiveFetch` - state of adaptiveFetch to use during fetching
    Throws:
      `SQLException` - if query execution fails

  - ### getAdaptiveFetchSize

    public int getAdaptiveFetchSize(boolean adaptiveFetch, ResultCursor cursor)
    Description copied from interface: `QueryExecutor`
    Get fetch size computed by adaptive fetch size for given query.
    Parameters:
      `adaptiveFetch` - state of adaptive fetch, which should be used during retrieving
      `cursor` - Cursor used by resultSet, containing query, have to be able to cast to Portal class.
    Returns:
      fetch size computed by adaptive fetch size for given query passed inside cursor

  - ### setAdaptiveFetch

    public void setAdaptiveFetch(boolean adaptiveFetch)
    Description copied from interface: `QueryExecutor`
    Set state of adaptive fetch inside QueryExecutor.
    Parameters:
      `adaptiveFetch` - desired state of adaptive fetch

  - ### getAdaptiveFetch

    public boolean getAdaptiveFetch()
    Description copied from interface: `QueryExecutor`
    Get state of adaptive fetch inside QueryExecutor.
    Returns:
      state of adaptive fetch inside QueryExecutor

  - ### addQueryToAdaptiveFetchCache

    public void addQueryToAdaptiveFetchCache(boolean adaptiveFetch, ResultCursor cursor)
    Description copied from interface: `QueryExecutor`
    Add query to adaptive fetch cache inside QueryExecutor.
    Parameters:
      `adaptiveFetch` - state of adaptive fetch used during adding query
      `cursor` - Cursor used by resultSet, containing query, have to be able to cast to Portal class.

  - ### removeQueryFromAdaptiveFetchCache

    public void removeQueryFromAdaptiveFetchCache(boolean adaptiveFetch, ResultCursor cursor)
    Description copied from interface: `QueryExecutor`
    Remove query from adaptive fetch cache inside QueryExecutor
    Parameters:
      `adaptiveFetch` - state of adaptive fetch used during removing query
      `cursor` - Cursor used by resultSet, containing query, have to be able to cast to Portal class.

  - ### sendCloseMessage

    protected void sendCloseMessage() throws IOException
    Description copied from class: `QueryExecutorBase`
    Sends "terminate connection" message to the backend.
    Specified by:
      `sendCloseMessage` in class `QueryExecutorBase`
    Throws:
      `IOException` - in case connection termination fails

  - ### readStartupMessages

    public void readStartupMessages() throws IOException, SQLException
    Throws:
      `IOException`
      `SQLException`

  - ### receiveParameterStatus

    public void receiveParameterStatus() throws IOException, SQLException
    Throws:
      `IOException`
      `SQLException`

  - ### setTimeZone

    public void setTimeZone(TimeZone timeZone)

  - ### getTimeZone

    public @Nullable TimeZone getTimeZone()
    Description copied from interface: `QueryExecutor`
    Returns backend timezone in java format.
    Returns:
      backend timezone in java format.

  - ### setApplicationName

    public void setApplicationName(String applicationName)

  - ### getApplicationName

    public String getApplicationName()
    Description copied from interface: `QueryExecutor`
    Returns application_name connection property.
    Returns:
      application_name connection property

  - ### getReplicationProtocol

    public ReplicationProtocol getReplicationProtocol()
    Returns:
      the ReplicationProtocol instance for this connection.

  - ### addBinaryReceiveOid

    public void addBinaryReceiveOid(int oid)
    Description copied from interface: `QueryExecutor`
    Adds a single oid that should be received using binary encoding.
    Parameters:
      `oid` - The oid to request with binary encoding.

  - ### removeBinaryReceiveOid

    public void removeBinaryReceiveOid(int oid)
    Description copied from interface: `QueryExecutor`
    Remove given oid from the list of oids for binary receive encoding.

    Note: the binary receive for the oid can be re-activated later.

    Parameters:
      `oid` - The oid to request with binary encoding.

  - ### getBinaryReceiveOids

    public Set<? extends Integer> getBinaryReceiveOids()
    Description copied from interface: `QueryExecutor`
    Gets the oids that should be received using binary encoding.

    Note: this returns an unmodifiable set, and its contents might not reflect the current state.

    Returns:
      The oids to request with binary encoding.

  - ### useBinaryForReceive

    public boolean useBinaryForReceive(int oid)
    Description copied from interface: `TypeTransferModeRegistry`
    Returns if given oid should be received in binary format.
    Parameters:
      `oid` - type oid
    Returns:
      true if given oid should be received in binary format

  - ### setBinaryReceiveOids

    public void setBinaryReceiveOids(Set<Integer> oids)
    Description copied from interface: `QueryExecutor`
    Sets the oids that should be received using binary encoding.
    Parameters:
      `oids` - The oids to request with binary encoding.

  - ### addBinarySendOid

    public void addBinarySendOid(int oid)
    Description copied from interface: `QueryExecutor`
    Adds a single oid that should be sent using binary encoding.
    Parameters:
      `oid` - The oid to send with binary encoding.

  - ### removeBinarySendOid

    public void removeBinarySendOid(int oid)
    Description copied from interface: `QueryExecutor`
    Remove given oid from the list of oids for binary send encoding.

    Note: the binary send for the oid can be re-activated later.

    Parameters:
      `oid` - The oid to send with binary encoding.

  - ### getBinarySendOids

    public Set<? extends Integer> getBinarySendOids()
    Description copied from interface: `QueryExecutor`
    Gets the oids that should be sent using binary encoding.

    Note: this returns an unmodifiable set, and its contents might not reflect the current state.

    Returns:
      useBinaryForOids The oids to send with binary encoding.

  - ### useBinaryForSend

    public boolean useBinaryForSend(int oid)
    Description copied from interface: `TypeTransferModeRegistry`
    Returns if given oid should be sent in binary format.
    Parameters:
      `oid` - type oid
    Returns:
      true if given oid should be sent in binary format

  - ### setBinarySendOids

    public void setBinarySendOids(Set<Integer> oids)
    Description copied from interface: `QueryExecutor`
    Sets the oids that should be sent using binary encoding.
    Parameters:
      `oids` - The oids to send with binary encoding.

  - ### getIntegerDateTimes

    public boolean getIntegerDateTimes()
    Description copied from interface: `QueryExecutor`
    Returns true if server uses integer instead of double for binary date and time encodings.
    Returns:
      the server integer_datetime setting.