org.datanucleus.store.rdbms.adapter
Class InformixAdapter

java.lang.Object
  extended by org.datanucleus.store.rdbms.adapter.DatabaseAdapter
      extended by org.datanucleus.store.rdbms.adapter.InformixAdapter
All Implemented Interfaces:
org.datanucleus.store.mapped.DatastoreAdapter, org.datanucleus.store.mapped.expression.ExpressionConversionAdapter, org.datanucleus.store.mapped.expression.ExpressionLogicSetAdapter, org.datanucleus.store.mapped.expression.ExpressionMethodAdapter, org.datanucleus.store.mapped.expression.ExpressionOperatorAdapter, org.datanucleus.store.mapped.expression.ExpressionPatternAdapter, RDBMSAdapter

public class InformixAdapter
extends DatabaseAdapter

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.


Field Summary
 
Fields inherited from class org.datanucleus.store.rdbms.adapter.DatabaseAdapter
catalogSeparator, datastoreMajorVersion, datastoreMinorVersion, datastoreProductName, datastoreProductVersion, datastoreRevisionVersion, driverMajorVersion, driverMinorVersion, driverName, driverVersion, identifierQuoteString, LOCALISER, LOCALISER_BASE, maxColumnNameLength, maxConstraintNameLength, maxIndexNameLength, maxTableNameLength, properties, reservedKeywords, supportedOptions
 
Fields inherited from interface org.datanucleus.store.rdbms.adapter.RDBMSAdapter
ACCESS_PARENTQUERY_IN_SUBQUERY, ALTER_TABLE_DROP_CONSTRAINT_SYNTAX, ALTER_TABLE_DROP_FOREIGN_KEY_CONSTRAINT, ANSI_JOIN_SYNTAX, AUTO_INCREMENT_COLUMN_TYPE_SPECIFICATION, AUTO_INCREMENT_KEYS_NULL_SPECIFICATION, BLOB_SET_USING_SETSTRING, CHAR_COLUMNS_PADDED_WITH_SPACES, CHECK_IN_CREATE_STATEMENTS, CHECK_IN_END_CREATE_STATEMENTS, CLOB_SET_USING_SETSTRING, CREATE_INDEXES_BEFORE_FOREIGN_KEYS, 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, EXISTS_SYNTAX, FK_DELETE_ACTION_CASCADE, FK_DELETE_ACTION_DEFAULT, FK_DELETE_ACTION_NULL, FK_DELETE_ACTION_RESTRICT, FK_UPDATE_ACTION_CASCADE, FK_UPDATE_ACTION_DEFAULT, FK_UPDATE_ACTION_NULL, FK_UPDATE_ACTION_RESTRICT, GET_GENERATED_KEYS_STATEMENT, INCLUDE_ORDERBY_COLS_IN_SELECT, LOCK_OPTION_PLACED_AFTER_FROM, LOCK_OPTION_PLACED_WITHIN_JOIN, LOCK_WITH_SELECT_FOR_UPDATE, NULL_EQUALS_EMPTY_STRING, NULLS_IN_CANDIDATE_KEYS, NULLS_KEYWORD_IN_COLUMN_OPTIONS, ORDERBY_USING_SELECT_COLUMN_INDEX, PERSIST_OF_UNASSIGNED_CHAR, PRIMARYKEY_IN_CREATE_STATEMENTS, STATEMENT_BATCHING, 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, USE_UNION_ALL, VIEWS
 
Fields inherited from interface org.datanucleus.store.mapped.DatastoreAdapter
ANALYSIS_METHODS, BIT_IS_REALLY_BOOLEAN, BOOLEAN_COMPARISON, CATALOGS_IN_TABLE_DEFINITIONS, ESCAPE_EXPRESSION_IN_LIKE_PREDICATE, IDENTIFIERS_LOWERCASE, IDENTIFIERS_LOWERCASE_QUOTED, IDENTIFIERS_MIXEDCASE, IDENTIFIERS_MIXEDCASE_QUOTED, IDENTIFIERS_MIXEDCASE_QUOTED_SENSITIVE, IDENTIFIERS_MIXEDCASE_SENSITIVE, IDENTIFIERS_UPPERCASE, IDENTIFIERS_UPPERCASE_QUOTED, IDENTITY_COLUMNS, PROJECTION_IN_TABLE_REFERENCE_JOINS, SCHEMAS_IN_TABLE_DEFINITIONS, SEQUENCES
 
Constructor Summary
InformixAdapter(java.sql.DatabaseMetaData metadata)
          Constructor.
 
