Package 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, isAttached, isLockedByCurrentThread, removeExceptionListener, safelyDetach, setAttached, setDetached, setServerVersion, 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.FbAttachment

`attach, forceClose, getDatatypeCoder, getEncoding, getEncodingFactory, getNetworkTimeout, getServerVersion, isAttached, isLockedByCurrentThread, setNetworkTimeout, withLock`

### Methods inherited from interface org.firebirdsql.gds.ng.FbDatabase

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

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