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 ofFbDatabase
with behavior common to the various implementations.- Since:
- 3.0
- Author:
- Mark Rotteveel
-
-
Field Summary
Fields Modifier and Type Field Description protected DatabaseListenerDispatcher
databaseListenerDispatcher
-
Fields inherited from class org.firebirdsql.gds.ng.AbstractFbAttachment
connection, exceptionListenerDispatcher
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractFbDatabase(T connection, DatatypeCoder datatypeCoder)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addDatabaseListener(DatabaseListener listener)
Adds aDatabaseListener
instance to this database.void
addWeakDatabaseListener(DatabaseListener listener)
Adds aDatabaseListener
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 withFbDatabase.createBlobForInput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer, long)
andFbDatabase.createBlobForOutput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer)
of this instance.TransactionParameterBufferImpl
createTransactionParameterBuffer()
Creates a transaction parameter buffer that is usable withFbDatabase.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 aDatabaseListener
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 interfaceFbDatabase
- Returns:
- The client connection dialect
-
getDatabaseDialect
public final short getDatabaseDialect()
- Specified by:
getDatabaseDialect
in interfaceFbDatabase
- 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 aDatabaseListener
instance to this database.- Specified by:
addDatabaseListener
in interfaceFbDatabase
- Parameters:
listener
- Database listener
-
addWeakDatabaseListener
public final void addWeakDatabaseListener(DatabaseListener listener)
Description copied from interface:FbDatabase
Adds aDatabaseListener
instance to this database using a weak reference.If the listener is already strongly referenced, this call will be ignored
- Specified by:
addWeakDatabaseListener
in interfaceFbDatabase
- Parameters:
listener
- Database listener
-
removeDatabaseListener
public final void removeDatabaseListener(DatabaseListener listener)
Description copied from interface:FbDatabase
Removes aDatabaseListener
instance from this database.- Specified by:
removeDatabaseListener
in interfaceFbDatabase
- 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 databaseDatabaseListener.detaching(FbDatabase)
andDatabaseListener.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 callsinternalDetach()
and finally notifies database listeners of database detach and removes all listeners.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfaceFbAttachment
- Throws:
java.sql.SQLException
- If not currently connected, or another problem occurred detaching.
-
getOdsMajor
public final int getOdsMajor()
- Specified by:
getOdsMajor
in interfaceFbDatabase
- 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 interfaceFbDatabase
- 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 interfaceFbDatabase
- Parameters:
requestItems
- Array of info items to requestbufferLength
- Response buffer length to useinfoProcessor
- Implementation ofInfoProcessor
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 interfaceTransactionListener
- Parameters:
transaction
-FbTransaction
that changed state
-
createBlobParameterBuffer
public BlobParameterBuffer createBlobParameterBuffer()
Description copied from interface:FbDatabase
Creates a blob parameter buffer that is usable withFbDatabase.createBlobForInput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer, long)
andFbDatabase.createBlobForOutput(FbTransaction, org.firebirdsql.gds.BlobParameterBuffer)
of this instance.- Specified by:
createBlobParameterBuffer
in interfaceFbDatabase
- Returns:
- A blob parameter buffer.
-
createTransactionParameterBuffer
public TransactionParameterBufferImpl createTransactionParameterBuffer()
Description copied from interface:FbDatabase
Creates a transaction parameter buffer that is usable withFbDatabase.startTransaction(org.firebirdsql.gds.TransactionParameterBuffer)
.- Specified by:
createTransactionParameterBuffer
in interfaceFbDatabase
- Returns:
- A transaction parameter buffer
-
getConnectionProperties
public IConnectionProperties getConnectionProperties()
- Specified by:
getConnectionProperties
in interfaceFbDatabase
- Returns:
- An immutable copy of the connection properties of this database
-
emptyRowDescriptor
public final RowDescriptor emptyRowDescriptor()
- Specified by:
emptyRowDescriptor
in interfaceFbDatabase
- Returns:
- A potentially cached empty row descriptor for this database.
-
-