Class DatabaseAccessor
- java.lang.Object
-
- org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor
-
- org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor
-
- All Implemented Interfaces:
java.lang.Cloneable,Accessor
public class DatabaseAccessor extends DatasourceAccessor
INTERNAL: DatabaseAccessor is private to EclipseLink. It encapsulates low level database operations (such as executing SQL and reading data by row). Database accessor defines a protocol by which EclipseLink may invoke these operations.DatabaseAccessor also defines a single reference through which all configuration dependent behavior may be invoked.
DabaseAccessor implements the following behavior.
- Connect and disconnect from the database.
- Execute SQL statements on the database, returning results.
- Handle auto-commit and transactions.
- Provision of database platform specific type names.
- Creation and deletion of schema objects.
- Since:
- TOPLink/Java 1.0
- See Also:
DatabasePlatform
-
-
Field Summary
Fields Modifier and Type Field Description protected BatchWritingMechanismactiveBatchWritingMechanismThis attribute will be used to store the currently active Batch Mechanismprotected DynamicSQLBatchWritingMechanismdynamicSQLMechanismThese two attributes store the available BatchWritingMechanisms.protected java.sql.StatementdynamicStatementPERF: Cache the statement object for dynamic SQL execution.protected booleanisDynamicStatementInUseprotected LOBValueWriterlobWriterprotected java.sql.DatabaseMetaDatametaDataCache of the connection's java.sql.DatabaseMetaDataprotected ParameterizedSQLBatchWritingMechanismparameterizedMechanismstatic booleanshouldUseDynamicStatementsPERF: Backdoor to disabling dynamic statements.protected java.util.Map<java.lang.String,java.sql.Statement>statementCacheStores statement handles for common used prepared statements.-
Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor
callCount, currentSession, customizer, datasourceConnection, isConnected, isInTransaction, isValid, login, platform, pool, possibleFailure, READ_STATEMENTS_COUNT_PROPERTY, readStatementsCount, sequencingCallback, shouldCheckConnection, STOREDPROCEDURE_STATEMENTS_COUNT_PROPERTY, storedProcedureStatementsCount, usesExternalConnectionPooling, WRITE_STATEMENTS_COUNT_PROPERTY, writeStatementsCount
-
-
Constructor Summary
Constructors Constructor Description DatabaseAccessor()DatabaseAccessor(java.lang.Object connection)Create a database accessor with the given connection.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.sql.StatementallocateDynamicStatement(java.sql.Connection connection)Allocate a statement for dynamic SQL execution.voidbasicBeginTransaction(AbstractSession session)Begin a transaction on the database.voidbasicCommitTransaction(AbstractSession session)Commit a transaction on the database.java.lang.ObjectbasicExecuteCall(Call call, AbstractRecord translationRow, AbstractSession session)Execute the call.java.lang.ObjectbasicExecuteCall(Call call, AbstractRecord translationRow, AbstractSession session, boolean batch)Execute the call.voidbasicRollbackTransaction(AbstractSession session)Rollback a transaction on the database.protected voidbuildConnectLog(AbstractSession session)If logging is turned on and the JDBC implementation supports meta data then display connection info.AbstractRecordbuildOutputRow(java.sql.CallableStatement statement, DatabaseCall call, AbstractSession session)Build a row from the output parameters of a sp call.java.util.VectorbuildSortedFields(java.util.Vector fields, java.sql.ResultSet resultSet, AbstractSession session)Return the field sorted in the correct order corresponding to the result set.protected java.util.VectorbuildThreadCursoredResult(DatabaseCall dbCall, java.sql.ResultSet resultSet, java.sql.Statement statement, java.sql.ResultSetMetaData metaData, AbstractSession session)This allows for the rows to be fetched concurrently to the objects being built.protected voidcheckTransactionIsolation(AbstractSession session)Check to see if the transaction isolation needs to be set for the newly created connection.voidclearStatementCache(AbstractSession session)Flush the statement cache.java.lang.Objectclone()Clone the accessor.voidcloseConnection()Close the accessor's connection.voidcloseCursor(java.sql.ResultSet resultSet, AbstractSession session)Close the result set of the cursored stream.voidcloseDatasourceConnection()Close the connection.voidcloseStatement(java.sql.Statement statement, AbstractSession session, DatabaseCall call)INTERNAL: Closes a PreparedStatement (which is supposed to close it's current resultSet).voidcommitTransaction(AbstractSession session)Commit a transaction on the database.protected voidconnectInternal(Login login, AbstractSession session)Connect to the database.AbstractRecordcursorRetrieveNextRow(java.util.Vector fields, java.sql.ResultSet resultSet, AbstractSession session)Advance the result set and return a Record populated with values from the next valid row in the result set.AbstractRecordcursorRetrievePreviousRow(java.util.Vector fields, java.sql.ResultSet resultSet, AbstractSession session)Advance the result set and return a DatabaseRow populated with values from the next valid row in the result set.voiddisconnect(AbstractSession session)Disconnect from the datasource.booleanexecute(DatabaseCall call, java.sql.Statement statement, AbstractSession session)Execute the statement.protected voidexecuteBatchedStatement(java.sql.PreparedStatement statement, AbstractSession session)Execute the EclipseLink dynamically batched/concatenated statement.java.lang.ObjectexecuteCall(Call call, AbstractRecord translationRow, AbstractSession session)Execute the call.java.lang.ObjectexecuteDirectNoSelect(java.sql.Statement statement, DatabaseCall call, AbstractSession session)Execute the statement.protected intexecuteJDK12BatchStatement(java.sql.Statement statement, DatabaseCall dbCall, AbstractSession session, boolean isStatementPrepared)Execute the batched statement through the JDBC2 API.protected java.lang.ObjectexecuteNoSelect(DatabaseCall call, java.sql.Statement statement, AbstractSession session)Execute the statement.java.sql.ResultSetexecuteSelect(DatabaseCall call, java.sql.Statement statement, AbstractSession session)Execute the statement.protected AbstractRecordfetchRow(java.util.Vector fields, java.sql.ResultSet resultSet, java.sql.ResultSetMetaData metaData, AbstractSession session)Return a new DatabaseRow.AbstractRecordfetchRow(java.util.Vector fields, DatabaseField[] fieldsArray, java.sql.ResultSet resultSet, java.sql.ResultSetMetaData metaData, AbstractSession session)Return a new DatabaseRow.voidflushSelectCalls(AbstractSession session)Execute any deferred select calls stored in the LOBValueWriter instance.BatchWritingMechanismgetActiveBatchWritingMechanism(AbstractSession session)INTERNAL: This method is used internally to return the active batch writing mechanism to batch the statementjava.util.VectorgetColumnInfo(java.lang.String catalog, java.lang.String schema, java.lang.String tableName, java.lang.String columnName, AbstractSession session)Get a description of table columns available in a catalog.protected java.util.VectorgetColumnNames(java.sql.ResultSet resultSet, AbstractSession session)Return the column names from a result sets meta data as a vector of DatabaseFields.java.sql.ConnectiongetConnection()Return the receiver's connection to its data source.java.sql.DatabaseMetaDatagetConnectionMetaData()return the cached metaDataprotected DynamicSQLBatchWritingMechanismgetDynamicSQLMechanism()Lazy init the dynamic SQL mechanism.LOBValueWritergetLOBWriter()Return the LOBValueWriter instance.java.lang.ObjectgetObject(java.sql.ResultSet resultSet, DatabaseField field, java.sql.ResultSetMetaData metaData, int columnNumber, DatabasePlatform platform, boolean optimizeData, AbstractSession session)Return an object retrieved from resultSet with the getObject() method.protected java.lang.ObjectgetObjectThroughOptimizedDataConversion(java.sql.ResultSet resultSet, DatabaseField field, int type, int columnNumber, DatabasePlatform platform, AbstractSession session)Handle the conversion into java optimally through calling the direct type API.protected ParameterizedSQLBatchWritingMechanismgetParameterizedMechanism()Lazy init the parameterized SQL mechanism.DatabasePlatformgetPlatform()Return the platform.protected java.util.Map<java.lang.String,java.sql.Statement>getStatementCache()The statement cache stores a fixed sized number of prepared statements.java.util.VectorgetTableInfo(java.lang.String catalog, java.lang.String schema, java.lang.String tableName, java.lang.String[] types, AbstractSession session)Get a description of tables available in a catalog.protected booleanhasStatementCache()Return if the accessor has any cached statements.static booleanisBlob(int type)Return if the JDBC type is a binary type such as blob.static booleanisClob(int type)Return if the JDBC type is a large character type such as clob.booleanisDatasourceConnected()Return true if the receiver is currently connected to a data source.booleanisDynamicStatementInUse()Return the cached statement for dynamic SQL execution is in use.protected booleanisInBatchWritingMode(AbstractSession session)Return the batch writing mode.voidpopulateRow(DatabaseField[] fieldsArray, java.lang.Object[] values, java.sql.ResultSet resultSet, java.sql.ResultSetMetaData metaData, AbstractSession session, int startIndex, int endIndex)java.sql.PreparedStatementprepareStatement(java.lang.String sql, AbstractSession session, boolean callable)Prepare the SQL statement for the call.java.sql.StatementprepareStatement(DatabaseCall call, AbstractSession session)Prepare the SQL statement for the call.java.sql.StatementprepareStatement(DatabaseCall call, AbstractSession session, boolean unwrapConnection)Prepare the SQL statement for the call.DatabaseExceptionprocessExceptionForCommError(AbstractSession session, java.sql.SQLException exception, Call call)This method is used to process an SQL exception and determine if the exception should be passed on for further processing.java.lang.ObjectprocessResultSet(java.sql.ResultSet resultSet, DatabaseCall call, java.sql.Statement statement, AbstractSession session)Fetch all the rows from the result set.protected voidreconnect(AbstractSession session)Attempt to save some of the cost associated with getting a fresh connection.voidreleaseStatement(java.sql.Statement statement, java.lang.String sqlString, DatabaseCall call, AbstractSession session)Release the statement through closing it or putting it back in the statement cache.protected voidresetStatementFromCall(java.sql.Statement statement, DatabaseCall call)Reset the Query Timeout, Max Rows, Resultset fetch size on the Statement if the DatabaseCall has values which differ from the default settings.voidrollbackTransaction(AbstractSession session)Rollback a transaction on the database.voidsetActiveBatchWritingMechanism(BatchWritingMechanism mechanism)INTERNAL: This method is used to set the active Batch Mechanism on the accessor.voidsetActiveBatchWritingMechanismToDynamicSQL()INTERNAL: This method is used to set the active Batch Mechanism on the accessor.voidsetActiveBatchWritingMechanismToParameterizedSQL()INTERNAL: This method is used to set the active Batch Mechanism on the accessor.voidsetDatasourcePlatform(DatasourcePlatform platform)Set the platform.voidsetIsDynamicStatementInUse(boolean isDynamicStatementInUse)Set if the cached statement for dynamic SQL execution is in use.protected voidsetStatementCache(java.util.Hashtable statementCache)The statement cache stores a fixed sized number of prepared statements.protected java.util.VectorsortFields(java.util.Vector fields, java.util.Vector columnNames)This method will sort the fields in correct order based on the column names.java.lang.StringtoString()voidwritesCompleted(AbstractSession session)This method will be called after a series of writes have been issued to mark where a particular set of writes has completed.-
Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor
beginTransaction, closeJTSConnection, connect, createCustomizer, decrementCallCount, getCallCount, getDatasourceConnection, getDatasourcePlatform, getLogin, getPool, getReadStatementsCount, getSequencingCallback, getStoredProcedureStatementsCount, getWriteStatementsCount, incrementCallCount, isConnected, isInTransaction, isPossibleFailure, isValid, reestablishConnection, reestablishCustomizer, releaseCustomizer, releaseCustomizer, reset, setCallCount, setCustomizer, setDatasourceConnection, setIsConnected, setIsInTransaction, setIsValid, setLogin, setPool, setPossibleFailure, usesExternalConnectionPooling, usesExternalTransactionController
-
-
-
-
Field Detail
-
shouldUseDynamicStatements
public static boolean shouldUseDynamicStatements
PERF: Backdoor to disabling dynamic statements. Reverts to old prepared statement usage if set.
-
statementCache
protected java.util.Map<java.lang.String,java.sql.Statement> statementCache
Stores statement handles for common used prepared statements.
-
metaData
protected java.sql.DatabaseMetaData metaData
Cache of the connection's java.sql.DatabaseMetaData
-
activeBatchWritingMechanism
protected BatchWritingMechanism activeBatchWritingMechanism
This attribute will be used to store the currently active Batch Mechanism
-
dynamicSQLMechanism
protected DynamicSQLBatchWritingMechanism dynamicSQLMechanism
These two attributes store the available BatchWritingMechanisms. We sacrifice a little space to prevent the work involved in recreating these objects each time a different type of SQL statement is executed. Depending on user behavior we may want to review this.
-
parameterizedMechanism
protected ParameterizedSQLBatchWritingMechanism parameterizedMechanism
-
lobWriter
protected LOBValueWriter lobWriter
-
dynamicStatement
protected java.sql.Statement dynamicStatement
PERF: Cache the statement object for dynamic SQL execution.
-
isDynamicStatementInUse
protected boolean isDynamicStatementInUse
-
-
Method Detail
-
getDynamicSQLMechanism
protected DynamicSQLBatchWritingMechanism getDynamicSQLMechanism()
Lazy init the dynamic SQL mechanism.
-
getParameterizedMechanism
protected ParameterizedSQLBatchWritingMechanism getParameterizedMechanism()
Lazy init the parameterized SQL mechanism.
-
flushSelectCalls
public void flushSelectCalls(AbstractSession session)
Execute any deferred select calls stored in the LOBValueWriter instance. This method will typically be called by the CallQueryMechanism object. Bug 2804663.- Specified by:
flushSelectCallsin interfaceAccessor- Overrides:
flushSelectCallsin classDatasourceAccessor- See Also:
LOBValueWriter,DatasourceCallQueryMechanism.insertObject()
-
getLOBWriter
public LOBValueWriter getLOBWriter()
Return the LOBValueWriter instance. Lazily initialize the instance. Bug 2804663.- See Also:
LOBValueWriter
-
allocateDynamicStatement
public java.sql.Statement allocateDynamicStatement(java.sql.Connection connection) throws java.sql.SQLExceptionAllocate a statement for dynamic SQL execution. Either return the cached dynamic statement, or a new statement. This statement must be released after execution.- Throws:
java.sql.SQLException
-
isDynamicStatementInUse
public boolean isDynamicStatementInUse()
Return the cached statement for dynamic SQL execution is in use. Used to handle concurrency for the dynamic statement, this method must only be called from within a synchronized method/block.
-
setDatasourcePlatform
public void setDatasourcePlatform(DatasourcePlatform platform)
Set the platform. This should be set to the session's platform, not the connections which may not be configured correctly.- Overrides:
setDatasourcePlatformin classDatasourceAccessor
-
setIsDynamicStatementInUse
public void setIsDynamicStatementInUse(boolean isDynamicStatementInUse)
Set if the cached statement for dynamic SQL execution is in use. Used to handle concurrency for the dynamic statement.
-
basicBeginTransaction
public void basicBeginTransaction(AbstractSession session) throws DatabaseException
Begin a transaction on the database. This means toggling the auto-commit option.- Specified by:
basicBeginTransactionin classDatasourceAccessor- Throws:
DatabaseException
-
buildConnectLog
protected void buildConnectLog(AbstractSession session)
If logging is turned on and the JDBC implementation supports meta data then display connection info.- Specified by:
buildConnectLogin classDatasourceAccessor
-
buildOutputRow
public AbstractRecord buildOutputRow(java.sql.CallableStatement statement, DatabaseCall call, AbstractSession session) throws DatabaseException
Build a row from the output parameters of a sp call.- Throws:
DatabaseException
-
buildSortedFields
public java.util.Vector buildSortedFields(java.util.Vector fields, java.sql.ResultSet resultSet, AbstractSession session) throws DatabaseExceptionReturn the field sorted in the correct order corresponding to the result set. This is used for cursored selects where custom sql was provided. If the fields passed in are null, this means that the field are not known and should be built from the column names. This case occurs for DataReadQuery's.- Throws:
DatabaseException
-
connectInternal
protected void connectInternal(Login login, AbstractSession session) throws DatabaseException
Connect to the database. Exceptions are caught and re-thrown as EclipseLink exceptions. Must set the transaction isolation.- Overrides:
connectInternalin classDatasourceAccessor- Throws:
DatabaseException
-
checkTransactionIsolation
protected void checkTransactionIsolation(AbstractSession session) throws DatabaseException
Check to see if the transaction isolation needs to be set for the newly created connection. This must be done outside of a transaction. Exceptions are caught and re-thrown as EclipseLink exceptions.- Throws:
DatabaseException
-
clearStatementCache
public void clearStatementCache(AbstractSession session)
Flush the statement cache. Each statement must first be closed.
-
clone
public java.lang.Object clone()
Clone the accessor.- Specified by:
clonein interfaceAccessor- Overrides:
clonein classDatasourceAccessor
-
closeCursor
public void closeCursor(java.sql.ResultSet resultSet, AbstractSession session) throws DatabaseExceptionClose the result set of the cursored stream.- Throws:
DatabaseException
-
closeStatement
public void closeStatement(java.sql.Statement statement, AbstractSession session, DatabaseCall call) throws java.sql.SQLExceptionINTERNAL: Closes a PreparedStatement (which is supposed to close it's current resultSet). Factored out to simplify coding and handle exceptions.- Throws:
java.sql.SQLException
-
commitTransaction
public void commitTransaction(AbstractSession session) throws DatabaseException
Commit a transaction on the database. First flush any batched statements.- Specified by:
commitTransactionin interfaceAccessor- Overrides:
commitTransactionin classDatasourceAccessor- Throws:
DatabaseException
-
basicCommitTransaction
public void basicCommitTransaction(AbstractSession session) throws DatabaseException
Commit a transaction on the database. This means toggling the auto-commit option.- Specified by:
basicCommitTransactionin classDatasourceAccessor- Throws:
DatabaseException
-
cursorRetrieveNextRow
public AbstractRecord cursorRetrieveNextRow(java.util.Vector fields, java.sql.ResultSet resultSet, AbstractSession session) throws DatabaseException
Advance the result set and return a Record populated with values from the next valid row in the result set. Intended solely for cursored stream support.- Throws:
DatabaseException
-
cursorRetrievePreviousRow
public AbstractRecord cursorRetrievePreviousRow(java.util.Vector fields, java.sql.ResultSet resultSet, AbstractSession session) throws DatabaseException
Advance the result set and return a DatabaseRow populated with values from the next valid row in the result set. Intended solely for scrollable cursor support.- Throws:
DatabaseException
-
closeDatasourceConnection
public void closeDatasourceConnection() throws DatabaseExceptionClose the connection.- Specified by:
closeDatasourceConnectionin classDatasourceAccessor- Throws:
DatabaseException
-
disconnect
public void disconnect(AbstractSession session) throws DatabaseException
Disconnect from the datasource. Added for bug 3046465 to ensure the statement cache is cleared.- Specified by:
disconnectin interfaceAccessor- Overrides:
disconnectin classDatasourceAccessor- Throws:
DatabaseException
-
closeConnection
public void closeConnection()
Close the accessor's connection. This is used only for external connection pooling when it is intended for the connection to be reconnected in the future.- Specified by:
closeConnectionin interfaceAccessor- Overrides:
closeConnectionin classDatasourceAccessor
-
executeBatchedStatement
protected void executeBatchedStatement(java.sql.PreparedStatement statement, AbstractSession session) throws DatabaseExceptionExecute the EclipseLink dynamically batched/concatenated statement.- Throws:
DatabaseException
-
executeCall
public java.lang.Object executeCall(Call call, AbstractRecord translationRow, AbstractSession session) throws DatabaseException
Execute the call. The execution can differ slightly depending on the type of call. The call may be parameterized where the arguments are in the translation row. The row will be empty if there are no parameters.- Specified by:
executeCallin interfaceAccessor- Overrides:
executeCallin classDatasourceAccessor- Returns:
- depending of the type either the row count, row or vector of rows.
- Throws:
DatabaseException
-
basicExecuteCall
public java.lang.Object basicExecuteCall(Call call, AbstractRecord translationRow, AbstractSession session) throws DatabaseException
Execute the call. The execution can differ slightly depending on the type of call. The call may be parameterized where the arguments are in the translation row. The row will be empty if there are no parameters.- Specified by:
basicExecuteCallin classDatasourceAccessor- Returns:
- depending of the type either the row count, row or vector of rows.
- Throws:
DatabaseException
-
basicExecuteCall
public java.lang.Object basicExecuteCall(Call call, AbstractRecord translationRow, AbstractSession session, boolean batch) throws DatabaseException
Execute the call. The execution can differ slightly depending on the type of call. The call may be parameterized where the arguments are in the translation row. The row will be empty if there are no parameters.- Returns:
- depending of the type either the row count, row or vector of rows.
- Throws:
DatabaseException
-
processResultSet
public java.lang.Object processResultSet(java.sql.ResultSet resultSet, DatabaseCall call, java.sql.Statement statement, AbstractSession session) throws java.sql.SQLExceptionFetch all the rows from the result set.- Throws:
java.sql.SQLException
-
buildThreadCursoredResult
protected java.util.Vector buildThreadCursoredResult(DatabaseCall dbCall, java.sql.ResultSet resultSet, java.sql.Statement statement, java.sql.ResultSetMetaData metaData, AbstractSession session)
This allows for the rows to be fetched concurrently to the objects being built. This code is not currently publicly supported.
-
executeDirectNoSelect
public java.lang.Object executeDirectNoSelect(java.sql.Statement statement, DatabaseCall call, AbstractSession session) throws DatabaseExceptionExecute the statement.- Throws:
DatabaseException
-
executeJDK12BatchStatement
protected int executeJDK12BatchStatement(java.sql.Statement statement, DatabaseCall dbCall, AbstractSession session, boolean isStatementPrepared) throws DatabaseExceptionExecute the batched statement through the JDBC2 API.- Throws:
DatabaseException
-
executeNoSelect
protected java.lang.Object executeNoSelect(DatabaseCall call, java.sql.Statement statement, AbstractSession session) throws DatabaseException
Execute the statement.- Throws:
DatabaseException
-
execute
public boolean execute(DatabaseCall call, java.sql.Statement statement, AbstractSession session) throws java.sql.SQLException
Execute the statement.- Throws:
java.sql.SQLException
-
executeSelect
public java.sql.ResultSet executeSelect(DatabaseCall call, java.sql.Statement statement, AbstractSession session) throws java.sql.SQLException
Execute the statement.- Throws:
java.sql.SQLException
-
fetchRow
protected AbstractRecord fetchRow(java.util.Vector fields, java.sql.ResultSet resultSet, java.sql.ResultSetMetaData metaData, AbstractSession session) throws DatabaseException
Return a new DatabaseRow.Populate the row from the data in cursor. The fields representing the results and the order of the results are stored in fields.
NOTE: Make sure that the field name is set. An empty field name placeholder is used in the sortFields() method when the number of fields defined does not match the number of column names available on the database. PERF: This method must be highly optimized.
- Throws:
DatabaseException
-
fetchRow
public AbstractRecord fetchRow(java.util.Vector fields, DatabaseField[] fieldsArray, java.sql.ResultSet resultSet, java.sql.ResultSetMetaData metaData, AbstractSession session) throws DatabaseException
Return a new DatabaseRow.Populate the row from the data in cursor. The fields representing the results and the order of the results are stored in fields.
NOTE: Make sure that the field name is set. An empty field name placeholder is used in the sortFields() method when the number of fields defined does not match the number of column names available on the database. PERF: This method must be highly optimized.
- Throws:
DatabaseException
-
populateRow
public void populateRow(DatabaseField[] fieldsArray, java.lang.Object[] values, java.sql.ResultSet resultSet, java.sql.ResultSetMetaData metaData, AbstractSession session, int startIndex, int endIndex) throws DatabaseException
- Throws:
DatabaseException
-
getActiveBatchWritingMechanism
public BatchWritingMechanism getActiveBatchWritingMechanism(AbstractSession session)
INTERNAL: This method is used internally to return the active batch writing mechanism to batch the statement
-
getColumnInfo
public java.util.Vector getColumnInfo(java.lang.String catalog, java.lang.String schema, java.lang.String tableName, java.lang.String columnName, AbstractSession session) throws DatabaseExceptionGet a description of table columns available in a catalog.Only column descriptions matching the catalog, schema, table and column name criteria are returned. They are ordered by TABLE_SCHEM, TABLE_NAME and ORDINAL_POSITION.
Each column description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- COLUMN_NAME String => column name
- DATA_TYPE short => SQL type from java.sql.Types
- TYPE_NAME String => Data source dependent type name
- COLUMN_SIZE int => column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is precision.
- BUFFER_LENGTH is not used.
- DECIMAL_DIGITS int => the number of fractional digits
- NUM_PREC_RADIX int => Radix (typically either 10 or 2)
- NULLABLE int => is NULL allowed?
- columnNoNulls - might not allow NULL values
- columnNullable - definitely allows NULL values
- columnNullableUnknown - nullability unknown
- REMARKS String => comment describing column (may be null)
- COLUMN_DEF String => default value (may be null)
- SQL_DATA_TYPE int => unused
- SQL_DATETIME_SUB int => unused
- CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
- ORDINAL_POSITION int => index of column in table (starting at 1)
- IS_NULLABLE String => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means nobody knows.
- Specified by:
getColumnInfoin interfaceAccessor- Overrides:
getColumnInfoin classDatasourceAccessor- Parameters:
catalog- a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteriaschemaPattern- a schema name pattern; "" retrieves those without a schematableNamePattern- a table name patterncolumnNamePattern- a column name pattern- Returns:
- a Vector of DatabaseRows.
- Throws:
DatabaseException
-
getColumnNames
protected java.util.Vector getColumnNames(java.sql.ResultSet resultSet, AbstractSession session) throws java.sql.SQLExceptionReturn the column names from a result sets meta data as a vector of DatabaseFields. This is required for custom SQL execution only, as generated SQL already knows the fields returned.- Throws:
java.sql.SQLException
-
getConnection
public java.sql.Connection getConnection() throws DatabaseExceptionReturn the receiver's connection to its data source. A connection is used to execute queries on, and retrieve data from, a data source.- Specified by:
getConnectionin interfaceAccessor- Overrides:
getConnectionin classDatasourceAccessor- Throws:
DatabaseException- See Also:
Connection
-
getPlatform
public DatabasePlatform getPlatform()
Return the platform.
-
getConnectionMetaData
public java.sql.DatabaseMetaData getConnectionMetaData() throws java.sql.SQLExceptionreturn the cached metaData- Throws:
java.sql.SQLException
-
getObject
public java.lang.Object getObject(java.sql.ResultSet resultSet, DatabaseField field, java.sql.ResultSetMetaData metaData, int columnNumber, DatabasePlatform platform, boolean optimizeData, AbstractSession session) throws DatabaseExceptionReturn an object retrieved from resultSet with the getObject() method. Optimize the get for certain type to avoid double conversion. NOTE: This method handles a virtual machine error thrown when retrieving times & dates from Oracle or Sybase.- Throws:
DatabaseException
-
getObjectThroughOptimizedDataConversion
protected java.lang.Object getObjectThroughOptimizedDataConversion(java.sql.ResultSet resultSet, DatabaseField field, int type, int columnNumber, DatabasePlatform platform, AbstractSession session) throws java.sql.SQLExceptionHandle the conversion into java optimally through calling the direct type API. If the type is not one that can be optimized return null.- Throws:
java.sql.SQLException
-
hasStatementCache
protected boolean hasStatementCache()
Return if the accessor has any cached statements. This should be used to avoid lazy instantiation of the cache.
-
getStatementCache
protected java.util.Map<java.lang.String,java.sql.Statement> getStatementCache()
The statement cache stores a fixed sized number of prepared statements.
-
getTableInfo
public java.util.Vector getTableInfo(java.lang.String catalog, java.lang.String schema, java.lang.String tableName, java.lang.String[] types, AbstractSession session) throws DatabaseExceptionGet a description of tables available in a catalog.Only table descriptions matching the catalog, schema, table name and type criteria are returned. They are ordered by TABLE_TYPE, TABLE_SCHEM and TABLE_NAME.
Each table description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
- REMARKS String => explanatory comment on the table
Note: Some databases may not return information for all tables.
- Specified by:
getTableInfoin interfaceAccessor- Overrides:
getTableInfoin classDatasourceAccessor- Parameters:
catalog- a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteriaschemaPattern- a schema name pattern; "" retrieves those without a schematableNamePattern- a table name patterntypes- a list of table types to include; null returns all types- Returns:
- a Vector of DatabaseRows.
- Throws:
DatabaseException
-
isDatasourceConnected
public boolean isDatasourceConnected()
Return true if the receiver is currently connected to a data source. Return false otherwise.- Specified by:
isDatasourceConnectedin classDatasourceAccessor
-
isInBatchWritingMode
protected boolean isInBatchWritingMode(AbstractSession session)
Return the batch writing mode.
-
prepareStatement
public java.sql.Statement prepareStatement(DatabaseCall call, AbstractSession session) throws java.sql.SQLException
Prepare the SQL statement for the call. First check if the statement is cached before building a new one. Currently the SQL string is used as the cache key, this may have to be switched if it becomes a performance problem.- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.Statement prepareStatement(DatabaseCall call, AbstractSession session, boolean unwrapConnection) throws java.sql.SQLException
Prepare the SQL statement for the call. First check if the statement is cached before building a new one.- Parameters:
unwrapConnection- boolean flag set to true to unwrap the connection before preparing the statement in the case of a parameterized call.- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, AbstractSession session, boolean callable) throws java.sql.SQLExceptionPrepare the SQL statement for the call. First check if the statement is cached before building a new one.- Throws:
java.sql.SQLException
-
processExceptionForCommError
public DatabaseException processExceptionForCommError(AbstractSession session, java.sql.SQLException exception, Call call)
This method is used to process an SQL exception and determine if the exception should be passed on for further processing. If the Exception was communication based then a DatabaseException will be return. If the method did not process the message of it was not a comm failure then null will be returned.
-
reconnect
protected void reconnect(AbstractSession session)
Attempt to save some of the cost associated with getting a fresh connection. Assume the DatabaseDriver has been cached, if appropriate. Note: Connections that are participating in transactions will not be refreshed.^M Added for bug 3046465 to ensure the statement cache is cleared- Overrides:
reconnectin classDatasourceAccessor
-
releaseStatement
public void releaseStatement(java.sql.Statement statement, java.lang.String sqlString, DatabaseCall call, AbstractSession session) throws java.sql.SQLExceptionRelease the statement through closing it or putting it back in the statement cache.- Throws:
java.sql.SQLException
-
resetStatementFromCall
protected void resetStatementFromCall(java.sql.Statement statement, DatabaseCall call) throws java.sql.SQLExceptionReset the Query Timeout, Max Rows, Resultset fetch size on the Statement if the DatabaseCall has values which differ from the default settings. For Bug 5709179 - reset settings on cached statements- Throws:
java.sql.SQLException
-
rollbackTransaction
public void rollbackTransaction(AbstractSession session) throws DatabaseException
Rollback a transaction on the database. This means toggling the auto-commit option.- Specified by:
rollbackTransactionin interfaceAccessor- Overrides:
rollbackTransactionin classDatasourceAccessor- Throws:
DatabaseException
-
basicRollbackTransaction
public void basicRollbackTransaction(AbstractSession session) throws DatabaseException
Rollback a transaction on the database. This means toggling the auto-commit option.- Specified by:
basicRollbackTransactionin classDatasourceAccessor- Throws:
DatabaseException
-
setActiveBatchWritingMechanismToParameterizedSQL
public void setActiveBatchWritingMechanismToParameterizedSQL()
INTERNAL: This method is used to set the active Batch Mechanism on the accessor.
-
setActiveBatchWritingMechanismToDynamicSQL
public void setActiveBatchWritingMechanismToDynamicSQL()
INTERNAL: This method is used to set the active Batch Mechanism on the accessor.
-
setActiveBatchWritingMechanism
public void setActiveBatchWritingMechanism(BatchWritingMechanism mechanism)
INTERNAL: This method is used to set the active Batch Mechanism on the accessor.
-
setStatementCache
protected void setStatementCache(java.util.Hashtable statementCache)
The statement cache stores a fixed sized number of prepared statements.
-
sortFields
protected java.util.Vector sortFields(java.util.Vector fields, java.util.Vector columnNames)This method will sort the fields in correct order based on the column names.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
isBlob
public static boolean isBlob(int type)
Return if the JDBC type is a binary type such as blob.
-
isClob
public static boolean isClob(int type)
Return if the JDBC type is a large character type such as clob.
-
writesCompleted
public void writesCompleted(AbstractSession session)
This method will be called after a series of writes have been issued to mark where a particular set of writes has completed. It will be called from commitTransaction and may be called from writeChanges. Its main purpose is to ensure that the batched statements have been executed- Specified by:
writesCompletedin interfaceAccessor- Overrides:
writesCompletedin classDatasourceAccessor
-
-