Module org.firebirdsql.jaybird
Package org.firebirdsql.gds.ng.wire

# Class AbstractFbWireStatement

java.lang.Object
org.firebirdsql.gds.ng.AbstractFbStatement
org.firebirdsql.gds.ng.wire.AbstractFbWireStatement

All Implemented Interfaces:
  `AutoCloseable`, `FbStatement`, `ExceptionListenable`, `FbWireStatement`

Direct Known Subclasses:
  `V10Statement`

public abstract class AbstractFbWireStatement extends AbstractFbStatement implements FbWireStatement

Since:
  3.0
Author:
  Mark Rotteveel

- ## Field Summary

  ### Fields inherited from class org.firebirdsql.gds.ng.AbstractFbStatement

  `exceptionListenerDispatcher, statementListenerDispatcher`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractFbWireStatement(FbWireDatabase database)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected final byte[]`
  `calculateBlr(RowDescriptor rowDescriptor)`
  Returns the (possibly cached) blr byte array for a `RowDescriptor`, or `null` if the parameter is null.
  `protected final byte[]`
  `calculateBlr(RowDescriptor rowDescriptor, RowValue rowValue)`
  Returns the blr byte array for a `RowValue`, or `null` if the parameter is null.
  `final void`
  `close()`
  Close and deallocate this statement.
  `final RowDescriptor`
  `emptyRowDescriptor()`
  `protected final BlrCalculator`
  `getBlrCalculator()`
  `final FbWireDatabase`
  `getDatabase()`
  `final int`
  `getHandle()`
  `protected byte[]`
  `getInfo(int operation, byte[] requestItems, int bufferLength)`
  `byte[]`
  `getSqlInfo(byte[] requestItems, int bufferLength)`
  Request statement info.
  `FbWireTransaction`
  `getTransaction()`
  `protected final XdrInputStream`
  `getXdrIn()`
  Gets the XdrInputStream.
  `protected final XdrOutputStream`
  `getXdrOut()`
  Gets the XdrOutputStream.
  `protected void`
  `handleInlineBlobResponse(InlineBlobResponse inlineBlobResponse)`
  Handle the inline blob response from an `op_execute2` or `op_fetch_response`.
  `protected boolean`
  `isValidTransactionClass(Class<? extends FbTransaction> transactionClass)`
  Method to decide if a transaction implementation class is valid for the statement implementation.
  `protected final void`
  `setHandle(int handle)`
  `final LockCloseable`
  `withLock()`
  Locks the lock with `Lock.lock()` (or equivalent).
  `protected final <T> DeferredAction`
  `wrapDeferredResponse(DeferredResponse<T> deferredResponse, Function<Response,T> responseMapper, boolean requiresSync)`
  Wraps a deferred response to produce a deferred action that can be added using `FbWireDatabase.enqueueDeferredAction(DeferredAction)`, notifying the exception listener of this statement for exceptions, and forcing the ERROR state for IO errors.

  ### Methods inherited from class org.firebirdsql.gds.ng.AbstractFbStatement

  `addExceptionListener, addStatementListener, addWeakStatementListener, asyncFetchRows, checkFetchSize, checkPrepareAllowed, checkStatementHasOpenCursor, checkStatementValid, checkStatementValid, closeCursor, closeCursor, createExecutionPlanProcessor, createSqlCountProcessor, ensureClosedCursor, fetchScroll, fetchScrollImpl, forceState, free, getAllowedTimeout, getCursorInfo, getCursorInfo, getCursorInfoImpl, getCursorName, getExecutionPlan, getExplainedExecutionPlan, getParameterDescriptionInfoRequestItems, getParameterDescriptor, getRowDescriptor, getSqlCounts, getSqlInfo, getState, getStatementInfoRequestItems, getStatementWarningCallback, getTimeout, getTransactionListener, getType, hasFetched, hasFields, hasSingletonResult, isAfterLast, isBeforeFirst, isPrepareAllowed, parseStatementInfo, queueRowData, removeExceptionListener, removeStatementListener, reset, reset, resetAll, setAfterLast, setBeforeFirst, setCursorName, setCursorNameImpl, setParameterDescriptor, setRowDescriptor, setTimeout, setTransaction, setType, signalAsyncFetchComplete, signalAsyncFetchStart, signalExecute, signalFetch, switchState, unprepare, validateParameters`

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

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

  ### Methods inherited from interface org.firebirdsql.gds.ng.listeners.ExceptionListenable

  `addExceptionListener, removeExceptionListener`

  ### Methods inherited from interface org.firebirdsql.gds.ng.FbStatement

  `addStatementListener, addWeakStatementListener, asyncFetchRows, batchCancel, batchExecute, clearCursorFlag, closeCursor, closeCursor, createBatchParameterBuffer, deferredBatchCreate, deferredBatchRelease, deferredBatchSend, ensureClosedCursor, execute, fetchRows, fetchScroll, getCursorInfo, getCursorInfo, getDefaultSqlInfoSize, getExecutionPlan, getExplainedExecutionPlan, getMaxSqlInfoSize, getParameterDescriptor, getRowDescriptor, getSqlCounts, getSqlInfo, getState, getTimeout, getType, hasFetched, isCursorFlagSet, prepare, removeStatementListener, setCursorFlag, setCursorName, setTimeout, setTransaction, supportBatchUpdates, supportsCursorInfo, supportsFetchScroll, unprepare, validateParameters`

- ## Constructor Details

  - ### AbstractFbWireStatement

    protected AbstractFbWireStatement(FbWireDatabase database)

- ## Method Details

  - ### withLock

    public final LockCloseable withLock()
    Description copied from interface: `FbStatement`
    Locks the lock with `Lock.lock()` (or equivalent).

    Implementations are expected to apply the same lock as `FbAttachment.withLock()`.

    Specified by:
      `withLock` in interface `FbStatement`
    Returns:
      lock closeable which unlocks the lock on close
    See Also:
      - `FbAttachment.withLock()`

  - ### getXdrIn

    protected final XdrInputStream getXdrIn() throws SQLException
    Gets the XdrInputStream.
    Returns:
      Instance of XdrInputStream
    Throws:
      `SQLException` - If no connection is opened or when exceptions occur retrieving the InputStream

  - ### getXdrOut

    protected final XdrOutputStream getXdrOut() throws SQLException
    Gets the XdrOutputStream.
    Returns:
      Instance of XdrOutputStream
    Throws:
      `SQLException` - If no connection is opened or when exceptions occur retrieving the OutputStream

  - ### getDatabase

    public final FbWireDatabase getDatabase()
    Specified by:
      `getDatabase` in interface `FbStatement`
    Returns:
      The database connection that created this statement

  - ### getHandle

    public final int getHandle()
    Specified by:
      `getHandle` in interface `FbStatement`
    Returns:
      The Firebird statement handle identifier

  - ### setHandle

    protected final void setHandle(int handle)

  - ### getTransaction

    public FbWireTransaction getTransaction()
    Specified by:
      `getTransaction` in interface `FbStatement`
    Overrides:
      `getTransaction` in class `AbstractFbStatement`
    Returns:
      Transaction currently associated with this statement

  - ### calculateBlr

    protected final byte[] calculateBlr(RowDescriptor rowDescriptor) throws SQLException
    Returns the (possibly cached) blr byte array for a `RowDescriptor`, or `null` if the parameter is null.
    Parameters:
      `rowDescriptor` - The row descriptor.
    Returns:
      blr byte array or `null` when `rowDescriptor` is `null`
    Throws:
      `SQLException` - When the `RowDescriptor` contains an unsupported field type.

  - ### calculateBlr

    protected final byte[] calculateBlr(RowDescriptor rowDescriptor, RowValue rowValue) throws SQLException
    Returns the blr byte array for a `RowValue`, or `null` if the parameter is null.

    Contrary to `calculateBlr(org.firebirdsql.gds.ng.fields.RowDescriptor)`, it is not allowed to cache this value as it depends on the actual row value.

    Parameters:
      `rowValue` - The row value.
    Returns:
      blr byte array or `null` when `rowValue` is `null`
    Throws:
      `SQLException` - When the `RowValue` contains an unsupported field type.

  - ### getBlrCalculator

    protected final BlrCalculator getBlrCalculator()
    Returns:
      The `BlrCalculator` instance for this statement (currently always the one from the `FbWireDatabase` instance).

  - ### close

    public final void close() throws SQLException
    Description copied from interface: `FbStatement`
    Close and deallocate this statement.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `FbStatement`
    Overrides:
      `close` in class `AbstractFbStatement`
    Throws:
      `SQLException`

  - ### isValidTransactionClass

    protected boolean isValidTransactionClass(Class<? extends FbTransaction> transactionClass)
    Description copied from class: `AbstractFbStatement`
    Method to decide if a transaction implementation class is valid for the statement implementation.

    Eg a `V10Statement` will only work with an `FbWireTransaction` implementation.

    Specified by:
      `isValidTransactionClass` in class `AbstractFbStatement`
    Parameters:
      `transactionClass` - Class of the transaction
    Returns:
      `true` when the transaction class is valid for the statement implementation.

  - ### emptyRowDescriptor

    public final RowDescriptor emptyRowDescriptor()
    Specified by:
      `emptyRowDescriptor` in interface `FbStatement`
    Returns:
      A potentially cached empty row descriptor for this statement or database.

  - ### getSqlInfo

    public byte[] getSqlInfo(byte[] requestItems, int bufferLength) throws SQLException
    Description copied from interface: `FbStatement`
    Request statement info.
    Specified by:
      `getSqlInfo` in interface `FbStatement`
    Parameters:
      `requestItems` - Array of info items to request
      `bufferLength` - Response buffer length to use
    Returns:
      Response buffer
    Throws:
      `SQLException` - For errors retrieving or transforming the response.

  - ### getInfo

    protected byte[] getInfo(int operation, byte[] requestItems, int bufferLength) throws SQLException
    Throws:
      `SQLException`

  - ### handleInlineBlobResponse

    protected void handleInlineBlobResponse(InlineBlobResponse inlineBlobResponse)
    Handle the inline blob response from an `op_execute2` or `op_fetch_response`.
    Parameters:
      `inlineBlobResponse` - inline blob response
    Since:
      6.0.2

  - ### wrapDeferredResponse

    protected final <T> DeferredAction wrapDeferredResponse(DeferredResponse<T> deferredResponse, Function<Response,T> responseMapper, boolean requiresSync)
    Wraps a deferred response to produce a deferred action that can be added using `FbWireDatabase.enqueueDeferredAction(DeferredAction)`, notifying the exception listener of this statement for exceptions, and forcing the ERROR state for IO errors.
    Type Parameters:
      `T` - type of deferred response
    Parameters:
      `deferredResponse` - deferred response to wrap
      `responseMapper` - Function to map a `Response` to the response object expected by the deferred response
      `requiresSync` - `true` if the deferred response requires a sync action or flush before it can be processed
    Returns:
      deferred action