Class DerbyAdapter
- java.lang.Object
-
- org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
-
- org.datanucleus.store.rdbms.adapter.DerbyAdapter
-
- All Implemented Interfaces:
DatastoreAdapter
public class DerbyAdapter extends BaseDatastoreAdapter
Provides methods for adapting SQL language elements to the Apache Derby database.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
BaseDatastoreAdapter.ColumnTypeMappings
-
-
Field Summary
-
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 DerbyAdapter(DatabaseMetaData metadata)
Constructs an Apache Derby adapter based on the given JDBC metadata.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description String
getAddCandidateKeyStatement(CandidateKey ck, IdentifierFactory factory)
Returns the appropriate SQL to add a candidate key to its table.String
getCatalogName(Connection conn)
Accessor for the catalog name.String
getDatastoreDateStatement()
Accessor for a statement that will return the statement to use to get the datastore date.String
getDropDatabaseStatement(String catalogName, String schemaName)
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
getInsertStatementForNoColumns(Table table)
Method to return the INSERT statement to use when inserting into a table that has no columns specified.String
getNumericConversionFunction()
Accessor for the function to use for converting to numeric.String
getRangeByLimitEndOfStatementClause(long offset, long count, boolean hasOrdering)
Method to return the SQL to append to the WHERE clause of a SELECT statement to handle restriction of ranges using the OFFSET/FETCH keywords.String
getSchemaName(Connection conn)
Accessor for the schema name.String
getSelectForUpdateText()
Method returning the text to append to the end of the SELECT to perform the equivalent of "SELECT ...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.void
initialiseDatastore(Connection conn)
Creates the auxiliary functions/procedures in the schemaboolean
isIdentityFieldDataType(String columnDef)
Verifies if the givencolumnDef
is auto incremented by the datastore.boolean
isStatementCancel(SQLException sqle)
Return whether this exception represents a cancelled statement.protected void
loadColumnMappings(org.datanucleus.plugin.PluginManager mgr, org.datanucleus.ClassLoaderResolver clr)
Load all datastore mappings for this RDBMS database.SQLTypeInfo
newSQLTypeInfo(ResultSet rs)
Create a new SQL type info from the current row of the passed ResultSet.boolean
validToSelectMappingInStatement(SelectStatement stmt, JavaTypeMapping m)
Method to return if it is valid to select the specified mapping for the specified statement for this datastore adapter.-
Methods inherited from class org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
addSQLTypeForJDBCType, deregisterColumnMappingsForJDBCType, getAdapterTime, getAddColumnStatement, getAddForeignKeyStatement, getAddPrimaryKeyStatement, getCatalogSeparator, getCheckConstraintForValues, getColumnMappingClass, getColumns, getContinuationString, getCreateDatabaseStatement, getCreateIndexStatement, getCreateTableStatement, getDatastoreDriverName, getDatastoreDriverVersion, getDatastoreIdentifierMaxLength, getDatastoreProductName, getDatastoreProductVersion, getDefaultSqlTypeForJavaType, getDeleteTableStatement, getDriverMajorVersion, getDriverMinorVersion, getDropViewStatement, getEscapeCharacter, getEscapePatternExpression, getExistingIndexes, getIdentifierQuoteString, getIdentityJavaTypeForType, getJDBCTypeForName, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNameForJDBCType, getNewUUIDFunction, getOrderString, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getPreferredDefaultSQLTypeForJDBCType, getRangeByRowNumberColumn, getRangeByRowNumberColumn2, getRequiredTransactionIsolationLevel, getReservedWords, getSelectNewUUIDStmt, getSelectWithLockOption, getSQLTypeInfoForJdbcType, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getUpdateTableStatement, initialise, initialiseTypes, isReservedKeyword, isStatementTimeout, isValidPrimaryKeyType, newFKInfo, newRDBMSColumnInfo, registerColumnMapping, registerColumnMapping, sequenceExists, supportsOption, supportsQueryFetchSize, supportsTransactionIsolation, toString, validToIndexMapping
-
-
-
-
Constructor Detail
-
DerbyAdapter
public DerbyAdapter(DatabaseMetaData metadata)
Constructs an Apache Derby adapter based on the given JDBC metadata.- Parameters:
metadata
- the database metadata.
-
-
Method Detail
-
initialiseDatastore
public void initialiseDatastore(Connection conn)
Creates the auxiliary functions/procedures in the schema- Specified by:
initialiseDatastore
in interfaceDatastoreAdapter
- Overrides:
initialiseDatastore
in classBaseDatastoreAdapter
- Parameters:
conn
- the connection to the datastore
-
getSchemaName
public String getSchemaName(Connection conn) throws SQLException
Accessor for the schema name.- Specified by:
getSchemaName
in interfaceDatastoreAdapter
- Overrides:
getSchemaName
in classBaseDatastoreAdapter
- Parameters:
conn
- The Connection to use- Returns:
- The schema name used by this connection
- Throws:
SQLException
- if an error occurs
-
getCatalogName
public String getCatalogName(Connection conn) throws SQLException
Accessor for the catalog name.- Specified by:
getCatalogName
in interfaceDatastoreAdapter
- Overrides:
getCatalogName
in classBaseDatastoreAdapter
- Parameters:
conn
- The Connection to use- Returns:
- The catalog name used by this connection
- Throws:
SQLException
- if an error occurs
-
getVendorID
public String getVendorID()
Accessor for the vendor id.- Specified by:
getVendorID
in interfaceDatastoreAdapter
- Overrides:
getVendorID
in classBaseDatastoreAdapter
- Returns:
- The vendor id.
-
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
-
getDropDatabaseStatement
public String getDropDatabaseStatement(String catalogName, String schemaName)
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:
catalogName
- Name of the catalogschemaName
- 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.
-
getAddCandidateKeyStatement
public String getAddCandidateKeyStatement(CandidateKey ck, IdentifierFactory factory)
Returns the appropriate SQL to add a candidate key to its table. It should return something like:CREATE [UNIQUE] INDEX FOO_CK ON TBL (COL1 [, COL2])
- Specified by:
getAddCandidateKeyStatement
in interfaceDatastoreAdapter
- Overrides:
getAddCandidateKeyStatement
in classBaseDatastoreAdapter
- Parameters:
ck
- An object describing the candidate key.factory
- Identifier factory- Returns:
- The text of the SQL statement.
-
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
- The Store Manager- Returns:
- The keyword for a column using auto-increment
-
isIdentityFieldDataType
public boolean isIdentityFieldDataType(String columnDef)
Verifies if the givencolumnDef
is auto incremented by the datastore.- Specified by:
isIdentityFieldDataType
in interfaceDatastoreAdapter
- Overrides:
isIdentityFieldDataType
in classBaseDatastoreAdapter
- Parameters:
columnDef
- the datastore type name- Returns:
- true when the
columnDef
has values auto incremented by the datastore
-
getInsertStatementForNoColumns
public String getInsertStatementForNoColumns(Table table)
Method to return the INSERT statement to use when inserting into a table that has no columns specified. This is the case when we have a single column in the table and that column is autoincrement/identity (and so is assigned automatically in the datastore).- Specified by:
getInsertStatementForNoColumns
in interfaceDatastoreAdapter
- Overrides:
getInsertStatementForNoColumns
in classBaseDatastoreAdapter
- Parameters:
table
- The table- Returns:
- The INSERT statement
-
getDatastoreDateStatement
public String getDatastoreDateStatement()
Accessor for a statement that will return the statement to use to get the datastore date.- Specified by:
getDatastoreDateStatement
in interfaceDatastoreAdapter
- Overrides:
getDatastoreDateStatement
in classBaseDatastoreAdapter
- Returns:
- SQL statement to get the datastore date
-
getSelectForUpdateText
public String getSelectForUpdateText()
Method returning the text to append to the end of the SELECT to perform the equivalent of "SELECT ... FOR UPDATE" (on some RDBMS). Derby doesn't support "FOR UPDATE" in all situations and has a similar one "WITH RR", see https://issues.apache.org/jira/browse/DERBY-3900- Specified by:
getSelectForUpdateText
in interfaceDatastoreAdapter
- Overrides:
getSelectForUpdateText
in classBaseDatastoreAdapter
- Returns:
- The "FOR UPDATE" style text
-
validToSelectMappingInStatement
public boolean validToSelectMappingInStatement(SelectStatement stmt, JavaTypeMapping m)
Method to return if it is valid to select the specified mapping for the specified statement for this datastore adapter. Sometimes, dependent on the type of the column(s), and what other components are present in the statement, it may be invalid to select the mapping. This implementation returns true, so override in database-specific subclass as required.- Specified by:
validToSelectMappingInStatement
in interfaceDatastoreAdapter
- Overrides:
validToSelectMappingInStatement
in classBaseDatastoreAdapter
- Parameters:
stmt
- The statementm
- The mapping that we want to select- Returns:
- Whether it is valid
-
getNumericConversionFunction
public String getNumericConversionFunction()
Accessor for the function to use for converting to numeric.- Specified by:
getNumericConversionFunction
in interfaceDatastoreAdapter
- Overrides:
getNumericConversionFunction
in classBaseDatastoreAdapter
- Returns:
- The numeric conversion function for this datastore.
-
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
-
getRangeByLimitEndOfStatementClause
public String getRangeByLimitEndOfStatementClause(long offset, long count, boolean hasOrdering)
Method to return the SQL to append to the WHERE clause of a SELECT statement to handle restriction of ranges using the OFFSET/FETCH keywords.- Specified by:
getRangeByLimitEndOfStatementClause
in interfaceDatastoreAdapter
- Overrides:
getRangeByLimitEndOfStatementClause
in classBaseDatastoreAdapter
- Parameters:
offset
- The offset to return fromcount
- The number of items to returnhasOrdering
- Whether there is ordering present- Returns:
- The SQL to append to allow for ranges using OFFSET/FETCH.
-
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
-
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
-
-