Class Informix11Platform
- All Implemented Interfaces:
Serializable
,Cloneable
,org.eclipse.persistence.internal.core.databaseaccess.CorePlatform<org.eclipse.persistence.internal.helper.ConversionManager>
,org.eclipse.persistence.internal.databaseaccess.Platform
InformixPlatform
that fixes many EclipseLink bugs
related to Informix support.-
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, driverSupportsNationalCharacterVarying, fieldTypes, IS_VALID_TIMEOUT, isCastRequired, maxBatchWritingSize, partitioningCallback, pingSQL, printInnerJoinInWhereClause, printOuterJoinInWhereClause, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesOnForeignKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldOptimizeDataConversion, shouldTrimStrings, statementCacheSize, storedProcedureTerminationToken, stringBindingSize, structConverters, supportsAutoCommit, tableCreationSuffix, transactionIsolation, typeConverters, useJDBCStoredProcedureSyntax, useNationalCharacterVarying, useRownumFiltering, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesStreamsForBinding, usesStringBinding
Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
conversionManager, dataTypesConvertedFromAClass, dataTypesConvertedToAClass, defaultNativeSequenceToTable, defaultSeqenceAtNextValue, defaultSequence, endDelimiter, platformOperators, sequences, sequencesLock, startDelimiter, supportsReturnGeneratedKeys, tableQualifier, timestampQuery
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
appendBoolean
(Boolean booleanValue, Writer writer) Fixes EclipseLink bug 401746 by writing out either't'
or'f'
—with single quotes— instead of1
or0
.protected ExpressionOperator
Fixes EclipseLink bug 402953 by returning the result of running the following code:ExpressionOperator.simpleFunctionNoParentheses(ExpressionOperator.CurrentDate, "CURRENT YEAR TO DAY");
protected ExpressionOperator
Fixes EclipseLink bug 402953 by returning the result of running the following code:ExpressionOperator.simpleFunctionNoParentheses(ExpressionOperator.CurrentDate, "CURRENT YEAR TO FRACTION(3)");
protected ExpressionOperator
Fixes EclipseLink bug 402600 by making sure that theDistinct
ExpressionOperator
is set to print asDISTINCT
(no parentheses, one trailing space), and fixesboolean
Returnstrue
when invoked to indicate that parameter binding must not be used when working with temporary tables as part of anUPDATE
query.protected String
ReturnsCREATE TEMP TABLE
when invoked, per the Informix 11.70 Information Center documentation.protected String
ReturnsWITH 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.getObjectFromResultSet
(ResultSet resultSet, int columnNumber, int jdbcType, org.eclipse.persistence.internal.sessions.AbstractSession session) OverridesDatabasePlatform.getObjectFromResultSet(ResultSet, int, int, AbstractSession)
so that if the suppliedjdbcType
is equal toTypes.LONGVARCHAR
, then theResultSet.getString(int)
method (instead of theResultSet.getObject(int)
method) is used to fetch the "raw" value of the column indicated by the suppliedcolumnNumber
from the suppliedResultSet
.org.eclipse.persistence.internal.helper.DatabaseTable
getTempTableForTable
(org.eclipse.persistence.internal.helper.DatabaseTable table) Overrides the superclass implementation to return a newDatabaseTable
with no DatabaseTable.getTableQualifier().protected void
Fixes EclipseLink bug 402600 by making sure that theDistinct
ExpressionOperator
is set to print asDISTINCT
(no parentheses, one trailing space), and fixes EclipseLink bug 402953 by adding platform operators for current date and current time.boolean
Overrides the default behavior to returnfalse
, indicating that ANSIOUTER JOIN
syntax should be used, since all modern versions of Informix support it.boolean
Returnstrue
when invoked to force Informix to use temporary storage when constructing bulkUPDATE
statements.boolean
Returnstrue
when invoked to indicate that Informix does indeed support local temporary tables.void
writeUpdateOriginalFromTempTableSql
(Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, Collection pkFields, Collection assignedFields) OverridesDatabasePlatform.writeUpdateOriginalFromTempTableSql(Writer, DatabaseTable, Collection, Collection)
to ensure that aSET
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, initializeConnectionData, isAlterSequenceObjectSupported, isInformix, maximumNumericValues, minimumNumericValues, printFieldIdentityClause, printFieldTypeSize, requiresProcedureCallBrackets, shouldPrintConstraintNameAfter, shouldSelectIncludeOrderBy, supportsIdentity, supportsSequenceObjects
Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
addBatch, addStructConverter, allowBindingForSelectClause, allowsSizeInProcedureArguments, appendByteArray, appendLiteralToCall, appendLiteralToCallWithBinding, appendNumber, appendParameter, appendParameterInternal, appendString, autoCommit, beginTransaction, buildBatchCriteria, buildBatchCriteriaForComplexId, buildCallWithReturning, buildClassTypes, buildCreateIndex, buildCreateIndex, buildDropIndex, buildDropIndex, buildProcedureCallString, buildSequenceObjectAlterIncrementWriter, buildSequenceObjectCreationWriter, buildSequenceObjectDeletionWriter, canBatchWriteWithOptimisticLocking, canBuildCallWithReturning, checkTableExists, commitTransaction, computeMaxRowsForSQL, convertToDatabaseType, copyInto, createArray, createArray, createPlatformDefaultSequence, createStruct, createStruct, createStruct, executeBatch, executeStoredProcedure, freeTemporaryObject, getAssignmentString, getBatchBeginString, getBatchDelimiterString, getBatchEndString, getBatchRowCountAssignString, getBatchRowCountDeclareString, getBatchRowCountReturnString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConnectionUserName, getConstraintDeletionString, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getDropCascadeString, getDropDatabaseSchemaString, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIndexNamePrefix, getInOutputProcedureToken, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgument, getProcedureArgumentString, getProcedureAsString, getProcedureBeginString, getProcedureCallHeader, getProcedureCallTail, getProcedureEndString, getProcedureOptionList, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateNoWaitString, getSelectForUpdateOfString, getSelectForUpdateWaitString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureParameterPrefix, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTableExistsQuery, getTransactionIsolation, getTypeConverters, getUniqueConstraintDeletionString, getUseNationalCharacterVaryingTypeForString, getVPDClearIdentifierQuery, getVPDCreationFunctionString, getVPDCreationPolicyString, getVPDDeletionString, getVPDSetIdentifierQuery, hasPartitioningCallback, initialize, isCastRequired, isDynamicSQLRequiredForFunctions, isForUpdateCompatibleWithDistinct, isJDBCExecuteCompliant, isLobCompatibleWithDistinct, isLockTimeoutException, isNullAllowedInSelectClause, isOutputAllowWithResultSet, isRowCountOutputParameterRequired, isXDBDocument, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldNullClause, printFieldTypeSize, printFieldUnique, printFieldUnique, printSQLSelectStatement, printStoredFunctionReturnKeyWord, printValuelist, printValuelist, registerOutputParameter, registerOutputParameter, registerOutputParameter, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureBrackets, requiresProcedureCallOuputToken, requiresTableInIndexDropDDL, requiresTypeNameToRegisterOutputParameter, requiresUniqueConstraintCreationOnTableCreate, retrieveFirstPrimaryKeyOrOne, rollbackTransaction, setBatchWritingMechanism, setCastSizeForVarcharParameter, setClassTypes, setCursorCode, setDriverName, setDriverSupportsNVarChar, setFieldTypes, setIsCastRequired, setMaxBatchWritingSize, setNullFromDatabaseField, setNullFromDatabaseField, setParameterValueInDatabaseCall, setParameterValueInDatabaseCall, setPartitioningCallback, setPingSQL, setPrintInnerJoinInWhereClause, setPrintOuterJoinInWhereClause, setSequenceCounterFieldName, setSequenceNameFieldName, setSequenceTableName, setShouldBindAllParameters, setShouldBindLiterals, setShouldBindPartialParameters, setShouldCacheAllStatements, setShouldCreateIndicesOnForeignKeys, setShouldForceBindAllParameters, setShouldForceFieldNamesToUpperCase, setShouldIgnoreCaseOnFieldComparisons, setShouldOptimizeDataConversion, setShouldTrimStrings, setShouldUseRownumFiltering, setStatementCacheSize, setStoredProcedureTerminationToken, setStringBindingSize, setSupportsAutoCommit, setTableCreationSuffix, setTransactionIsolation, setUseJDBCStoredProcedureSyntax, setUseNationalCharacterVaryingTypeForString, setUsesBatchWriting, setUsesByteArrayBinding, setUsesJDBCBatchWriting, setUsesNativeBatchWriting, setUsesNativeSQL, setUsesStreamsForBinding, setUsesStringBinding, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldIgnoreException, shouldOptimizeDataConversion, shouldPrintAliasForUpdate, shouldPrintFieldIdentityClause, shouldPrintForUpdateClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenAtStart, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureArgumentNameInCall, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseJDBCOuterJoinSyntax, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsAutoConversionToNumericForArithmeticOperations, supportsConnectionUserName, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsGlobalTempTables, supportsIndexes, supportsIndividualTableLocking, supportsLockingQueriesWithMultipleTables, supportsNestingOuterJoins, supportsOrderByParameters, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsStoredFunctions, supportsTempTables, supportsUniqueColumns, supportsUniqueKeyConstraints, supportsVPD, supportsWaitForUpdate, 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, createExpressionFor, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSeqenceAtNextValue, getDefaultSequence, getDefaultSequenceToWrite, getEndDelimiter, getINClauseLimit, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getTimestampQuery, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, initIdentitySequences, isAccess, isAttunity, isCloudscape, isDB2, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isMaxDB, isMySQL, isODBC, isOracle, isOracle12, isOracle9, isPervasive, isPointBase, isPostgreSQL, isSQLAnywhere, isSQLServer, isSybase, isSymfoware, isTimesTen, isTimesTen7, removeAllSequences, removeIdentitySequences, removeSequence, sequencesAfterCloneCleanup, setConversionManager, setDefaultNativeSequenceToTable, setDefaultSeqenceAtNextValue, setDefaultSequence, setEndDelimiter, setSelectSequenceNumberQuery, setSequencePreallocationSize, setSequences, setStartDelimiter, setSupportsReturnGeneratedKeys, setTableQualifier, setTimestampQuery, setUpdateSequenceQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, supportsNativeSequenceNumbers, supportsReturnGeneratedKeys, toString, usesPlatformDefaultSequence
-
Constructor Details
-
Informix11Platform
public Informix11Platform()Creates a newInformix11Platform
. CallsDatabasePlatform.setShouldBindLiterals(boolean)
withfalse
as a parameter value.- See Also:
-
-
Method Details
-
initializePlatformOperators
protected void initializePlatformOperators()Fixes EclipseLink bug 402600 by making sure that theDistinct
ExpressionOperator
is set to print asDISTINCT
(no parentheses, one trailing space), and fixes EclipseLink bug 402953 by adding platform operators for current date and current time.- Overrides:
initializePlatformOperators
in classorg.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
- See Also:
-
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:
-
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
-
distinctOperator
Fixes EclipseLink bug 402600 by making sure that theDistinct
ExpressionOperator
is set to print asDISTINCT
(no parentheses, one trailing space), and fixes- See Also:
-
isInformixOuterJoin
public boolean isInformixOuterJoin()Overrides the default behavior to returnfalse
, indicating that ANSIOUTER JOIN
syntax should be used, since all modern versions of Informix support it.- Overrides:
isInformixOuterJoin
in classInformixPlatform
- Returns:
false
when invoked- See Also:
-
appendBoolean
Fixes EclipseLink bug 401746 by writing out either't'
or'f'
—with single quotes— instead of1
or0
.- Overrides:
appendBoolean
in classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Parameters:
booleanValue
- a non-null
Boolean
to appendwriter
- a non-null
Writer
to append the literal value to- Throws:
IllegalArgumentException
- if eitherbooleanValue
orwriter
isnull
IOException
- if the suppliedWriter
throws anIOException
- See Also:
-
dontBindUpdateAllQueryUsingTempTables
public boolean dontBindUpdateAllQueryUsingTempTables()Returnstrue
when invoked to indicate that parameter binding must not be used when working with temporary tables as part of anUPDATE
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 classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Returns:
true
when invoked- See Also:
-
shouldAlwaysUseTempStorageForModifyAll
public boolean shouldAlwaysUseTempStorageForModifyAll()Returnstrue
when invoked to force Informix to use temporary storage when constructing bulkUPDATE
statements.- Overrides:
shouldAlwaysUseTempStorageForModifyAll
in classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Returns:
true
in all cases- See Also:
-
supportsLocalTempTables
public boolean supportsLocalTempTables()Returnstrue
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 classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Returns:
true
when invoked- See Also:
-
getCreateTempTableSqlPrefix
ReturnsCREATE 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 theIF 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 classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Returns:
CREATE TEMP TABLE
when invoked- See Also:
-
getTempTableForTable
public org.eclipse.persistence.internal.helper.DatabaseTable getTempTableForTable(org.eclipse.persistence.internal.helper.DatabaseTable table) Overrides the superclass implementation to return a newDatabaseTable
with no DatabaseTable.getTableQualifier(). Informix 11.50 and above do not support table qualifiers of any kind on temporary tables.- Overrides:
getTempTableForTable
in classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Parameters:
table
- theDatabaseTable
for which a temporaryDatabaseTable
should be returned; must not benull
- Returns:
- a new
DatabaseTable
with no table qualifier - Throws:
IllegalArgumentException
- iftable
isnull
- See Also:
-
getCreateTempTableSqlSuffix
ReturnsWITH 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 classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Returns:
WITH NO LOG
when invoked- See Also:
-
writeUpdateOriginalFromTempTableSql
public void writeUpdateOriginalFromTempTableSql(Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, Collection pkFields, Collection assignedFields) throws IOException OverridesDatabasePlatform.writeUpdateOriginalFromTempTableSql(Writer, DatabaseTable, Collection, Collection)
to ensure that aSET
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 classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Parameters:
writer
- theWriter
that will be writing SQL; must not benull
table
- theDatabaseTable
to be updated; must not benull
pkFields
- aCollection
ofDatabaseField
s each of which is a primary key of the table to be updated; must not benull
assignedFields
- aCollection
ofDatabaseField
s that are receiving updated values; must not benull
- Throws:
IOException
- if an input/output error is thrown by the suppliedWriter
NullPointerException
- if any of the supplied parameters isnull
- See Also:
-
getObjectFromResultSet
public Object getObjectFromResultSet(ResultSet resultSet, int columnNumber, int jdbcType, org.eclipse.persistence.internal.sessions.AbstractSession session) throws SQLException OverridesDatabasePlatform.getObjectFromResultSet(ResultSet, int, int, AbstractSession)
so that if the suppliedjdbcType
is equal toTypes.LONGVARCHAR
, then theResultSet.getString(int)
method (instead of theResultSet.getObject(int)
method) is used to fetch the "raw" value of the column indicated by the suppliedcolumnNumber
from the suppliedResultSet
.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 ofLONGVARCHAR
, but the actual object returned byResultSet.getObject(int)
is abyte[]
(instead of either achar[]
or aString
). InvokingResultSet.getString(int)
instead returns the desired result.- Overrides:
getObjectFromResultSet
in classorg.eclipse.persistence.internal.databaseaccess.DatabasePlatform
- Parameters:
resultSet
- theResultSet
to get anObject
from; may benull
columnNumber
- the1
-based column number indicating the column to usejdbcType
- anint
indicating the JDBC type of which the column in theResultSet
indicated by the suppliedcolumnNumber
is expected to besession
- anAbstractSession
that, when used at all, is passed to the superclass implementation of this method; may benull
- Returns:
- the
Object
resulting from a call toResultSet.getObject(int)
; may benull
- Throws:
SQLException
- if any error occurs- See Also:
-