EclipseLink 2.5.3, build 'v20180808-e38c757' API Reference

org.eclipse.persistence.platform.database
Class Informix11Platform

java.lang.Object
  extended by org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      extended by org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
          extended by org.eclipse.persistence.platform.database.DatabasePlatform
              extended by org.eclipse.persistence.platform.database.InformixPlatform
                  extended by org.eclipse.persistence.platform.database.Informix11Platform
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, org.eclipse.persistence.internal.core.databaseaccess.CorePlatform<org.eclipse.persistence.internal.helper.ConversionManager>, org.eclipse.persistence.internal.databaseaccess.Platform

public class Informix11Platform
extends InformixPlatform

An InformixPlatform that fixes many EclipseLink bugs related to Informix support.

See Also:
EclipseLink bug 401393, EclipseLink bug 401718, EclipseLink bug 401746, EclipseLink bug 402037, EclipseLink bug 402180, EclipseLink bug 402600, EclipseLink bug 402953, EclipseLink bug 405645, Serialized Form

Field Summary
 
Fields inherited from class org.eclipse.persistence.platform.database.DatabasePlatform
DEFAULT_VARCHAR_SIZE
 
Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
batchWritingMechanism, castSizeForVarcharParameter, classTypes, cursorCode, DEFAULT_MAX_BATCH_WRITING_SIZE, DEFAULT_PARAMETERIZED_MAX_BATCH_WRITING_SIZE, driverName, fieldTypes, IS_VALID_TIMEOUT, isCastRequired, maxBatchWritingSize, partitioningCallback, pingSQL, printInnerJoinInWhereClause, printOuterJoinInWhereClause, shouldBindAllParameters, shouldBindLiterals, shouldCacheAllStatements, shouldCreateIndicesOnForeignKeys, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldOptimizeDataConversion, shouldTrimStrings, statementCacheSize, stringBindingSize, structConverters, supportsAutoCommit, tableCreationSuffix, transactionIsolation, typeConverters, Types_NCLOB, Types_SQLXML, useJDBCStoredProcedureSyntax, useRownumFiltering, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesStreamsForBinding, usesStringBinding
 
Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
conversionManager, dataTypesConvertedFromAClass, dataTypesConvertedToAClass, defaultNativeSequenceToTable, defaultSequence, endDelimiter, platformOperators, sequences, sequencesLock, startDelimiter, tableQualifier, timestampQuery
 
Constructor Summary
Informix11Platform()
          Creates a new JenzabarInformixPlatform.
 
Method Summary
protected  void appendBoolean(java.lang.Boolean booleanValue, java.io.Writer writer)
          Fixes
protected  ExpressionOperator currentDateOperator()
          Fixes
protected  ExpressionOperator currentTimeOperator()
          Fixes
 boolean dontBindUpdateAllQueryUsingTempTables()
          Returns true when invoked to indicate that parameter binding must not be used when working with temporary tables as part of an UPDATE query.
protected  java.lang.String getCreateTempTableSqlPrefix()
          Returns CREATE TEMP TABLE when invoked, per the Informix 11.70 Information Center documentation.
protected  java.lang.String getCreateTempTableSqlSuffix()
          Returns WITH NO LOG when invoked, per the Informix 11.70 Information Center documentation, since transactions are not needed on temp tables for the purposes for which EclipseLink uses them.
 java.lang.Object getObjectFromResultSet(java.sql.ResultSet resultSet, int columnNumber, int jdbcType, org.eclipse.persistence.internal.sessions.AbstractSession session)
          Overrides DatabasePlatform.getObjectFromResultSet(ResultSet, int, int, AbstractSession) so that if the supplied jdbcType is equal to Types.LONGVARCHAR, then the ResultSet.getString(int) method (instead of the ResultSet.getObject(int) method) is used to fetch the "raw" value of the column indicated by the supplied columnNumber from the supplied ResultSet.
 org.eclipse.persistence.internal.helper.DatabaseTable getTempTableForTable(org.eclipse.persistence.internal.helper.DatabaseTable table)
          Overrides the superclass implementation to return a new DatabaseTable with no DatabaseTable.getTableQualifier().
