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
`protected DatabaseListenerDispatcher` `databaseListenerDispatcher`

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

`connection, exceptionListenerDispatcher`

### Constructor Summary

Constructors
`protected` `AbstractFbDatabase(T connection, DatatypeCoder datatypeCoder)`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`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, forceClose, getDatatypeCoder, getEncoding, getEncodingFactory, getNetworkTimeout, 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, forceClose, getDatatypeCoder, getEncoding, getEncodingFactory, getNetworkTimeout, getServerVersion, getSynchronizationObject, isAttached, setNetworkTimeout`

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

`addExceptionListener, removeExceptionListener`

### Field Detail

#### databaseListenerDispatcher

    protected final DatabaseListenerDispatcher databaseListenerDispatcher

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