org.firebirdsql.gds.ng

## Class AbstractFbDatabase<T extends AbstractConnection<IConnectionProperties,? extends FbDatabase>>

- java.lang.Object
- - org.firebirdsql.gds.ng.AbstractFbAttachment<T>
  - - org.firebirdsql.gds.ng.AbstractFbDatabase<T>

- All Implemented Interfaces:
    java.lang.AutoCloseable, FbAttachment, FbDatabase, ExceptionListenable, TransactionListener
  Direct Known Subclasses:
    AbstractFbWireDatabase, JnaDatabase

      public abstract class AbstractFbDatabase<T extends AbstractConnection<IConnectionProperties,? extends FbDatabase>>
      extends AbstractFbAttachment<T>
      implements FbDatabase, TransactionListener

  Abstract implementation of `FbDatabase` with behavior common to the various implementations.
  Since:
    3.0
  Author:
    Mark Rotteveel

- - ### Field Summary

    - ### Fields inherited from class org.firebirdsql.gds.ng.AbstractFbAttachment

      `connection, exceptionListenerDispatcher`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractFbDatabase(T connection, DatatypeCoder datatypeCoder)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addDatabaseListener(DatabaseListener listener)` Adds a `DatabaseListener` instance to this database.
    `void` | `addWeakDatabaseListener(DatabaseListener listener)` Adds a `DatabaseListener` instance to this database using a weak reference.
    `void` | `close()` Detaches and closes the connection.
    `BlobParameterBuffer` | `createBlobParameterBuffer()` Creates a blob parameter buffer that is usable with `FbDatabase.createBlobForInput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer, long)` and `FbDatabase.createBlobForOutput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer)` of this instance.
    `TransactionParameterBufferImpl` | `createTransactionParameterBuffer()` Creates a transaction parameter buffer that is usable with `FbDatabase.startTransaction(org.firebirdsql.gds.TransactionParameterBuffer)`.
    `RowDescriptor` | `emptyRowDescriptor()`
    `int` | `getActiveTransactionCount()`
    `short` | `getConnectionDialect()`
    `IConnectionProperties` | `getConnectionProperties()`
    `short` | `getDatabaseDialect()`
    `<R> R` | `getDatabaseInfo(byte[] requestItems, int bufferLength, InfoProcessor<R> infoProcessor)` Request database info.
    `protected InfoProcessor<FbDatabase>` | `getDatabaseInformationProcessor()`
    `WarningMessageCallback` | `getDatabaseWarningCallback()`
    `protected byte[]` | `getDescribeDatabaseInfoBlock()`
    `int` | `getOdsMajor()`
    `int` | `getOdsMinor()`
    `byte[]` | `getParameterDescriptionInfoRequestItems()`
    `byte[]` | `getStatementInfoRequestItems()`
    `protected abstract void` | `internalDetach()` Actual implementation of database detach.
    `void` | `removeDatabaseListener(DatabaseListener listener)` Removes a `DatabaseListener` instance from this database.
    `protected void` | `setDatabaseDialect(short dialect)` Sets the dialect of the database.
    `protected void` | `setOdsMajor(int odsMajor)` Sets the ODS (On Disk Structure) major version of the database associated with this connection.
    `protected void` | `setOdsMinor(int odsMinor)` Sets the ODS (On Disk Structure) minor version of the database associated with this connection.
    `protected void` | `transactionAdded(FbTransaction transaction)` Called when a transaction is added by the database.
    `void` | `transactionStateChanged(FbTransaction transaction, TransactionState newState, TransactionState previousState)` Signals that the transaction state changed.

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

      `addExceptionListener, checkConnected, createDbCryptCallback, getDatatypeCoder, getEncoding, getEncodingFactory, getServerVersion, getServerVersionInformation, getSynchronizationObject, isAttached, removeExceptionListener, safelyDetach, setAttached, setDetached, setServerVersion`

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

      `cancelEvent, cancelOperation, countEvents, createBlobForInput, createBlobForOutput, createDatabase, createEventHandle, createStatement, dropDatabase, executeImmediate, getDatabaseInfo, getHandle, queueEvent, reconnectTransaction, startTransaction`

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

      `attach, getDatatypeCoder, getEncoding, getEncodingFactory, getServerVersion, getSynchronizationObject, isAttached`

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

      `addExceptionListener, removeExceptionListener`

- - ### Constructor Detail

    - #### AbstractFbDatabase

          protected AbstractFbDatabase(T connection,
                                       DatatypeCoder datatypeCoder)

  - ### Method Detail

    - #### getDatabaseWarningCallback

          public final WarningMessageCallback getDatabaseWarningCallback()

      Returns:
        The warning callback for this database.

    - #### getActiveTransactionCount

          public final int getActiveTransactionCount()

      Returns:
        Number of active (not prepared or committed/rolled back) transactions

    - #### transactionAdded

          protected final void transactionAdded(FbTransaction transaction)

      Called when a transaction is added by the database.

      Only this `AbstractFbDatabase` instance should call this method.

    - #### getConnectionDialect

          public final short getConnectionDialect()

      Specified by:
        `getConnectionDialect` in interface `FbDatabase`
      Returns:
        The client connection dialect

    - #### getDatabaseDialect

          public final short getDatabaseDialect()

      Specified by:
        `getDatabaseDialect` in interface `FbDatabase`
      Returns:
        The database dialect

    - #### setDatabaseDialect

          protected final void setDatabaseDialect(short dialect)

      Sets the dialect of the database.

      This method should only be called by this instance.

      Parameters:
        `dialect` - Dialect of the database/connection

    - #### addDatabaseListener

          public final void addDatabaseListener(DatabaseListener listener)

      Description copied from interface: `FbDatabase`
      Adds a `DatabaseListener` instance to this database.
      Specified by:
        `addDatabaseListener` in interface `FbDatabase`
      Parameters:
        `listener` - Database listener

    - #### addWeakDatabaseListener

          public final void addWeakDatabaseListener(DatabaseListener listener)

      Description copied from interface: `FbDatabase`
      Adds a `DatabaseListener` instance to this database using a weak reference.

      If the listener is already strongly referenced, this call will be ignored

      Specified by:
        `addWeakDatabaseListener` in interface `FbDatabase`
      Parameters:
        `listener` - Database listener

    - #### removeDatabaseListener

          public final void removeDatabaseListener(DatabaseListener listener)

      Description copied from interface: `FbDatabase`
      Removes a `DatabaseListener` instance from this database.
      Specified by:
        `removeDatabaseListener` in interface `FbDatabase`
      Parameters:
        `listener` - Database Listener

    - #### internalDetach

          protected abstract void internalDetach()
                                          throws java.sql.SQLException

      Actual implementation of database detach.

      Implementations of this method should only be called from `close()`, and should not notify database listeners of the database `DatabaseListener.detaching(FbDatabase)` and `DatabaseListener.detached(FbDatabase)` events.

      Throws:
        `java.sql.SQLException`

    - #### close

          public final void close()
                           throws java.sql.SQLException

      Detaches and closes the connection.

      Implementation note: Calls `AbstractFbAttachment.checkConnected()` and notifies database listeners of the detaching event, then calls `internalDetach()` and finally notifies database listeners of database detach and removes all listeners.

      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in interface `FbAttachment`
      Throws:
        `java.sql.SQLException` - If not currently connected, or another problem occurred detaching.

    - #### getOdsMajor

          public final int getOdsMajor()

      Specified by:
        `getOdsMajor` in interface `FbDatabase`
      Returns:
        ODS major version

    - #### setOdsMajor

          protected final void setOdsMajor(int odsMajor)

      Sets the ODS (On Disk Structure) major version of the database associated with this connection.

      This method should only be called by this instance.

      Parameters:
        `odsMajor` - ODS major version

    - #### getOdsMinor

          public final int getOdsMinor()

      Specified by:
        `getOdsMinor` in interface `FbDatabase`
      Returns:
        ODS minor version

    - #### setOdsMinor

          protected final void setOdsMinor(int odsMinor)

      Sets the ODS (On Disk Structure) minor version of the database associated with this connection.

      This method should only be called by this instance.

      Parameters:
        `odsMinor` - The ODS minor version

    - #### getStatementInfoRequestItems

          public final byte[] getStatementInfoRequestItems()

      Returns:
        The (full) statement info request items.
      See Also:
        `getParameterDescriptionInfoRequestItems()`

    - #### getParameterDescriptionInfoRequestItems

          public final byte[] getParameterDescriptionInfoRequestItems()

      Returns:
        The `isc_info_sql_describe_vars` info request items.
      See Also:
        `getStatementInfoRequestItems()`

    - #### getDatabaseInfo

          public final <R> R getDatabaseInfo(byte[] requestItems,
                                             int bufferLength,
                                             InfoProcessor<R> infoProcessor)
                                      throws java.sql.SQLException

      Description copied from interface: `FbDatabase`
      Request database info.
      Specified by:
        `getDatabaseInfo` in interface `FbDatabase`
      Parameters:
        `requestItems` - Array of info items to request
        `bufferLength` - Response buffer length to use
        `infoProcessor` - Implementation of `InfoProcessor` to transform the info response
      Returns:
        Transformed info response of type T
      Throws:
        `java.sql.SQLException` - For errors retrieving or transforming the response.

    - #### getDescribeDatabaseInfoBlock

          protected byte[] getDescribeDatabaseInfoBlock()

    - #### getDatabaseInformationProcessor

          protected InfoProcessor<FbDatabase> getDatabaseInformationProcessor()

    - #### transactionStateChanged

          public final void transactionStateChanged(FbTransaction transaction,
                                                    TransactionState newState,
                                                    TransactionState previousState)

      Description copied from interface: `TransactionListener`
      Signals that the transaction state changed.
      Specified by:
        `transactionStateChanged` in interface `TransactionListener`
      Parameters:
        `transaction` - `FbTransaction` that changed state

    - #### createBlobParameterBuffer

          public BlobParameterBuffer createBlobParameterBuffer()

      Description copied from interface: `FbDatabase`
      Creates a blob parameter buffer that is usable with `FbDatabase.createBlobForInput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer, long)` and `FbDatabase.createBlobForOutput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer)` of this instance.
      Specified by:
        `createBlobParameterBuffer` in interface `FbDatabase`
      Returns:
        A blob parameter buffer.

    - #### createTransactionParameterBuffer

          public TransactionParameterBufferImpl createTransactionParameterBuffer()

      Description copied from interface: `FbDatabase`
      Creates a transaction parameter buffer that is usable with `FbDatabase.startTransaction(org.firebirdsql.gds.TransactionParameterBuffer)`.
      Specified by:
        `createTransactionParameterBuffer` in interface `FbDatabase`
      Returns:
        A transaction parameter buffer

    - #### getConnectionProperties

          public IConnectionProperties getConnectionProperties()

      Specified by:
        `getConnectionProperties` in interface `FbDatabase`
      Returns:
        An immutable copy of the connection properties of this database

    - #### emptyRowDescriptor

          public final RowDescriptor emptyRowDescriptor()

      Specified by:
        `emptyRowDescriptor` in interface `FbDatabase`
      Returns:
        A potentially cached empty row descriptor for this database.

Copyright © 2001-2021 Jaybird (Firebird JDBC/JCA) team. All rights reserved.