Class InformixAdapter
- java.lang.Object
-
- org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter
-
- org.datanucleus.store.rdbms.adapter.InformixAdapter
-
- All Implemented Interfaces:
DatastoreAdapter
public class InformixAdapter extends BaseDatastoreAdapter
Provides methods for adapting SQL language elements to the Informix database. Overrides some methods in DatabaseAdapter where Informix behaviour differs. Informix databases must be created WITH LOG MODE ANSI, otherwise errors like "Transaction Not Supported", "Not in transaction" will appear. See the informix info.
-
-
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, datastoreTypeMappingsByJavaType, 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, INCLUDE_TABLE_INDEX_STATISTICS, 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 InformixAdapter(java.sql.DatabaseMetaData metadata)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
getAddCandidateKeyStatement(CandidateKey ck, IdentifierFactory factory)
Returns the appropriate SQL to add a candidate key to its table.java.lang.String
getAddForeignKeyStatement(ForeignKey fk, IdentifierFactory factory)
Returns the appropriate SQL to add a foreign key to its table.java.lang.String
getAddPrimaryKeyStatement(PrimaryKey pk, IdentifierFactory factory)
Informix 11.x does not support ALTER TABLE to define a primary keyjava.lang.String
getDatastoreDateStatement()
Accessor for a statement that will return the statement to use to get the datastore date.java.lang.String
getIdentifierQuoteString()
Accessor for an identifier quote string.java.lang.String
getIdentityKeyword(org.datanucleus.store.StoreManager storeMgr)
Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).java.lang.String
getIdentityLastValueStmt(Table table, java.lang.String columnName)
Accessor for the autoincrement sql access statement for this datastore.java.lang.Class<? extends SQLMethod>
getSQLMethodClass(java.lang.String className, java.lang.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).java.lang.Class<? extends SQLOperation>
getSQLOperationClass(java.lang.String operationName)
Accessor for the SQLOperation class for the specified operation (if available for this datastore).private java.lang.String
getSTRPOSDropFunction()
DROP a NUCLEUS_STRPOS function for Informixprivate java.lang.String
getSTRPOSFunction()
Creates a NUCLEUS_STRPOS function for Informixjava.lang.String
getVendorID()
Accessor for the Vendor ID for this datastore.void
initialiseDatastore(java.sql.Connection conn)
Creates the auxiliary functions/procedures in the schemaboolean
isStatementTimeout(java.sql.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.SQLTypeInfo
newSQLTypeInfo(java.sql.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, getAddColumnStatement, getCatalogName, getCatalogSeparator, getCheckConstraintForValues, getColumnMappingClass, getColumns, getContinuationString, getCreateDatabaseStatement, getCreateIndexStatement, getCreateTableStatement, getDatastoreDriverName, getDatastoreDriverVersion, getDatastoreIdentifierMaxLength, getDatastoreProductName, getDatastoreProductVersion, getDefaultSqlTypeForJavaType, getDeleteTableStatement, getDriverMajorVersion, getDriverMinorVersion, getDropDatabaseStatement, getDropTableStatement, getDropViewStatement, getEscapeCharacter, getEscapePatternExpression, getExistingIndexes, getIdentityJavaTypeForType, getInsertStatementForNoColumns, getJDBCTypeForName, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNameForJDBCType, getNewUUIDFunction, getNumericConversionFunction, getOrderString, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getPreferredDefaultSQLTypeForJDBCType, getRangeByLimitEndOfStatementClause, getRangeByRowNumberColumn, getRangeByRowNumberColumn2, getRequiredTransactionIsolationLevel, getReservedWords, getSchemaName, getSelectForUpdateText, getSelectNewUUIDStmt, getSelectWithLockOption, getSequenceCreateStmt, getSequenceNextStmt, getSQLTypeInfoForJdbcType, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getUpdateTableStatement, initialise, initialiseTypes, isIdentityFieldDataType, isReservedKeyword, isStatementCancel, isValidPrimaryKeyType, newFKInfo, newRDBMSColumnInfo, registerColumnMapping, registerColumnMapping, sequenceExists, supportsOption, supportsQueryFetchSize, supportsTransactionIsolation, toString, validToIndexMapping, validToSelectMappingInStatement
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.datanucleus.store.rdbms.adapter.DatastoreAdapter
getIdentityKeyword
-
-
-
-
Method Detail
-
initialiseDatastore
public void initialiseDatastore(java.sql.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
-
getVendorID
public java.lang.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
-
newSQLTypeInfo
public SQLTypeInfo newSQLTypeInfo(java.sql.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
-
getIdentifierQuoteString
public java.lang.String getIdentifierQuoteString()
Accessor for an identifier quote string.- Specified by:
getIdentifierQuoteString
in interfaceDatastoreAdapter
- Overrides:
getIdentifierQuoteString
in classBaseDatastoreAdapter
- Returns:
- Identifier quote string.
-
getIdentityLastValueStmt
public java.lang.String getIdentityLastValueStmt(Table table, java.lang.String columnName)
Accessor for the autoincrement sql access 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 java.lang.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
-
getAddPrimaryKeyStatement
public java.lang.String getAddPrimaryKeyStatement(PrimaryKey pk, IdentifierFactory factory)
Informix 11.x does not support ALTER TABLE to define a primary key- Specified by:
getAddPrimaryKeyStatement
in interfaceDatastoreAdapter
- Overrides:
getAddPrimaryKeyStatement
in classBaseDatastoreAdapter
- Parameters:
pk
- An object describing the primary key.factory
- Identifier factory- Returns:
- The PK statement
-
getAddForeignKeyStatement
public java.lang.String getAddForeignKeyStatement(ForeignKey fk, IdentifierFactory factory)
Returns the appropriate SQL to add a foreign key to its table. It should return something like:ALTER TABLE FOO ADD CONSTRAINT FOREIGN KEY (BAR, BAZ) REFERENCES ABC (COL1, COL2) CONSTRAINT FOO_FK1 ALTER TABLE FOO ADD FOREIGN KEY (BAR, BAZ) REFERENCES ABC (COL1, COL2)
- Specified by:
getAddForeignKeyStatement
in interfaceDatastoreAdapter
- Overrides:
getAddForeignKeyStatement
in classBaseDatastoreAdapter
- Parameters:
fk
- An object describing the foreign key.factory
- Identifier factory- Returns:
- The text of the SQL statement.
-
getAddCandidateKeyStatement
public java.lang.String getAddCandidateKeyStatement(CandidateKey ck, IdentifierFactory factory)
Returns the appropriate SQL to add a candidate key to its table. It should return something like:ALTER TABLE FOO ADD CONSTRAINT FOO_CK CONSTRAINT UNIQUE (BAZ) ALTER TABLE FOO ADD CONSTRAINT UNIQUE (BAZ)
- 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.
-
getDatastoreDateStatement
public java.lang.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
-
getSTRPOSFunction
private java.lang.String getSTRPOSFunction()
Creates a NUCLEUS_STRPOS function for Informix- Returns:
- the SQL NUCLEUS_STRPOS function
-
getSTRPOSDropFunction
private java.lang.String getSTRPOSDropFunction()
DROP a NUCLEUS_STRPOS function for Informix- Returns:
- the SQL NUCLEUS_STRPOS function
-
isStatementTimeout
public boolean isStatementTimeout(java.sql.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 java.lang.Class<? extends SQLOperation> getSQLOperationClass(java.lang.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 java.lang.Class<? extends SQLMethod> getSQLMethodClass(java.lang.String className, java.lang.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
-
-