Package org.firebirdsql.gds.ng.wire.version10

## Class V10OutputBlob

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

- All Implemented Interfaces:
    `java.lang.AutoCloseable`, `FbBlob`, `DatabaseListener`, `ExceptionListenable`, `TransactionListener`, `FbWireBlob`

      public class V10OutputBlob
      extends AbstractFbWireOutputBlob
      implements FbWireBlob, DatabaseListener

  Since:
    3.0
  Author:
    Mark Rotteveel

- - ### Nested Class Summary

    - ### 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
    Constructor | Description
    --- | ---
    `V10OutputBlob​(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `open()` | Opens an existing input blob, or creates an output blob.
    `void` | `putSegment​(byte[] segment)` | Writes a segment of blob data.

    - ### Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireOutputBlob

      `getBlobId, getSegment, isOutput, seek, setBlobId`

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

      `cancelImpl, closeImpl, getBlobInfo, getDatabase, getHandle, releaseBlob, releaseResources, setHandle`

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

      `addExceptionListener, cancel, checkBlobClosed, checkBlobOpen, checkDatabaseAttached, checkTransactionActive, clearDatabase, clearTransaction, close, createBlobLengthProcessor, detached, detaching, getBlobInfo, getBlobParameterBuffer, getMaximumSegmentSize, getTransaction, isEndingTransaction, isEof, isOpen, length, removeExceptionListener, resetEof, setEof, setOpen, transactionStateChanged, 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.DatabaseListener

      `detached, detaching, warningReceived`

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

      `addExceptionListener, removeExceptionListener`

    - ### Methods inherited from interface org.firebirdsql.gds.ng.FbBlob

      `cancel, close, getBlobId, getBlobInfo, getBlobInfo, getDatabase, getHandle, getMaximumSegmentSize, getSegment, isEof, isOpen, isOutput, length, seek`

- - ### Constructor Detail

    - #### V10OutputBlob

          public V10OutputBlob​(FbWireDatabase database,
                               FbWireTransaction transaction,
                               BlobParameterBuffer blobParameterBuffer)

  - ### Method Detail

    - #### open

          public void open()
                    throws java.sql.SQLException

      Description copied from interface: `FbBlob`
      Opens an existing input blob, or creates an output blob.
      Specified by:
        `open` in interface `FbBlob`
      Throws:
        `java.sql.SQLException` - If the blob is already open, this is a (closed) output blob and it already has a blobId, the transaction is not active, or a database connection error occurred

    - #### putSegment

          public void putSegment​(byte[] segment)
                          throws java.sql.SQLException

      Description copied from interface: `FbBlob`
      Writes a segment of blob data.

      Implementation must handle segment length exceeding `FbBlob.getMaximumSegmentSize()` by batching. TODO: reconsider and let caller handle that?

      Passing a section that is length 0 will throw an `SQLException`.

      Specified by:
        `putSegment` in interface `FbBlob`
      Parameters:
        `segment` - Segment to write
      Throws:
        `java.sql.SQLException` - If this is an input blob, the blob is closed, the transaction is not active, the segment is length 0 or longer than the maximum segment size, or a database connection error occurred.