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

# Class AbstractFbWireOutputBlob

java.lang.Object
org.firebirdsql.gds.ng.AbstractFbBlob
org.firebirdsql.gds.ng.wire.AbstractFbWireBlob
org.firebirdsql.gds.ng.wire.AbstractFbWireOutputBlob

All Implemented Interfaces:
  `AutoCloseable`, `FbBlob`, `DatabaseListener`, `ExceptionListenable`, `TransactionListener`, `FbWireBlob`

Direct Known Subclasses:
  `V10OutputBlob`

public abstract class AbstractFbWireOutputBlob extends AbstractFbWireBlob

Since:
  3.0
Author:
  Mark Rotteveel

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireBlob

  `AbstractFbWireBlob.BlobOpenOperation`

  ## Nested classes/interfaces inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

  `AbstractFbBlob.BlobState`

  ## Nested classes/interfaces inherited from interface org.firebirdsql.gds.ng.FbBlob

  `FbBlob.SeekMode`

- ## Field Summary

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

  `exceptionListenerDispatcher`

  ### Fields inherited from interface org.firebirdsql.gds.ng.FbBlob

  `NO_BLOB_ID`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractFbWireOutputBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected final int`
  `get(byte[] b, int off, int len, int minLen)`
  Default implementation for `AbstractFbBlob.get(byte[], int, int)` and `AbstractFbBlob.get(byte[], int, int, float)`.
  `final long`
  `getBlobId()`
  Returns the blob id.
  `final byte[]`
  `getSegment(int sizeRequested)`
  Gets a segment of blob data.
  `final boolean`
  `isOutput()`
  `protected void`
  `processOpenResponse(GenericResponse genericResponse)`
  `final void`
  `seek(int offset, FbBlob.SeekMode seekMode)`
  Performs a seek on a blob with the specified `seekMode` and `offset`.
  `protected final void`
  `setBlobId(long blobId)`
  Sets the blob id.

  ### Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireBlob

  `cancelImpl, closeImpl, getBlobInfo, getDatabase, getHandle, getXdrIn, getXdrOut, receiveOpenResponse, releaseBlob, releaseResources, sendOpen, setHandle, wrapDeferredResponse`

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

  `addExceptionListener, cancel, checkBlobClosed, checkBlobOpen, checkDatabaseAttached, checkTransactionActive, clearDatabase, clearDeferredException, clearTransaction, close, createBlobLengthProcessor, detached, detaching, errorOccurred, get, get, getBlobInfo, getBlobParameterBuffer, getKnownBlobInfoItems, getMaximumSegmentSize, getState, getTransaction, isEndingTransaction, isEof, isOpen, length, putSegment, registerDeferredException, removeExceptionListener, resetEof, setEof, setState, throwAndClearDeferredException, transactionStateChanged, transferDeferredExceptionTo, warningReceived, withLock`

  ### 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.FbBlob

  `cancel, close, get, get, getBlobInfo, getMaximumSegmentSize, isEof, isOpen, length, open, put, putSegment`

- ## Constructor Details

  - ### AbstractFbWireOutputBlob

    protected AbstractFbWireOutputBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer) throws SQLException
    Throws:
      `SQLException`

- ## Method Details

  - ### getBlobId

    public final long getBlobId()
    Description copied from interface: `FbBlob`
    Returns the blob id.

    For output blobs, this will return `FbBlob.NO_BLOB_ID` (`0L`) if the blob wasn't opened yet, or if the blob is deferred opened (client-side only). The value `FbBlob.NO_BLOB_ID` is technically invalid, but Firebird will handle it as an empty blob (both for input and output).

    Returns:
      The Firebird blob id

  - ### setBlobId

    protected final void setBlobId(long blobId) throws SQLException
    Sets the blob id.
    Parameters:
      `blobId` - Blob id.
    Throws:
      `SQLException` - If this is an input blob, or if this is an output blob whose blobId was already set.

  - ### processOpenResponse

    protected void processOpenResponse(GenericResponse genericResponse) throws SQLException
    Overrides:
      `processOpenResponse` in class `AbstractFbWireBlob`
    Throws:
      `SQLException`

  - ### isOutput

    public final boolean isOutput()
    Returns:
      `true` if this is an output blob (write only), `false` if this is an input blob (read only)

  - ### getSegment

    public final byte[] getSegment(int sizeRequested) throws SQLException
    Description copied from interface: `FbBlob`
    Gets a segment of blob data.

    When `sizeRequested` exceeds `FbBlob.getMaximumSegmentSize()` it is silently reduced to the maximum segment size.

    Parameters:
      `sizeRequested` - Requested segment size (> 0).
    Returns:
      Retrieved segment (size may be less than requested)
    Throws:
      `SQLException` - If this is an output blob, the blob is closed, the transaction is not active, or a database connection error occurred.
    See Also:
      - `FbBlob.get(byte[], int, int)`

  - ### get

    protected final int get(byte[] b, int off, int len, int minLen) throws SQLException
    Description copied from class: `AbstractFbBlob`
    Default implementation for `AbstractFbBlob.get(byte[], int, int)` and `AbstractFbBlob.get(byte[], int, int, float)`.
    Specified by:
      `get` in class `AbstractFbBlob`
    Parameters:
      `b` - target byte array
      `off` - offset to start
      `len` - number of bytes
      `minLen` - minimum number of bytes to fill (must be `0 < minLen <= len` if `len != 0`
    Returns:
      actual number of bytes read; is `0` if `len == 0`, will only be less than `minLen` if end-of-blob is reached
    Throws:
      `SQLException` - for database access errors, if `off < 0`, `len < 0`, or if `off + len > b.length`, or `len != 0 && (minLen <= 0 || minLen > len)`

  - ### seek

    public final void seek(int offset, FbBlob.SeekMode seekMode) throws SQLException
    Description copied from interface: `FbBlob`
    Performs a seek on a blob with the specified `seekMode` and `offset`.

    Firebird only supports seek on stream blobs.

    Parameters:
      `offset` - Offset of the seek, effect depends on value of `seekMode`
      `seekMode` - Value of `FbBlob.SeekMode`
    Throws:
      `SQLException` - If the blob is closed, the transaction is not active, or a database error occurred.