protected  void initializePlatformOperators()
          Fixes
 boolean isInformixOuterJoin()
          Overrides the default behavior to return false, indicating that ANSI OUTER JOIN syntax should be used, since all modern versions of Informix support it.
 boolean shouldAlwaysUseTempStorageForModifyAll()
          Returns true when invoked to force Informix to use temporary storage when constructing bulk UPDATE statements.
 boolean supportsLocalTempTables()
          Returns true when invoked to indicate that Informix does indeed support local temporary tables.
 void writeUpdateOriginalFromTempTableSql(java.io.Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, java.util.Collection pkFields, java.util.Collection assignedFields)
          Overrides DatabasePlatform.writeUpdateOriginalFromTempTableSql(Writer, DatabaseTable, Collection, Collection) to ensure that a SET clause that is supposed to set a value for only one column does not wrap that column name in parentheses.
 
Methods inherited from class org.eclipse.persistence.platform.database.InformixPlatform
appendCalendar, appendDate, appendInformixCalendar, appendInformixTimestamp, appendTime, appendTimestamp, buildFieldTypes, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, getMaxFieldNameSize, getSelectForUpdateString, isAlterSequenceObjectSupported, isInformix, maximumNumericValues, minimumNumericValues, printFieldIdentityClause, requiresProcedureCallBrackets, shouldPrintConstraintNameAfter, shouldSelectIncludeOrderBy, supportsIdentity, supportsSequenceObjects
 
Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
addBatch, addStructConverter, allowsSizeInProcedureArguments, appendByteArray, appendLiteralToCall, appendLiteralToCallWithBinding, appendNumber, appendParameter, appendParameterInternal, appendString, autoCommit, beginTransaction, buildBatchCriteria, buildBatchCriteriaForComplexId, buildCallWithReturning, buildClassTypes, buildCreateIndex, buildCreateIndex, buildDropIndex, buildDropIndex, buildProcedureCallString, buildSequenceObjectAlterIncrementWriter, buildSequenceObjectCreationWriter, buildSequenceObjectDeletionWriter, canBatchWriteWithOptimisticLocking, canBuildCallWithReturning, commitTransaction, computeMaxRowsForSQL, convertToDatabaseType, copyInto, createArray, createArray, createPlatformDefaultSequence, createStruct, createStruct, executeBatch, executeStoredProcedure, freeTemporaryObject, getAssignmentString, getBatchBeginString, getBatchDelimiterString, getBatchEndString, getBatchRowCountAssignString, getBatchRowCountDeclareString, getBatchRowCountReturnString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConstraintDeletionString, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDropCascadeString, getDropDatabaseSchemaString, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIdentifierQuoteCharacter, getIndexNamePrefix, getInOutputProcedureToken, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getOutputProcedureToken, getPartitioningCallback, getPingSQL, getProcedureArgumentSetter, getProcedureArgumentString, getProcedureAsString, getProcedureBeginString, getProcedureCallHeader, getProcedureCallTail, getProcedureEndString, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateNoWaitString, getSelectForUpdateOfString, getSelectForUpdateWaitString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureParameterPrefix, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTransactionIsolation, getTypeConverters, getUniqueConstraintDeletionString, getVPDClearIdentifierQuery, getVPDCreationFunctionString, getVPDCreationPolicyString, getVPDDeletionString, getVPDSetIdentifierQuery, hasPartitioningCallback, initialize, initializeConnectionData, isCastRequired, isDynamicSQLRequiredForFunctions, isForUpdateCompatibleWithDistinct, isJDBCExecuteCompliant, isLobCompatibleWithDistinct, isLockTimeoutException, isNullAllowedInSelectClause, isOutputAllowWithResultSet, isRowCountOutputParameterRequired, isXDBDocument, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldNullClause, printFieldTypeSize, printFieldTypeSize, printFieldUnique, printFieldUnique, printSQLSelectStatement, printStoredFunctionReturnKeyWord, printValuelist, printValuelist, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureBrackets, requiresProcedureCallOuputToken, requiresTableInIndexDropDDL, requiresTypeNameToRegisterOutputParameter, requiresUniqueConstraintCreationOnTableCreate, retrieveFirstPrimaryKeyOrOne, rollbackTransaction, setBatchWritingMechanism, setCastSizeForVarcharParameter, setClassTypes, setCursorCode, setDriverName, setFieldTypes, setIsCastRequired, setMaxBatchWritingSize, setNullFromDatabaseField, setParameterValueInDatabaseCall, setPartitioningCallback, setPingSQL, setPrintInnerJoinInWhereClause, setPrintOuterJoinInWhereClause, setSequenceCounterFieldName, setSequenceNameFieldName, setSequenceTableName, setShouldBindAllParameters, setShouldBindLiterals, setShouldCacheAllStatements, setShouldCreateIndicesOnForeignKeys, setShouldForceFieldNamesToUpperCase, setShouldIgnoreCaseOnFieldComparisons, setShouldOptimizeDataConversion, setShouldTrimStrings, setShouldUseRownumFiltering, setStatementCacheSize, setStringBindingSize, setSupportsAutoCommit, setTableCreationSuffix, setTransactionIsolation, setUseJDBCStoredProcedureSyntax, setUsesBatchWriting, setUsesByteArrayBinding, setUsesJDBCBatchWriting, setUsesNativeBatchWriting, setUsesNativeSQL, setUsesStreamsForBinding, setUsesStringBinding, shouldBindAllParameters, shouldBindLiterals, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldIgnoreException, shouldOptimizeDataConversion, shouldPrintAliasForUpdate, shouldPrintFieldIdentityClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenAtStart, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureArgumentNameInCall, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseJDBCOuterJoinSyntax, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsAutoConversionToNumericForArithmeticOperations, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsGlobalTempTables, supportsIndexes, supportsIndividualTableLocking, supportsLockingQueriesWithMultipleTables, supportsNestingOuterJoins, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsStoredFunctions, supportsTempTables, supportsUniqueColumns, supportsUniqueKeyConstraints, supportsVPD, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesSequenceTable, usesStreamsForBinding, usesStringBinding, wasFailureCommunicationBased, writeAddColumnClause, writeAutoAssignmentSetClause, writeAutoJoinWhereClause, writeCleanUpTempTableSql, writeCreateTempTableSql, writeDeleteFromTargetTableUsingTempTableSql, writeFields, writeFieldsAutoClause, writeFieldsList, writeInsertIntoTableSql, writeJoinWhereClause, writeLOB, writeParameterMarker, writeTableCreationSuffix
 
Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, clone, convertObject, createConnectionCustomizer, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSequence, getDefaultSequenceToWrite, getEndDelimiter, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getTimestampQuery, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, isAccess, isAttunity, isCloudscape, isDB2, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isMaxDB, isMySQL, isODBC, isOracle, isOracle9, isPervasive, isPointBase, isPostgreSQL, isSQLAnywhere, isSQLServer, isSybase, isSymfoware, isTimesTen, isTimesTen7, removeAllSequences, removeSequence, sequencesAfterCloneCleanup, setConversionManager, setDefaultNativeSequenceToTable, setDefaultSequence, setEndDelimiter, setSelectSequenceNumberQuery, setSequencePreallocationSize, setSequences, setStartDelimiter, setTableQualifier, setTimestampQuery, setUpdateSequenceQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, supportsNativeSequenceNumbers, toString, usesPlatformDefaultSequence
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Informix11Platform