Method Summary
 org.datanucleus.store.mapped.expression.BooleanExpression endsWithMethod(org.datanucleus.store.mapped.expression.ScalarExpression leftOperand, org.datanucleus.store.mapped.expression.ScalarExpression rightOperand)
          Returns whether this string ends with the specified string.
 java.lang.String getAddCandidateKeyStatement(CandidateKey ck, org.datanucleus.store.mapped.IdentifierFactory factory)
          Returns the appropriate SQL to add a candidate key to its table.
 java.lang.String getAddForeignKeyStatement(ForeignKey fk, org.datanucleus.store.mapped.IdentifierFactory factory)
          Returns the appropriate SQL to add a foreign key to its table.
 java.lang.String getAddPrimaryKeyStatement(PrimaryKey pk, org.datanucleus.store.mapped.IdentifierFactory factory)
          Informix 11.x does not support ALTER TABLE to define a primary key
 java.lang.String getAutoIncrementKeyword()
          Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).
 java.lang.String getAutoIncrementStmt(Table table, java.lang.String columnName)
          Accessor for the autoincrement sql access statement for this datastore.
 java.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.
 org.datanucleus.store.mapped.expression.NumericExpression getNumericExpressionForMethod(java.lang.String method, org.datanucleus.store.mapped.expression.ScalarExpression expr)
          Accessor for a numeric expression to represent the method call, with passed argument.
 java.lang.String getVendorID()
           
 org.datanucleus.store.mapped.expression.NumericExpression indexOfMethod(org.datanucleus.store.mapped.expression.ScalarExpression source, org.datanucleus.store.mapped.expression.ScalarExpression str, org.datanucleus.store.mapped.expression.NumericExpression from)
          Returns the appropriate SQL expression for the JDOQL String.indexOf() method.
 void initialiseDatastore(java.lang.Object conn)
          Creates the auxiliary functions/procedures in the schema
 org.datanucleus.store.mapped.expression.NumericExpression modOperator(org.datanucleus.store.mapped.expression.ScalarExpression operand1, org.datanucleus.store.mapped.expression.ScalarExpression operand2)
          Method to generate a modulus expression.
 SQLTypeInfo newSQLTypeInfo(java.sql.ResultSet rs)
          Create a new SQL type info from the current row of the passed ResultSet.
 org.datanucleus.store.mapped.expression.LogicSetExpression newTableExpression(org.datanucleus.store.mapped.expression.QueryExpression qs, org.datanucleus.store.mapped.DatastoreContainerObject table, org.datanucleus.store.mapped.DatastoreIdentifier rangeVar)
          Returns a new TableExpression object appropriate for this DBMS.
 org.datanucleus.store.mapped.expression.BooleanExpression startsWithMethod(org.datanucleus.store.mapped.expression.ScalarExpression source, org.datanucleus.store.mapped.expression.ScalarExpression str)
          Method to handle the starts with operation.
 org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str, org.datanucleus.store.mapped.expression.NumericExpression begin)
          Returns the appropriate SQL expression for the JDOQL String.substring(str,begin) method.
 org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str, org.datanucleus.store.mapped.expression.NumericExpression begin, org.datanucleus.store.mapped.expression.NumericExpression end)
          Returns the appropriate SQL expression for the JDOQL String.substring(str,begin,end) method.
 
Methods inherited from class org.datanucleus.store.rdbms.adapter.DatabaseAdapter
addSQLTypeForJDBCType, cartersianProduct, concatOperator, getAdapterTime, getAddColumnStatement, getCatalogName, getCatalogSeparator, getCheckConstraintForValues, getColumns, getConnection, getContinuationString, getCreateIndexStatement, getCreateTableStatement, getCurrentDateMethod, getCurrentTimeMethod, getCurrentTimestampMethod, getDatastoreIdentifierMaxLength, getDatastoreMajorVersion, getDatastoreMinorVersion, getDriverMajorVersion, getDriverMinorVersion, getDropTableStatement, getDropViewStatement, getEscapeCharacter, getEscapedPatternExpression, getEscapePatternExpression, getExistingIndexes, getInsertStatementForNoColumns, getMapping, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNewUUIDFunction, getNonAnsiInnerJoinWhereClause, getNonAnsiLeftOuterJoinWhereClause, getNonAnsiRightOuterJoinWhereClause, getNumericConversionFunction, getOperatorConcat, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getRangeByLimitSelectClause, getRangeByLimitWhereClause, getRangeByRowNumberColumn, getRequiredTransactionIsolationLevel, getSchemaName, getSelectForUpdateText, getSelectNewUUIDStmt, getSelectWithLockOption, getSequenceCreateStmt, getSequenceNextStmt, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getValueForProperty, initialiseTypes, isIdentityFieldDataType, isKeyword, isReservedKeyword, isValidPrimaryKeyType, iteratorReservedWords, logConfiguration, lowerMethod, matchesMethod, newFKInfo, newQueryStatement, newRDBMSColumnInfo, parseKeywordList, removeUnsupportedMappings, setProperties, supportsOption, supportsQueryFetchSize, supportsTransactionIsolation, toNumericExpression, toString, toStringExpression, toStringExpression, translateMethod, trimMethod, upperMethod
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

