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:
  `java.lang.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
`AbstractFbWireStatement​(FbWireDatabase database)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected byte[]` `calculateBlr​(RowDescriptor rowDescriptor)` Returns the (possibly cached) blr byte array for a `RowDescriptor`, or `null` if the parameter is null.
`protected byte[]` `calculateBlr​(RowDescriptor rowDescriptor, RowValue rowValue)` Returns the blr byte array for a `RowValue`, or `null` if the parameter is null.
`void` `close()` Close and deallocate this statement.
`RowDescriptor` `emptyRowDescriptor()`
`protected BlrCalculator` `getBlrCalculator()`
`FbWireDatabase` `getDatabase()`
`int` `getHandle()`
`protected byte[]` `getInfo​(int operation, byte[] requestItems, int bufferLength)`
`byte[]` `getSqlInfo​(byte[] requestItems, int bufferLength)` Request statement info.
`FbWireTransaction` `getTransaction()`
`protected XdrInputStream` `getXdrIn()` Gets the XdrInputStream.
`protected 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​(java.lang.Class<? extends FbTransaction> transactionClass)` Method to decide if a transaction implementation class is valid for the statement implementation.
`protected void` `setHandle​(int handle)`
`LockCloseable` `withLock()` Locks the lock with `Lock.lock()` (or equivalent).
`protected void` `withTransmitLock​(TransmitAction transmitAction)`
`protected <T> DeferredAction` `wrapDeferredResponse​(DeferredResponse<T> deferredResponse, java.util.function.Function<Response,​T> responseMapper)` 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, checkStatementValid, checkStatementValid, closeCursor, closeCursor, createExecutionPlanProcessor, createSqlCountProcessor, ensureClosedCursor, fetchScroll, fetchScrollImpl, finalize, forceState, free, getAllowedTimeout, getCursorInfo, getCursorInfo, getCursorInfoImpl, 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, setParameterDescriptor, setRowDescriptor, setTimeout, setTransaction, setType, signalExecute, signalFetch, switchState, unprepare, validateParameters`

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

`clone, equals, 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, 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 Detail

#### AbstractFbWireStatement

    public AbstractFbWireStatement​(FbWireDatabase database)

### Method Detail

#### 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 java.sql.SQLException

Gets the XdrInputStream.

Returns:
  Instance of XdrInputStream
Throws:
  `java.sql.SQLException` - If no connection is opened or when exceptions occur retrieving the InputStream

#### getXdrOut

    protected final XdrOutputStream getXdrOut()
                                       throws java.sql.SQLException

Gets the XdrOutputStream.

Returns:
  Instance of XdrOutputStream
Throws:
  `java.sql.SQLException` - If no connection is opened or when exceptions occur retrieving the OutputStream

#### withTransmitLock

    protected final void withTransmitLock​(TransmitAction transmitAction)
                                   throws java.io.IOException,
                                          java.sql.SQLException

Throws:
  `java.io.IOException`
  `java.sql.SQLException`
Since:
  5.0.11
See Also:
  `XdrStreamAccess.withTransmitLock(TransmitAction)`

#### 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 java.sql.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:
  `java.sql.SQLException` - When the `RowDescriptor` contains an unsupported field type.

#### calculateBlr

    protected final byte[] calculateBlr​(RowDescriptor rowDescriptor,
                                        RowValue rowValue)
                                 throws java.sql.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:
  `java.sql.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 void close()
               throws java.sql.SQLException

Description copied from interface: `FbStatement`
Close and deallocate this statement.

Specified by:
  `close` in interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `FbStatement`
Overrides:
  `close` in class `AbstractFbStatement`
Throws:
  `java.sql.SQLException`

#### isValidTransactionClass

    protected boolean isValidTransactionClass​(java.lang.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 java.sql.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:
  `java.sql.SQLException` - For errors retrieving or transforming the response.

#### getInfo

    protected byte[] getInfo​(int operation,
                             byte[] requestItems,
                             int bufferLength)
                      throws java.sql.SQLException

Throws:
  `java.sql.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:
  5.0.8

#### wrapDeferredResponse

    protected final <T> DeferredAction wrapDeferredResponse​(DeferredResponse<T> deferredResponse,
                                                            java.util.function.Function<Response,​T> responseMapper)

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
Returns:
  deferred action