public Informix11Platform()
Creates a new JenzabarInformixPlatform. Calls DatabasePlatform.setShouldBindLiterals(boolean) with false as a parameter value.

See Also:
EclipseLink bug 401718
Method Detail

initializePlatformOperators

protected void initializePlatformOperators()
Fixes EclipseLink bug 402600 by making sure that the Distinct ExpressionOperator is set to print as DISTINCT&nbsp; (no parentheses, one trailing space), and fixes EclipseLink bug 402953 by adding platform operators for current date and current time.

Overrides:
initializePlatformOperators in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
See Also:
currentDateOperator(), currentTimeOperator(), EclipseLink bug 402600, EclipseLink bug 402953

currentDateOperator

protected ExpressionOperator currentDateOperator()
Fixes EclipseLink bug 402953 by returning the result of running the following code: ExpressionOperator.simpleFunctionNoParentheses(ExpressionOperator.CurrentDate, "CURRENT YEAR TO DAY");

Returns:
a non-null ExpressionOperator
See Also:
EclipseLink bug 402953

currentTimeOperator

protected ExpressionOperator currentTimeOperator()
Fixes EclipseLink bug 402953 by returning the result of running the following code: ExpressionOperator.simpleFunctionNoParentheses(ExpressionOperator.CurrentDate, "CURRENT YEAR TO FRACTION(3)");