InformixAdapter

public InformixAdapter(java.sql.DatabaseMetaData metadata)
Constructor.

Parameters:
metadata - MetaData for the DB
Method Detail

initialiseDatastore

public void initialiseDatastore(java.lang.Object conn)
Creates the auxiliary functions/procedures in the schema

Specified by:
initialiseDatastore in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
initialiseDatastore in class DatabaseAdapter
Parameters:
conn - the connection to the datastore

getVendorID

public java.lang.String getVendorID()
Specified by:
getVendorID in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getVendorID in class DatabaseAdapter

newSQLTypeInfo

public SQLTypeInfo newSQLTypeInfo(java.sql.ResultSet rs)
Description copied from interface: RDBMSAdapter
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 interface RDBMSAdapter
Overrides:
newSQLTypeInfo in class DatabaseAdapter
Parameters:
rs - ResultSet
Returns:
The SQL type info

getIdentifierQuoteString

public java.lang.String getIdentifierQuoteString()
Accessor for an identifier quote string.

Specified by:
getIdentifierQuoteString in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getIdentifierQuoteString in class DatabaseAdapter
Returns:
Identifier quote string.

getAutoIncrementStmt

public java.lang.String getAutoIncrementStmt(Table table,
                                             java.lang.String columnName)
Accessor for the autoincrement sql access statement for this datastore.

Specified by:
getAutoIncrementStmt in interface RDBMSAdapter
Overrides:
getAutoIncrementStmt in class DatabaseAdapter
Parameters:
table - Name of the table that the autoincrement is for
columnName - Name of the column that the autoincrement is for
Returns:
The statement for getting the latest auto-increment key

getAutoIncrementKeyword

public java.lang.String getAutoIncrementKeyword()
Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).

Specified by:
getAutoIncrementKeyword in interface RDBMSAdapter
Overrides:
getAutoIncrementKeyword in class DatabaseAdapter
Returns:
The keyword for a column using auto-increment

getAddPrimaryKeyStatement

public java.lang.String getAddPrimaryKeyStatement(PrimaryKey pk,
                                                  org.datanucleus.store.mapped.IdentifierFactory factory)
Informix 11.x does not support ALTER TABLE to define a primary key

Specified by:
getAddPrimaryKeyStatement in interface RDBMSAdapter
Overrides:
getAddPrimaryKeyStatement in class DatabaseAdapter
Parameters:
pk - An object describing the primary key.
factory - Identifier factory
Returns:
The PK statement

getAddForeignKeyStatement

