Class AbstractFbWireDatabase

All Implemented Interfaces:
AutoCloseable, FbAttachment, FbDatabase, ExceptionListenable, TransactionListener, FbWireAttachment, FbWireDatabase
Direct Known Subclasses:
V10Database

public abstract class AbstractFbWireDatabase extends AbstractFbDatabase<WireDatabaseConnection> implements FbWireDatabase
Abstract class for operations common to all version of the wire protocol implementation.
Since:
3.0
Author:
Mark Rotteveel
  • Field Details

  • Constructor Details

    • AbstractFbWireDatabase

      protected AbstractFbWireDatabase(WireDatabaseConnection connection, ProtocolDescriptor descriptor)
      Creates an AbstractFbWireDatabase instance.
      Parameters:
      connection - A WireConnection with an established connection to the server.
      descriptor - The ProtocolDescriptor that created this connection (this is used for creating further dependent objects).
  • Method Details

    • getHandle

      public final int getHandle()
      Specified by:
      getHandle in interface FbAttachment
      Specified by:
      getHandle in interface FbDatabase
      Returns:
      The database handle value
    • forceClose

      public void forceClose() throws SQLException
      Description copied from class: AbstractFbAttachment
      Forces the connection to close without proper detach or cleanup.

      If a given implementation does not support this, then this method should call FbAttachment.close().

      Default implementation, calls FbAttachment.close()

      Specified by:
      forceClose in interface FbAttachment
      Overrides:
      forceClose in class AbstractFbAttachment<WireDatabaseConnection>
      Throws:
      SQLException - For problems closing the connection.
    • 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
    • getXdrStreamAccess

      public final XdrStreamAccess getXdrStreamAccess()
      Specified by:
      getXdrStreamAccess in interface FbWireAttachment
      Returns:
      Instance of XdrStreamAccess for this attachment.
    • getWireOperations

      public final FbWireOperations getWireOperations()
      Specified by:
      getWireOperations in interface FbWireAttachment
      Returns:
      Instance of FbWireOperations for this attachment.
    • isAttached

      public final boolean isAttached()
      Description copied from interface: FbAttachment
      Current attachment status.
      Specified by:
      isAttached in interface FbAttachment
      Overrides:
      isAttached in class AbstractFbAttachment<WireDatabaseConnection>
      Returns:
      true if connected to the server and attached to a database or service, false otherwise.
    • checkConnected

      protected final void checkConnected() throws SQLException
      Checks if a physical connection to the server is established.
      Specified by:
      checkConnected in class AbstractFbAttachment<WireDatabaseConnection>
      Throws:
      SQLException - If not connected.
    • checkAttached

      protected final void checkAttached() throws SQLException
      Checks if a physical connection to the server is established and if the connection is attached to a database.

      This method calls checkConnected(), so it is not necessary to call both.

      Throws:
      SQLException - If the database not connected or attached.
    • closeConnection

      protected final void closeConnection() throws IOException
      Closes the WireConnection associated with this connection.
      Throws:
      IOException - For errors closing the connection.
    • setNetworkTimeout

      public void setNetworkTimeout(int milliseconds) throws SQLException
      Description copied from interface: FbAttachment
      Sets the network timeout for this attachment.
      Specified by:
      setNetworkTimeout in interface FbAttachment
      Parameters:
      milliseconds - Timeout in milliseconds; 0 means no timeout. If the attachment doesn't support milliseconds, it should round up to the nearest second.
      Throws:
      SQLException - If this attachment is closed, the value of milliseconds is smaller than 0, or if setting the timeout fails.
      SQLFeatureNotSupportedException - If this attachment doesn't support (changing) the network timeout.
    • createBlobForOutput

      public final FbBlob createBlobForOutput(FbTransaction transaction, BlobParameterBuffer blobParameterBuffer)
      Description copied from interface: FbDatabase
      Creates a blob for write access to a new blob on the server.

      The blob is initially closed.

      Specified by:
      createBlobForOutput in interface FbDatabase
      Parameters:
      transaction - transaction associated with the blob
      blobParameterBuffer - blob parameter buffer
      Returns:
      instance of FbBlob
    • createBlobForInput

      public final FbBlob createBlobForInput(FbTransaction transaction, BlobParameterBuffer blobParameterBuffer, long blobId)
      Description copied from interface: FbDatabase
      Creates a blob for read access to an existing blob on the server.

      The blob is initially closed.

      Specified by:
      createBlobForInput in interface FbDatabase
      Parameters:
      transaction - transaction associated with the blob
      blobParameterBuffer - blob parameter buffer
      blobId - id of the blob
      Returns:
      instance of FbBlob
    • consumePackets

      public final void consumePackets(int numberOfResponses, WarningMessageCallback warningCallback)
      Description copied from interface: FbWireDatabase
      Consumes packets notifying for warnings, but ignoring exceptions thrown from the packet.

      This method should only be used inside the implementation if either packets need to be ignored, or to ensure that there is no backlog of packets (eg when an exception occurs during processing of multiple package responses).

      Specified by:
      consumePackets in interface FbWireDatabase
      Parameters:
      numberOfResponses - Number of responses to consume.
      warningCallback - Callback for warnings
    • readGenericResponse

      public final GenericResponse readGenericResponse(WarningMessageCallback warningCallback) throws SQLException, IOException
      Description copied from interface: FbWireAttachment
      Convenience method to read a Response to a GenericResponse
      Specified by:
      readGenericResponse in interface FbWireAttachment
      Parameters:
      warningCallback - Callback object for warnings, null for default callback
      Returns:
      GenericResponse
      Throws:
      SQLException - For errors returned from the server, or when attempting to read.
      IOException - For errors reading the response from the connection.
    • readSqlResponse

      public final SqlResponse readSqlResponse(WarningMessageCallback warningCallback) throws SQLException, IOException
      Description copied from interface: FbWireDatabase
      Convenience method to read a Response to a SqlResponse
      Specified by:
      readSqlResponse in interface FbWireDatabase
      Parameters:
      warningCallback - Callback object for warnings, null for default callback
      Returns:
      SqlResponse
      Throws:
      SQLException - For errors returned from the server, or when attempting to read.
      IOException - For errors reading the response from the connection.
    • readResponse

      public final Response readResponse(WarningMessageCallback warningCallback) throws SQLException, IOException
      Description copied from interface: FbWireDatabase
      Reads the response from the server.
      Specified by:
      readResponse in interface FbWireDatabase
      Parameters:
      warningCallback - Callback object for warnings, null for default callback
      Returns:
      Response read.
      Throws:
      SQLException - For errors returned from the server, or when attempting to read
      IOException - For errors reading the response from the connection.
    • enqueueDeferredAction

      public final void enqueueDeferredAction(DeferredAction deferredAction) throws SQLException
      Description copied from interface: FbWireDatabase
      Enqueue a deferred action.

      FbDatabase implementations that do not support deferred actions are allowed to throw an UnsupportedOperationException

      Specified by:
      enqueueDeferredAction in interface FbWireDatabase
      Parameters:
      deferredAction - Deferred action
      Throws:
      SQLException - for errors forcing handling of oversized queue using op_ping (or op_batch_sync)
    • completeDeferredActions

      public final void completeDeferredActions() throws SQLException
      Description copied from interface: FbWireDatabase
      Completes pending deferred actions.

      FbDatabase implementations that do not support deferred actions should simply do nothing.

      Specified by:
      completeDeferredActions in interface FbWireDatabase
      Throws:
      SQLException - for errors forcing ping/batch sync
    • createEventHandle

      public final EventHandle createEventHandle(String eventName, EventHandler eventHandler)
      Description copied from interface: FbDatabase
      Creates an event handle for this database type.

      The returned event handle can be used with FbDatabase.queueEvent(org.firebirdsql.gds.EventHandle).

      Specified by:
      createEventHandle in interface FbDatabase
      Parameters:
      eventName - Name of the event
      eventHandler - The event handler to call when the event occurred
      Returns:
      A suitable event handle instance
    • queueEvent

      public final void queueEvent(EventHandle eventHandle) throws SQLException
      Description copied from interface: FbDatabase
      Queues a wait for an event.
      Specified by:
      queueEvent in interface FbDatabase
      Parameters:
      eventHandle - The event handle (created using FbDatabase.createEventHandle(String, EventHandler) of this instance).
      Throws:
      SQLException - For errors establishing the asynchronous channel, or for queuing the event.
    • cancelEvent

      public final void cancelEvent(EventHandle eventHandle) throws SQLException
      Description copied from interface: FbDatabase
      Cancels a registered event.

      After cancellation, the event handle should be considered unusable. Before queueing a new event, an new handle needs to be created.

      Specified by:
      cancelEvent in interface FbDatabase
      Parameters:
      eventHandle - The event handle to cancel
      Throws:
      SQLException - For errors cancelling the event
    • countEvents

      public final void countEvents(EventHandle eventHandle) throws SQLException
      Description copied from interface: FbDatabase
      Counts the events occurred.
      Specified by:
      countEvents in interface FbDatabase
      Parameters:
      eventHandle - The event handle
      Throws:
      SQLException - When the count can not be done (as - for example - the event handle is of the wrong type)
    • getDatabaseInfo

      public final byte[] getDatabaseInfo(byte[] requestItems, int maxBufferLength) throws SQLException
      Description copied from interface: FbDatabase
      Performs a database info request.
      Specified by:
      getDatabaseInfo in interface FbDatabase
      Parameters:
      requestItems - Information items to request
      maxBufferLength - Maximum response buffer length to use
      Returns:
      The response buffer (note: length is the actual length of the response, not maxBufferLength
      Throws:
      SQLException - For errors retrieving the information.
    • getInfo

      public byte[] getInfo(int operation, int handle, byte[] requestItems, int maxBufferLength, WarningMessageCallback warningMessageCallback) throws SQLException
      Description copied from interface: FbWireDatabase
      Generic info request.

      The implementation does not perform handle validation nor notification of error dispatchers. Doing that is the responsibility of the caller.

      Specified by:
      getInfo in interface FbWireDatabase
      Parameters:
      operation - Operation code
      handle - Handle (db, transaction, statement, blob, etc)
      requestItems - Information items to request
      maxBufferLength - Maximum response buffer length to use
      warningMessageCallback - Callback for warnings when reading the response (can be null to use database default)
      Returns:
      The response buffer (note: length is the actual length of the response, not maxBufferLength)
      Throws:
      SQLException - For errors retrieving the information
    • initAsynchronousChannel

      public abstract FbWireAsynchronousChannel initAsynchronousChannel() throws SQLException
      Initializes the asynchronous channel (for event notification).
      Throws:
      SQLException - For errors establishing the channel, or if the channel already exists.