Returns:
a non-null ExpressionOperator EclipseLink bug 402953

isInformixOuterJoin

public boolean isInformixOuterJoin()
Overrides the default behavior to return false, indicating that ANSI OUTER JOIN syntax should be used, since all modern versions of Informix support it.

Overrides:
isInformixOuterJoin in class InformixPlatform
Returns:
false when invoked
See Also:
EclipseLink bug 401393

appendBoolean

protected void appendBoolean(java.lang.Boolean booleanValue,
                             java.io.Writer writer)
                      throws java.io.IOException
Fixes EclipseLink bug 401746 by writing out either 't' or 'f'—with single quotes— instead of 1 or 0.

Overrides:
appendBoolean in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Parameters:
booleanValue - a non-null Boolean to append
writer - a non-null Writer to append the literal value to
Throws:
java.lang.IllegalArgumentException - if either booleanValue or writer is null
java.io.IOException - if the supplied Writer throws an IOException
See Also:
EclipseLink bug 401393

dontBindUpdateAllQueryUsingTempTables

public boolean dontBindUpdateAllQueryUsingTempTables()
Returns true when invoked to indicate that parameter binding must not be used when working with temporary tables as part of an UPDATE query.

Parsing the English is a little difficult in this method name. It means: "Do not bind parameters in queries that are part of an overall 'update all' operation where temporary tables are being used."

Overrides:
dontBindUpdateAllQueryUsingTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Returns:
true when invoked
See Also:
EclipseLink bug 402037

shouldAlwaysUseTempStorageForModifyAll

public boolean shouldAlwaysUseTempStorageForModifyAll()
Returns true when invoked to force Informix to use temporary storage when constructing bulk UPDATE statements.

Overrides:
shouldAlwaysUseTempStorageForModifyAll in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Returns:
true in all cases
See Also:
EclipseLink bug 402037

supportsLocalTempTables

public boolean supportsLocalTempTables()
Returns true when invoked to indicate that Informix does indeed support local temporary tables.

local is defined by EclipseLink in DatabasePlatform to mean:

"Local" means that several threads may create temporary tables with the same name. Local temporary table is created in the beginning of UpdateAllQuery execution and dropped in the end of it.

Overrides:
supportsLocalTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Returns:
true when invoked
See Also:
EclipseLink bug 402037

getCreateTempTableSqlPrefix

protected java.lang.String getCreateTempTableSqlPrefix()
Returns CREATE TEMP TABLE when invoked, per the Informix 11.70 Information Center documentation.

While Informix 11.70 supports an additional IF NOT EXISTS clause, Informix 11.50 does not, so this method does not add the IF NOT EXISTS clause. In practice this should be fine as temporary tables are scoped to the Informix session, and EclipseLink takes care of cleaning up any temporary tables that it creates.

