Class V10Database
- java.lang.Object
-
- org.firebirdsql.gds.ng.AbstractFbAttachment<T>
-
- org.firebirdsql.gds.ng.AbstractFbDatabase<WireDatabaseConnection>
-
- org.firebirdsql.gds.ng.wire.AbstractFbWireDatabase
-
- org.firebirdsql.gds.ng.wire.version10.V10Database
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,FbAttachment
,FbDatabase
,ExceptionListenable
,TransactionListener
,FbWireAttachment
,FbWireDatabase
- Direct Known Subclasses:
V11Database
public class V10Database extends AbstractFbWireDatabase implements FbWireDatabase
FbWireDatabase
implementation for the version 10 wire protocol.- Since:
- 3.0
- Author:
- Mark Rotteveel
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.firebirdsql.gds.ng.wire.FbWireAttachment
FbWireAttachment.AcceptPacket
-
-
Field Summary
-
Fields inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireDatabase
protocolDescriptor, wireOperations
-
Fields inherited from class org.firebirdsql.gds.ng.AbstractFbDatabase
databaseListenerDispatcher
-
Fields inherited from class org.firebirdsql.gds.ng.AbstractFbAttachment
connection, exceptionListenerDispatcher
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
V10Database(WireDatabaseConnection connection, ProtocolDescriptor descriptor)
Creates a V10Database instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
afterAttachActions()
Additional tasks to execute directly after attach operation.void
attach()
Attach to the attachment type.protected void
attachOrCreate(DatabaseParameterBuffer dpb, boolean create)
void
authReceiveResponse(FbWireAttachment.AcceptPacket acceptPacket)
Receive authentication response from the server.void
cancelOperation(int kind)
Cancels the current operation.void
createDatabase()
Creates a new database, connection remains attached to database.FbStatement
createStatement(FbTransaction transaction)
Creates a statement associated with a transactionprotected void
doReleaseObjectPacket(int operation, int objectId)
Sends - without flushing - the (release) operation and objectId.void
dropDatabase()
Drops (and deletes) the currently attached database.void
executeImmediate(java.lang.String statementText, FbTransaction transaction)
Performs an execute immediate of a statement.BlrCalculator
getBlrCalculator()
protected Encoding
getFilenameEncoding(DatabaseParameterBuffer dpb)
Gets theEncoding
to use for the database filename.protected byte[]
getTransactionIdBuffer(long transactionId)
FbWireAsynchronousChannel
initAsynchronousChannel()
Initializes the asynchronous channel (for event notification).protected void
internalDetach()
Actual implementation of database detach.protected void
processAttachOrCreateResponse(GenericResponse genericResponse)
Processes the response from the server to the attach or create operation.protected void
processReleaseObjectResponse(Response response)
Process the release object responseFbTransaction
reconnectTransaction(long transactionId)
Reconnects a prepared transaction.void
releaseObject(int operation, int objectId)
Release object.protected void
sendAttachOrCreateToBuffer(DatabaseParameterBuffer dpb, boolean create)
Sends the buffer for op_attach or op_createFbWireTransaction
startTransaction(TransactionParameterBuffer tpb)
Creates and starts a transaction.-
Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireDatabase
cancelEvent, checkAttached, checkConnected, closeConnection, consumePackets, countEvents, createBlobForInput, createBlobForOutput, createEventHandle, enqueueDeferredAction, finalize, forceClose, getDatabaseInfo, getHandle, getInfo, getXdrIn, getXdrOut, getXdrStreamAccess, isAttached, queueEvent, readGenericResponse, readResponse, readSqlResponse, setNetworkTimeout
-
Methods inherited from class org.firebirdsql.gds.ng.AbstractFbDatabase
addDatabaseListener, addWeakDatabaseListener, close, createBlobParameterBuffer, createTransactionParameterBuffer, emptyRowDescriptor, getActiveTransactionCount, getConnectionDialect, getConnectionProperties, getDatabaseDialect, getDatabaseInfo, getDatabaseInformationProcessor, getDatabaseWarningCallback, getDescribeDatabaseInfoBlock, getOdsMajor, getOdsMinor, getParameterDescriptionInfoRequestItems, getStatementInfoRequestItems, removeDatabaseListener, setDatabaseDialect, setOdsMajor, setOdsMinor, transactionAdded, transactionStateChanged
-
Methods inherited from class org.firebirdsql.gds.ng.AbstractFbAttachment
addExceptionListener, getDatatypeCoder, getEncoding, getEncodingFactory, getNetworkTimeout, getServerVersion, getServerVersionInformation, isLockedByCurrentThread, removeExceptionListener, safelyDetach, setAttached, setDetached, setServerVersion, withLock
-
Methods inherited from class java.lang.Object
clone, equals, 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
close, forceClose, getDatatypeCoder, getEncoding, getEncodingFactory, getNetworkTimeout, getServerVersion, isAttached, isLockedByCurrentThread, setNetworkTimeout, withLock
-
Methods inherited from interface org.firebirdsql.gds.ng.FbDatabase
addDatabaseListener, addWeakDatabaseListener, cancelEvent, countEvents, createBlobForInput, createBlobForInput, createBlobForInput, createBlobForOutput, createBlobForOutput, createBlobForOutput, createBlobParameterBuffer, createEventHandle, createTransactionParameterBuffer, emptyRowDescriptor, getConnectionDialect, getConnectionProperties, getDatabaseDialect, getDatabaseInfo, getDatabaseInfo, getHandle, getOdsMajor, getOdsMinor, queueEvent, removeDatabaseListener
-
Methods inherited from interface org.firebirdsql.gds.ng.wire.FbWireAttachment
getXdrStreamAccess, readGenericResponse
-
Methods inherited from interface org.firebirdsql.gds.ng.wire.FbWireDatabase
consumePackets, enqueueDeferredAction, getInfo, readResponse, readSqlResponse
-
-
-
-
Constructor Detail
-
V10Database
protected V10Database(WireDatabaseConnection connection, ProtocolDescriptor descriptor)
Creates a V10Database 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 Detail
-
attach
public final void attach() throws java.sql.SQLException
Description copied from interface:FbAttachment
Attach to the attachment type.- Specified by:
attach
in interfaceFbAttachment
- Throws:
java.sql.SQLException
-
attachOrCreate
protected final void attachOrCreate(DatabaseParameterBuffer dpb, boolean create) throws java.sql.SQLException
- Parameters:
dpb
- Database parameter buffercreate
-true
create database,false
only attach- Throws:
java.sql.SQLException
- For errors during attach or create
-
sendAttachOrCreateToBuffer
protected final void sendAttachOrCreateToBuffer(DatabaseParameterBuffer dpb, boolean create) throws java.sql.SQLException, java.io.IOException
Sends the buffer for op_attach or op_create- Parameters:
dpb
- Database parameter buffercreate
-true
create database,false
only attach- Throws:
java.sql.SQLException
- If the connection is not openjava.io.IOException
- For errors writing to the connection
-
getFilenameEncoding
protected Encoding getFilenameEncoding(DatabaseParameterBuffer dpb)
Gets theEncoding
to use for the database filename.- Parameters:
dpb
- Database parameter buffer- Returns:
- Encoding
-
processAttachOrCreateResponse
protected final void processAttachOrCreateResponse(GenericResponse genericResponse)
Processes the response from the server to the attach or create operation.- Parameters:
genericResponse
- GenericResponse received from the server.
-
afterAttachActions
protected final void afterAttachActions() throws java.sql.SQLException
Additional tasks to execute directly after attach operation.Implementation retrieves database information like dialect ODS and server version.
- Throws:
java.sql.SQLException
- For errors reading or writing database information.
-
internalDetach
protected final void internalDetach() throws java.sql.SQLException
Description copied from class:AbstractFbDatabase
Actual implementation of database detach.Implementations of this method should only be called from
AbstractFbDatabase.close()
, and should not notify database listeners of the databaseDatabaseListener.detaching(FbDatabase)
andDatabaseListener.detached(FbDatabase)
events.- Specified by:
internalDetach
in classAbstractFbDatabase<WireDatabaseConnection>
- Throws:
java.sql.SQLException
-
createDatabase
public final void createDatabase() throws java.sql.SQLException
Description copied from interface:FbDatabase
Creates a new database, connection remains attached to database.- Specified by:
createDatabase
in interfaceFbDatabase
- Throws:
java.sql.SQLException
-
dropDatabase
public final void dropDatabase() throws java.sql.SQLException
Description copied from interface:FbDatabase
Drops (and deletes) the currently attached database.- Specified by:
dropDatabase
in interfaceFbDatabase
- Throws:
java.sql.SQLException
-
startTransaction
public final FbWireTransaction startTransaction(TransactionParameterBuffer tpb) throws java.sql.SQLException
Description copied from interface:FbDatabase
Creates and starts a transaction.- Specified by:
startTransaction
in interfaceFbDatabase
- Parameters:
tpb
- TransactionParameterBuffer with the required transaction options- Returns:
- FbTransaction
- Throws:
java.sql.SQLException
-
reconnectTransaction
public final FbTransaction reconnectTransaction(long transactionId) throws java.sql.SQLException
Description copied from interface:FbDatabase
Reconnects a prepared transaction.Reconnecting transactions is only allowed for transactions in limbo (prepared, but not committed or rolled back).
- Specified by:
reconnectTransaction
in interfaceFbDatabase
- Parameters:
transactionId
- The id of the transaction to reconnect.- Returns:
- FbTransaction
- Throws:
java.sql.SQLException
- For errors reconnecting the transaction
-
getTransactionIdBuffer
protected byte[] getTransactionIdBuffer(long transactionId)
-
createStatement
public final FbStatement createStatement(FbTransaction transaction) throws java.sql.SQLException
Description copied from interface:FbDatabase
Creates a statement associated with a transaction- Specified by:
createStatement
in interfaceFbDatabase
- Parameters:
transaction
- FbTransaction to associate with this statement (can benull
)- Returns:
- FbStatement
- Throws:
java.sql.SQLException
-
cancelOperation
public void cancelOperation(int kind) throws java.sql.SQLException
Description copied from interface:FbDatabase
Cancels the current operation.The cancellation types are:
ISCConstants.fb_cancel_disable
- disables execution of fb_cancel_raise requests for the specified attachment. It can be useful when your program is executing critical operations, such as cleanup, for example.
ISCConstants.fb_cancel_enable
- re-enables delivery of a cancel execution that was previously disabled. The 'cancel' state is effective by default, being initialized when the attachment is created.
ISCConstants.fb_cancel_raise
- cancels any activity related to the database handle. The effect will be that, as soon as possible, the engine will try to stop the running request and return an exception to the caller
ISCConstants.fb_cancel_abort
- forcibly close client side of connection. Useful if you need to close a connection urgently. All active transactions will be rolled back by the server. 'Success' is always returned to the application. Use with care!
- Specified by:
cancelOperation
in interfaceFbDatabase
- Parameters:
kind
- Cancellation type- Throws:
java.sql.SQLException
- For errors cancelling, or if the cancel operation is not supported.
-
executeImmediate
public final void executeImmediate(java.lang.String statementText, FbTransaction transaction) throws java.sql.SQLException
Description copied from interface:FbDatabase
Performs an execute immediate of a statement.A call to this method is the equivalent of a
isc_dsql_execute_immediate()
without parameters.- Specified by:
executeImmediate
in interfaceFbDatabase
- Parameters:
statementText
- Statement texttransaction
- Transaction (null
only allowed if database is not attached!)- Throws:
java.sql.SQLException
- For errors executing the statement, or iftransaction
isnull
when the database is attached or notnull
when the database is not attached
-
releaseObject
public void releaseObject(int operation, int objectId) throws java.sql.SQLException
Description copied from interface:FbWireDatabase
Release object.- Specified by:
releaseObject
in interfaceFbWireDatabase
- Parameters:
operation
- OperationobjectId
- ID of the object to release- Throws:
java.sql.SQLException
-
initAsynchronousChannel
public final FbWireAsynchronousChannel initAsynchronousChannel() throws java.sql.SQLException
Description copied from class:AbstractFbWireDatabase
Initializes the asynchronous channel (for event notification).- Specified by:
initAsynchronousChannel
in classAbstractFbWireDatabase
- Throws:
java.sql.SQLException
- For errors establishing the channel, or if the channel already exists.
-
doReleaseObjectPacket
protected final void doReleaseObjectPacket(int operation, int objectId) throws java.io.IOException, java.sql.SQLException
Sends - without flushing - the (release) operation and objectId.- Parameters:
operation
- OperationobjectId
- Id of the object to release- Throws:
java.io.IOException
- For errors writing to the connectionjava.sql.SQLException
- If the database connection is not available
-
processReleaseObjectResponse
protected final void processReleaseObjectResponse(Response response)
Process the release object response- Parameters:
response
- The response object
-
getBlrCalculator
public final BlrCalculator getBlrCalculator()
- Specified by:
getBlrCalculator
in interfaceFbWireDatabase
- Returns:
- The
BlrCalculator
instance for this database.
-
authReceiveResponse
public final void authReceiveResponse(FbWireAttachment.AcceptPacket acceptPacket) throws java.io.IOException, java.sql.SQLException
Description copied from interface:FbWireAttachment
Receive authentication response from the server.This method is only relevant for protocol V13 or higher.
- Specified by:
authReceiveResponse
in interfaceFbWireAttachment
- Parameters:
acceptPacket
- Packet withop_cond_accept
data, ornull
when the data should be read from the connection.- Throws:
java.io.IOException
- For errors reading the response from the connection.java.sql.SQLException
- For errors returned from the server, or when attempting to read.
-
-