Class DB2Adapter
- java.lang.Object
-
- org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
-
- org.datanucleus.store.rdbms.adapter.DB2Adapter
-
- All Implemented Interfaces:
DatastoreAdapter
- Direct Known Subclasses:
DB2AS400Adapter
public class DB2Adapter extends BaseDatastoreAdapter
Provides methods for adapting SQL language elements to the DB2 database.- See Also:
BaseDatastoreAdapter
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
BaseDatastoreAdapter.ColumnTypeMappings
-
-
Field Summary
Fields Modifier and Type Field Description static String
DB2_RESERVED_WORDS
A string containing the list of DB2 keywords This list is normally obtained dynamically from the driver using "DatabaseMetaData.getSQLKeywords()".-
Fields inherited from class org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
catalogSeparator, datastoreMajorVersion, datastoreMinorVersion, datastoreProductName, datastoreProductVersion, datastoreRevisionVersion, driverMajorVersion, driverMinorVersion, driverName, driverVersion, identifierQuoteString, MAX_IDENTIFIER_LENGTH, maxColumnNameLength, maxConstraintNameLength, maxIndexNameLength, maxTableNameLength, NONRESERVED_WORDS, reservedKeywords, SQL2003_RESERVED_WORDS, SQL92_RESERVED_WORDS, SQL99_RESERVED_WORDS, supportedJdbcTypesById, supportedOptions, unsupportedJdbcTypesById
-
Fields inherited from interface org.datanucleus.store.rdbms.adapter.DatastoreAdapter
ACCESS_PARENTQUERY_IN_SUBQUERY_JOINED, ALTER_TABLE_DROP_CONSTRAINT_SYNTAX, ALTER_TABLE_DROP_FOREIGN_KEY_CONSTRAINT, ANSI_CROSSJOIN_SYNTAX, ANSI_JOIN_SYNTAX, BIT_IS_REALLY_BOOLEAN, BLOB_SET_USING_SETSTRING, BOOLEAN_COMPARISON, CATALOGS_IN_TABLE_DEFINITIONS, CHAR_COLUMNS_PADDED_WITH_SPACES, CHECK_IN_CREATE_STATEMENTS, CHECK_IN_END_CREATE_STATEMENTS, CLOB_SET_USING_SETSTRING, COLUMN_LENGTH_SEMANTICS, CREATE_INDEX_COLUMN_ORDERING, CREATE_INDEXES_BEFORE_FOREIGN_KEYS, CROSSJOIN_ASINNER11_SYNTAX, DATETIME_STORES_MILLISECS, DEFAULT_BEFORE_NULL_IN_COLUMN_OPTIONS, DEFAULT_KEYWORD_IN_COLUMN_OPTIONS, DEFAULT_KEYWORD_WITH_NOT_NULL_IN_COLUMN_OPTIONS, DEFERRED_CONSTRAINTS, DISTINCT_WITH_SELECT_FOR_UPDATE, ESCAPE_EXPRESSION_IN_LIKE_PREDICATE, EXISTS_SYNTAX, FK_DELETE_ACTION_CASCADE, FK_DELETE_ACTION_DEFAULT, FK_DELETE_ACTION_NULL, FK_DELETE_ACTION_RESTRICT, FK_IN_END_CREATE_STATEMENTS, FK_UPDATE_ACTION_CASCADE, FK_UPDATE_ACTION_DEFAULT, FK_UPDATE_ACTION_NULL, FK_UPDATE_ACTION_RESTRICT, GET_GENERATED_KEYS_STATEMENT, GROUP_BY_REQUIRES_ALL_SELECT_PRIMARIES, GROUPING_WITH_SELECT_FOR_UPDATE, HAVING_WITH_SELECT_FOR_UPDATE, HOLD_CURSORS_OVER_COMMIT, IDENTIFIERS_LOWERCASE, IDENTIFIERS_LOWERCASE_QUOTED, IDENTIFIERS_MIXEDCASE, IDENTIFIERS_MIXEDCASE_QUOTED, IDENTIFIERS_MIXEDCASE_QUOTED_SENSITIVE, IDENTIFIERS_MIXEDCASE_SENSITIVE, IDENTIFIERS_UPPERCASE, IDENTIFIERS_UPPERCASE_QUOTED, IDENTITY_COLUMN_TYPE_SPECIFICATION, IDENTITY_COLUMNS, IDENTITY_KEYS_NULL_SPECIFICATION, IDENTITY_PK_IN_CREATE_TABLE_COLUMN_DEF, INCLUDE_ORDERBY_COLS_IN_SELECT, LOCK_ROW_USING_OPTION_AFTER_FROM, LOCK_ROW_USING_OPTION_WITHIN_JOIN, LOCK_ROW_USING_SELECT_FOR_UPDATE, LOCK_ROW_USING_SELECT_FOR_UPDATE_NOWAIT, MULTITABLES_WITH_SELECT_FOR_UPDATE, NATIVE_ENUM_TYPE, NULL_EQUALS_EMPTY_STRING, NULLS_IN_CANDIDATE_KEYS, NULLS_KEYWORD_IN_COLUMN_OPTIONS, OPERATOR_BITWISE_AND, OPERATOR_BITWISE_OR, OPERATOR_BITWISE_XOR, ORDERBY_NULLS_DIRECTIVES, ORDERBY_NULLS_USING_CASE_NULL, ORDERBY_NULLS_USING_COLUMN_IS_NULL, ORDERBY_NULLS_USING_ISNULL, ORDERBY_USING_SELECT_COLUMN_INDEX, ORDERING_WITH_SELECT_FOR_UPDATE, PARAMETER_IN_CASE_IN_UPDATE_CLAUSE, PERSIST_OF_UNASSIGNED_CHAR, PRIMARYKEY_IN_CREATE_STATEMENTS, PROJECTION_IN_TABLE_REFERENCE_JOINS, RAW_PREFIX_LIKE_STATEMENTS, RESULTSET_TYPE_FORWARD_ONLY, RESULTSET_TYPE_SCROLL_INSENSITIVE, RESULTSET_TYPE_SCROLL_SENSITIVE, RIGHT_OUTER_JOIN, SCHEMAS_IN_TABLE_DEFINITIONS, SEQUENCES, SOME_ANY_ALL_SUBQUERY_EXPRESSIONS, STATEMENT_BATCHING, STORED_PROCEDURES, SUBQUERY_IN_HAVING, TX_ISOLATION_NONE, TX_ISOLATION_READ_COMMITTED, TX_ISOLATION_READ_UNCOMMITTED, TX_ISOLATION_REPEATABLE_READ, TX_ISOLATION_SERIALIZABLE, UNION_SYNTAX, UNIQUE_IN_END_CREATE_STATEMENTS, UPDATE_DELETE_STATEMENT_ALLOW_TABLE_ALIAS_IN_WHERE_CLAUSE, UPDATE_STATEMENT_ALLOW_TABLE_ALIAS_IN_SET_CLAUSE, USE_UNION_ALL, VALUE_GENERATION_UUID_STRING, VIEWS
-
-
Constructor Summary
Constructors Constructor Description DB2Adapter(DatabaseMetaData metadata)
Constructs a DB2 adapter based on the given JDBC metadata.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description String
getContinuationString()
Continuation string to use where the SQL statement goes over more than 1 line.int
getDatastoreIdentifierMaxLength(IdentifierType identifierType)
Method to return the maximum length of a datastore identifier of the specified type.String
getDropDatabaseStatement(String schemaName, String catalogName)
Method to return the statement necessary to drop a database with this RDBMS.String
getDropTableStatement(Table table)
Returns the appropriate SQL to drop the given table.String
getIdentityKeyword(org.datanucleus.store.StoreManager storeMgr)
Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).String
getIdentityLastValueStmt(Table table, String columnName)
Accessor for the auto-increment sql statement for this datastore.String
getRangeByRowNumberColumn()
Method to return the column name to use when handling ranges via a row-number on the select using the original method (DB2).String
getSchemaName(Connection conn)
Accessor for the Schema Name for this datastore.String
getSequenceCreateStmt(String sequenceName, Integer min, Integer max, Integer start, Integer increment, Integer cacheSize)
Accessor for the sequence statement to create the sequence.String
getSequenceNextStmt(String sequenceName)
Accessor for the statement for getting the next id from the sequence for this datastore.Class
getSQLMethodClass(String className, String methodName, org.datanucleus.ClassLoaderResolver clr)
Accessor for the SQLMethod class for the query invocation of specified class + method name (if available for this datastore).Class
getSQLOperationClass(String operationName)
Accessor for the SQLOperation class for the specified operation (if available for this datastore).String
getVendorID()
Accessor for the Vendor ID for this datastore.void
initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler, org.datanucleus.store.connection.ManagedConnection mconn)
Initialise the types for this datastore.boolean
isStatementCancel(SQLException sqle)
return whether this exception represents a cancelled statement.boolean
isStatementTimeout(SQLException sqle)
return whether this exception represents a timed out statement.protected void
loadColumnMappings(org.datanucleus.plugin.PluginManager mgr, org.datanucleus.ClassLoaderResolver clr)
Load all datastore mappings for this RDBMS database.RDBMSColumnInfo
newRDBMSColumnInfo(ResultSet rs)
Method to create a column info for the current row.SQLTypeInfo
newSQLTypeInfo(ResultSet rs)
Create a new SQL type info from the current row of the passed ResultSet.-
Methods inherited from class org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
addSQLTypeForJDBCType, deregisterColumnMappingsForJDBCType, getAdapterTime, getAddCandidateKeyStatement, getAddColumnStatement, getAddForeignKeyStatement, getAddPrimaryKeyStatement, getCatalogName, getCatalogSeparator, getCheckConstraintForValues, getColumnMappingClass, getColumns, getCreateDatabaseStatement, getCreateIndexStatement, getCreateTableStatement, getDatastoreDateStatement, getDatastoreDriverName, getDatastoreDriverVersion, getDatastoreProductName, getDatastoreProductVersion, getDefaultSqlTypeForJavaType, getDeleteTableStatement, getDriverMajorVersion, getDriverMinorVersion, getDropViewStatement, getEscapeCharacter, getEscapePatternExpression, getExistingIndexes, getIdentifierQuoteString, getIdentityJavaTypeForType, getInsertStatementForNoColumns, getJDBCTypeForName, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNameForJDBCType, getNewUUIDFunction, getNumericConversionFunction, getOrderString, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getPreferredDefaultSQLTypeForJDBCType, getRangeByLimitEndOfStatementClause, getRangeByRowNumberColumn2, getRequiredTransactionIsolationLevel, getReservedWords, getSelectForUpdateText, getSelectNewUUIDStmt, getSelectWithLockOption, getSQLTypeInfoForJdbcType, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getUpdateTableStatement, initialise, initialiseDatastore, isIdentityFieldDataType, isReservedKeyword, isValidPrimaryKeyType, newFKInfo, registerColumnMapping, registerColumnMapping, sequenceExists, supportsOption, supportsQueryFetchSize, supportsTransactionIsolation, toString, validToIndexMapping, validToSelectMappingInStatement
-
-
-
-
Field Detail
-
DB2_RESERVED_WORDS
public static final String DB2_RESERVED_WORDS
A string containing the list of DB2 keywords This list is normally obtained dynamically from the driver using "DatabaseMetaData.getSQLKeywords()". Based on database DB2 version 7.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DB2Adapter
public DB2Adapter(DatabaseMetaData metadata)
Constructs a DB2 adapter based on the given JDBC metadata.- Parameters:
metadata
- the database metadata.
-
-
Method Detail
-
initialiseTypes
public void initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler, org.datanucleus.store.connection.ManagedConnection mconn)
Initialise the types for this datastore.- Specified by:
initialiseTypes
in interfaceDatastoreAdapter
- Overrides:
initialiseTypes
in classBaseDatastoreAdapter
- Parameters:
handler
- SchemaHandler that we initialise the types formconn
- Managed connection to use
-
getVendorID
public String getVendorID()
Description copied from interface:DatastoreAdapter
Accessor for the Vendor ID for this datastore.- Specified by:
getVendorID
in interfaceDatastoreAdapter
- Overrides:
getVendorID
in classBaseDatastoreAdapter
- Returns:
- Vendor id for this datastore
-
getSchemaName
public String getSchemaName(Connection conn) throws SQLException
Description copied from class:BaseDatastoreAdapter
Accessor for the Schema Name for this datastore.- Specified by:
getSchemaName
in interfaceDatastoreAdapter
- Overrides:
getSchemaName
in classBaseDatastoreAdapter
- Parameters:
conn
- Connection to the datastore- Returns:
- The schema name
- Throws:
SQLException
- Thrown if error occurs in determining the schema name.
-
getDatastoreIdentifierMaxLength
public int getDatastoreIdentifierMaxLength(IdentifierType identifierType)
Method to return the maximum length of a datastore identifier of the specified type. If no limit exists then returns -1- Specified by:
getDatastoreIdentifierMaxLength
in interfaceDatastoreAdapter
- Overrides:
getDatastoreIdentifierMaxLength
in classBaseDatastoreAdapter
- Parameters:
identifierType
- Type of identifier (see IdentifierFactory.TABLE, etc)- Returns:
- The max permitted length of this type of identifier
-
newSQLTypeInfo
public SQLTypeInfo newSQLTypeInfo(ResultSet rs)
Description copied from interface:DatastoreAdapter
Create a new SQL type info from the current row of the passed ResultSet. Allows an adapter to override particular types where the JDBC driver is known to be buggy.- Specified by:
newSQLTypeInfo
in interfaceDatastoreAdapter
- Overrides:
newSQLTypeInfo
in classBaseDatastoreAdapter
- Parameters:
rs
- ResultSet- Returns:
- The SQL type info
-
newRDBMSColumnInfo
public RDBMSColumnInfo newRDBMSColumnInfo(ResultSet rs)
Method to create a column info for the current row. Overrides the dataType/columnSize/decimalDigits to cater for DB2 particularities.- Specified by:
newRDBMSColumnInfo
in interfaceDatastoreAdapter
- Overrides:
newRDBMSColumnInfo
in classBaseDatastoreAdapter
- Parameters:
rs
- ResultSet from DatabaseMetaData.getColumns()- Returns:
- column info
-
getDropDatabaseStatement
public String getDropDatabaseStatement(String schemaName, String catalogName)
Description copied from interface:DatastoreAdapter
Method to return the statement necessary to drop a database with this RDBMS. Note that some RDBMS don't support this.- Specified by:
getDropDatabaseStatement
in interfaceDatastoreAdapter
- Overrides:
getDropDatabaseStatement
in classBaseDatastoreAdapter
- Parameters:
schemaName
- Name of the catalogcatalogName
- Name of the schema- Returns:
- The DDL statement
-
getDropTableStatement
public String getDropTableStatement(Table table)
Description copied from class:BaseDatastoreAdapter
Returns the appropriate SQL to drop the given table. It should return something like:DROP TABLE FOO CASCADE
- Specified by:
getDropTableStatement
in interfaceDatastoreAdapter
- Overrides:
getDropTableStatement
in classBaseDatastoreAdapter
- Parameters:
table
- The table to drop.- Returns:
- The text of the SQL statement.
-
getContinuationString
public String getContinuationString()
Continuation string to use where the SQL statement goes over more than 1 line. DB2 doesn't convert newlines into continuation characters and so we just provide a space so that it accepts the statement.- Overrides:
getContinuationString
in classBaseDatastoreAdapter
- Returns:
- Continuation string.
-
getIdentityLastValueStmt
public String getIdentityLastValueStmt(Table table, String columnName)
Accessor for the auto-increment sql statement for this datastore.- Specified by:
getIdentityLastValueStmt
in interfaceDatastoreAdapter
- Overrides:
getIdentityLastValueStmt
in classBaseDatastoreAdapter
- Parameters:
table
- Name of the table that the autoincrement is forcolumnName
- Name of the column that the autoincrement is for- Returns:
- The statement for getting the latest auto-increment key
-
getIdentityKeyword
public String getIdentityKeyword(org.datanucleus.store.StoreManager storeMgr)
Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).- Specified by:
getIdentityKeyword
in interfaceDatastoreAdapter
- Overrides:
getIdentityKeyword
in classBaseDatastoreAdapter
- Parameters:
storeMgr
- Store Manager- Returns:
- The keyword for a column using auto-increment
-
getSequenceCreateStmt
public String getSequenceCreateStmt(String sequenceName, Integer min, Integer max, Integer start, Integer increment, Integer cacheSize)
Accessor for the sequence statement to create the sequence.- Specified by:
getSequenceCreateStmt
in interfaceDatastoreAdapter
- Overrides:
getSequenceCreateStmt
in classBaseDatastoreAdapter
- Parameters:
sequenceName
- Name of the sequencemin
- Minimum value for the sequencemax
- Maximum value for the sequencestart
- Start value for the sequenceincrement
- Increment value for the sequencecacheSize
- Cache size for the sequence- Returns:
- The statement for getting the next id from the sequence
-
getSequenceNextStmt
public String getSequenceNextStmt(String sequenceName)
Accessor for the statement for getting the next id from the sequence for this datastore.- Specified by:
getSequenceNextStmt
in interfaceDatastoreAdapter
- Overrides:
getSequenceNextStmt
in classBaseDatastoreAdapter
- Parameters:
sequenceName
- Name of the sequence- Returns:
- The statement for getting the next id for the sequence
-
getRangeByRowNumberColumn
public String getRangeByRowNumberColumn()
Description copied from class:BaseDatastoreAdapter
Method to return the column name to use when handling ranges via a row-number on the select using the original method (DB2). Defaults to an empty string (not supported).- Specified by:
getRangeByRowNumberColumn
in interfaceDatastoreAdapter
- Overrides:
getRangeByRowNumberColumn
in classBaseDatastoreAdapter
- Returns:
- The row number column.
-
isStatementCancel
public boolean isStatementCancel(SQLException sqle)
return whether this exception represents a cancelled statement.- Specified by:
isStatementCancel
in interfaceDatastoreAdapter
- Overrides:
isStatementCancel
in classBaseDatastoreAdapter
- Parameters:
sqle
- the exception- Returns:
- whether it is a cancel
-
isStatementTimeout
public boolean isStatementTimeout(SQLException sqle)
Description copied from class:BaseDatastoreAdapter
return whether this exception represents a timed out statement.- Specified by:
isStatementTimeout
in interfaceDatastoreAdapter
- Overrides:
isStatementTimeout
in classBaseDatastoreAdapter
- Parameters:
sqle
- the exception- Returns:
- whether it is a timeout
-
getSQLOperationClass
public Class getSQLOperationClass(String operationName)
Description copied from interface:DatastoreAdapter
Accessor for the SQLOperation class for the specified operation (if available for this datastore).- Specified by:
getSQLOperationClass
in interfaceDatastoreAdapter
- Overrides:
getSQLOperationClass
in classBaseDatastoreAdapter
- Parameters:
operationName
- operation name- Returns:
- SQLOperation class (or null if none available)
-
getSQLMethodClass
public Class getSQLMethodClass(String className, String methodName, org.datanucleus.ClassLoaderResolver clr)
Description copied from interface:DatastoreAdapter
Accessor for the SQLMethod class for the query invocation of specified class + method name (if available for this datastore).- Specified by:
getSQLMethodClass
in interfaceDatastoreAdapter
- Overrides:
getSQLMethodClass
in classBaseDatastoreAdapter
- Parameters:
className
- Name of the class (or null if this is a STATIC method)methodName
- Method nameclr
- ClassLoader resolver, in case className is a subclass of a supported type- Returns:
- The SQLMethod class (or null if not defined for this datastore).
-
loadColumnMappings
protected void loadColumnMappings(org.datanucleus.plugin.PluginManager mgr, org.datanucleus.ClassLoaderResolver clr)
Load all datastore mappings for this RDBMS database.- Overrides:
loadColumnMappings
in classBaseDatastoreAdapter
- Parameters:
mgr
- the PluginManagerclr
- the ClassLoaderResolver
-
-