public java.lang.String getAddForeignKeyStatement(ForeignKey fk,
                                                  org.datanucleus.store.mapped.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 interface RDBMSAdapter
Overrides:
getAddForeignKeyStatement in class DatabaseAdapter
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,
                                                    org.datanucleus.store.mapped.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 UNIQUE (BAZ)
 ALTER TABLE FOO ADD UNIQUE (BAZ)
 

Specified by:
getAddCandidateKeyStatement in interface RDBMSAdapter
Overrides:
getAddCandidateKeyStatement in class DatabaseAdapter
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 interface RDBMSAdapter
Overrides:
getDatastoreDateStatement in class DatabaseAdapter
Returns:
SQL statement to get the datastore date

newTableExpression

public org.datanucleus.store.mapped.expression.LogicSetExpression newTableExpression(org.datanucleus.store.mapped.expression.QueryExpression qs,
                                                                                     org.datanucleus.store.mapped.DatastoreContainerObject table,
                                                                                     org.datanucleus.store.mapped.DatastoreIdentifier rangeVar)
Returns a new TableExpression object appropriate for this DBMS. This should be an instance of one of the three built-in styles of table expression: TableExprAsSubjoins is the default, which arguably produces the most readable SQL but doesn't work on all DBMS's. TableExprAsSubjoins should work anywhere, but may be less efficient.

Specified by:
newTableExpression in interface RDBMSAdapter
Overrides:
newTableExpression in class DatabaseAdapter
Parameters:
qs - The query statement in which the table expression will be included.
table - The main table in the expression.
rangeVar - The SQL alias, or "range variable", to assign to the expression or to the main table.
Returns:
The expression

indexOfMethod

public org.datanucleus.store.mapped.expression.NumericExpression indexOfMethod(org.datanucleus.store.mapped.expression.ScalarExpression source,
                                                                               org.datanucleus.store.mapped.expression.ScalarExpression str,
                                                                               org.datanucleus.store.mapped.expression.NumericExpression from)
Returns the appropriate SQL expression for the JDOQL String.indexOf() method. It should return something like:

 STRPOS(str, substr [, pos])-1
 
since STRPOS returns the first character as position 1. Similarly the "pos" is based on the first position being 1.

Specified by:
indexOfMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
indexOfMethod in class DatabaseAdapter
Parameters:
source - The expression we want to search.
str - The argument to the indexOf() method.
from - The from position
Returns:
The text of the SQL expression.

startsWithMethod

public org.datanucleus.store.mapped.expression.BooleanExpression startsWithMethod(org.datanucleus.store.mapped.expression.ScalarExpression source,
                                                                                  org.datanucleus.store.mapped.expression.ScalarExpression str)
Method to handle the starts with operation.

Specified by:
startsWithMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
startsWithMethod in class DatabaseAdapter
Parameters:
source - The expression with the searched string
str - The expression for the search string
Returns:
The expression.

endsWithMethod

public org.datanucleus.store.mapped.expression.BooleanExpression endsWithMethod(org.datanucleus.store.mapped.expression.ScalarExpression leftOperand,
                                                                                org.datanucleus.store.mapped.expression.ScalarExpression rightOperand)
Returns whether this string ends with the specified string.

Specified by:
endsWithMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
endsWithMethod in class DatabaseAdapter
Parameters:
leftOperand - the source string
rightOperand - The string to compare against.
Returns:
Whether it ends with the string.

getNumericExpressionForMethod

public org.datanucleus.store.mapped.expression.NumericExpression getNumericExpressionForMethod(java.lang.String method,
                                                                                               org.datanucleus.store.mapped.expression.ScalarExpression expr)
Accessor for a numeric expression to represent the method call, with passed argument.

Specified by:
getNumericExpressionForMethod in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getNumericExpressionForMethod in class DatabaseAdapter
Parameters:
method - The method (case insensitive)
expr - The argument to the method
Returns:
The numeric expression that results

substringMethod

public org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str,
                                                                                org.datanucleus.store.mapped.expression.NumericExpression begin)
Description copied from class: DatabaseAdapter
Returns the appropriate SQL expression for the JDOQL String.substring(str,begin) method. It should return something like:

 SUBSTRING(str FROM begin)
 
Note that the value of begin is base 0(Java-style), while most SQL string functions use base 1.

Specified by:
substringMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
substringMethod in class DatabaseAdapter
Parameters:
str - The first argument to the substring() method.
begin - The second argument to the substring() method.
Returns:
The text of the SQL expression.

substringMethod

public org.datanucleus.store.mapped.expression.StringExpression substringMethod(org.datanucleus.store.mapped.expression.StringExpression str,
                                                                                org.datanucleus.store.mapped.expression.NumericExpression begin,
                                                                                org.datanucleus.store.mapped.expression.NumericExpression end)
Description copied from class: DatabaseAdapter
Returns the appropriate SQL expression for the JDOQL String.substring(str,begin,end) method. It should return something like:

 SUBSTRING(str FROM begin FOR len)
 
Note that the value of begin is base 0 (Java-style), while most SQL string functions use base 1. Note also that an end position is given, while most SQL substring functions take a length.

Specified by:
substringMethod in interface org.datanucleus.store.mapped.expression.ExpressionMethodAdapter
Overrides:
substringMethod in class DatabaseAdapter
Parameters:
str - The first argument to the substring() method.
begin - The second argument to the substring() method.
end - The third argument to the substring() method.
Returns:
The text of the SQL expression.

modOperator

public org.datanucleus.store.mapped.expression.NumericExpression modOperator(org.datanucleus.store.mapped.expression.ScalarExpression operand1,
                                                                             org.datanucleus.store.mapped.expression.ScalarExpression operand2)
Method to generate a modulus expression. The binary % operator is said to yield the remainder of its operands from an implied division; the left-hand operand is the dividend and the right-hand operand is the divisor. This returns MOD(expr1, expr2).

Specified by:
modOperator in interface org.datanucleus.store.mapped.DatastoreAdapter
Specified by:
modOperator in interface org.datanucleus.store.mapped.expression.ExpressionOperatorAdapter
Overrides:
modOperator in class DatabaseAdapter
Parameters:
operand1 - the left expression
operand2 - the right expression
Returns:
The Expression for modulus


Copyright © 2009. All Rights Reserved.