Overrides:
getCreateTempTableSqlPrefix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Returns:
CREATE TEMP TABLE when invoked
See Also:
EclipseLink bug 402037

getTempTableForTable

public org.eclipse.persistence.internal.helper.DatabaseTable getTempTableForTable(org.eclipse.persistence.internal.helper.DatabaseTable table)
Overrides the superclass implementation to return a new DatabaseTable with no DatabaseTable.getTableQualifier(). Informix 11.50 and above do not support table qualifiers of any kind on temporary tables.

Overrides:
getTempTableForTable in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Parameters:
table - the DatabaseTable for which a temporary DatabaseTable should be returned; must not be null
Returns:
a new DatabaseTable with no table qualifier
Throws:
java.lang.IllegalArgumentException - if table is null
See Also:
EclipseLink bug 402037, EclipseLink bug 402180

getCreateTempTableSqlSuffix

protected java.lang.String getCreateTempTableSqlSuffix()
Returns WITH NO LOG when invoked, per the Informix 11.70 Information Center documentation, since transactions are not needed on temp tables for the purposes for which EclipseLink uses them.

Overrides:
getCreateTempTableSqlSuffix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Returns:
WITH NO LOG when invoked
See Also:
EclipseLink bug 402037

writeUpdateOriginalFromTempTableSql

public void writeUpdateOriginalFromTempTableSql(java.io.Writer writer,
                                                org.eclipse.persistence.internal.helper.DatabaseTable table,
                                                java.util.Collection pkFields,
                                                java.util.Collection assignedFields)
                                         throws java.io.IOException
Overrides DatabasePlatform.writeUpdateOriginalFromTempTableSql(Writer, DatabaseTable, Collection, Collection) to ensure that a SET clause that is supposed to set a value for only one column does not wrap that column name in parentheses.

The code for this method is identical to that of the stock H2Platform, since the H2 database has the same requirement.

Overrides:
writeUpdateOriginalFromTempTableSql in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Parameters:
writer - the Writer that will be writing SQL; must not be null
table - the DatabaseTable to be updated; must not be null
pkFields - a Collection of DatabaseFields each of which is a primary key of the table to be updated; must not be null
assignedFields - a Collection of DatabaseFields that are receiving updated values; must not be null
Throws:
java.io.IOException - if an input/output error is thrown by the supplied Writer
java.lang.NullPointerException - if any of the supplied parameters is null
See Also:
EclipseLink bug 402037

getObjectFromResultSet

public java.lang.Object getObjectFromResultSet(java.sql.ResultSet resultSet,
                                               int columnNumber,
                                               int jdbcType,
                                               org.eclipse.persistence.internal.sessions.AbstractSession session)
                                        throws java.sql.SQLException
Overrides DatabasePlatform.getObjectFromResultSet(ResultSet, int, int, AbstractSession) so that if the supplied jdbcType is equal to Types.LONGVARCHAR, then the ResultSet.getString(int) method (instead of the ResultSet.getObject(int) method) is used to fetch the "raw" value of the column indicated by the supplied columnNumber from the supplied ResultSet.

This works around an issue with the Informix JDBC driver, version 3.70.JC7 and earlier, where a TEXT column is reported to be mappable to the JDBC type of LONGVARCHAR, but the actual object returned by ResultSet.getObject(int) is a byte[] (instead of either a char[] or a String). Invoking ResultSet.getString(int) instead returns the desired result.

Overrides:
getObjectFromResultSet in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
Parameters:
resultSet - the ResultSet to get an Object from; may be null
columnNumber - the 1-based column number indicating the column to use
jdbcType - an int indicating the JDBC type of which the column in the ResultSet indicated by the supplied columnNumber is expected to be
session - an AbstractSession that, when used at all, is passed to the superclass implementation of this method; may be null
Returns:
the Object resulting from a call to ResultSet.getObject(int); may be null
Throws:
java.sql.SQLException - if any error occurs
See Also:
EclipseLink bug 405645

EclipseLink 2.5.3, build 'v20180808-e38c757' API Reference