Class DB2Platform
- java.lang.Object
-
- org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
-
- org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
-
- org.eclipse.persistence.platform.database.DatabasePlatform
-
- org.eclipse.persistence.platform.database.DB2Platform
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,CorePlatform<ConversionManager>
,Platform
- Direct Known Subclasses:
DB2MainframePlatform
,DB2ZPlatform
,DerbyPlatform
public class DB2Platform extends DatabasePlatform
Purpose: Provides DB2 specific behavior.
Responsibilities:
- Support for schema creation.
- Native SQL for byte[], Date, Time, & Timestamp.
- Support for table qualified names.
- Support for stored procedures.
- Support for temp tables.
- Support for casting.
- Support for database functions.
- Support for identity sequencing.
- Support for SEQUENCE sequencing.
- Since:
- TOPLink/Java 1.0
- See Also:
- 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, 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, Types_NCLOB, Types_SQLXML, 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
Constructors Constructor Description DB2Platform()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
allowBindingForSelectClause()
INTERNAL: DB2 does not allow stand alone, untyped parameter markers in select clause.protected void
appendByteArray(byte[] bytes, java.io.Writer writer)
INTERNAL: Append a byte[] in native DB@ format BLOB(hexString) if usesNativeSQL(), otherwise use ODBC format from DatabasePLatform.protected void
appendCalendar(java.util.Calendar calendar, java.io.Writer writer)
INTERNAL: Append the Timestamp in native format if usesNativeSQL() is true otherwise use ODBC format from DatabasePlatform.protected void
appendDate(java.sql.Date date, java.io.Writer writer)
INTERNAL: Appends the Date in native format if usesNativeSQL() otherwise use ODBC format from DatabasePlatform.protected void
appendDB2Calendar(java.util.Calendar calendar, java.io.Writer writer)
Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).protected void
appendDB2Date(java.sql.Date date, java.io.Writer writer)
INTERNAL: Write a timestamp in DB2 specific format (mm/dd/yyyy).protected void
appendDB2Timestamp(java.sql.Timestamp timestamp, java.io.Writer writer)
INTERNAL: Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).protected void
appendTime(java.sql.Time time, java.io.Writer writer)
INTERNAL: Append the Time in Native format if usesNativeSQL() otherwise use ODBC format from DAtabasePlatform.protected void
appendTimestamp(java.sql.Timestamp timestamp, java.io.Writer writer)
INTERNAL: Append the Timestamp in native format if usesNativeSQL() is true otherwise use ODBC format from DatabasePlatform.protected ExpressionOperator
ascendingOperator()
Disable binding support.protected java.util.Hashtable
buildFieldTypes()
Return the mapping of class types to database types for the schema framework.ValueReadQuery
buildSelectQueryForIdentity()
INTERNAL: Build the identity query for native sequencing.ValueReadQuery
buildSelectQueryForSequenceObject(java.lang.String qualifiedSeqName, java.lang.Integer size)
INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.protected ExpressionOperator
caseConditionOperator()
DB2 does not allow untyped parameter binding for the THEN & ELSE 'result-expressions' of CASE expressionsprotected ExpressionOperator
caseOperator()
DB2 does not allow untyped parameter binding for the THEN & ELSE 'result-expressions' of CASE expressionsprotected ExpressionOperator
coalesceOperator()
DB2 requires that at least one argument be a known typeprotected ExpressionOperator
concatOperator()
INTERNAL: The concat operator is of the form ....protected ExpressionOperator
count()
Disable binding support.protected ExpressionOperator
descendingOperator()
Disable binding support.protected static ExpressionOperator
disableAllBindingExpression()
Create an ExpressionOperator that disables all parameter bindingprotected static ExpressionOperator
disableAtLeast1BindingExpression()
Create an ExpressionOperator that requires at least 1 typed argumentprotected ExpressionOperator
distinct()
Disable binding support.boolean
dontBindUpdateAllQueryUsingTempTables()
INTERNAL: DB2 has issues with binding with temp table queries.protected java.lang.String
getCreateTempTableSqlBodyForTable(DatabaseTable table)
INTERNAL: DB2 allows LIKE to be used to create temp tables, which avoids having to know the types.protected java.lang.String
getCreateTempTableSqlPrefix()
INTERNAL: DB2 temp table syntax.protected java.lang.String
getCreateTempTableSqlSuffix()
INTERNAL: DB2 temp table syntax.int
getMaxFieldNameSize()
INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.int
getMaxForeignKeyNameSize()
INTERNAL: returns the maximum number of characters that can be used in a foreign key name on this platform.int
getMaxUniqueKeyNameSize()
INTERNAL: returns the maximum number of characters that can be used in a unique key name on this platform.java.util.Vector
getNativeTableInfo(java.lang.String table, java.lang.String creator, AbstractSession session)
INTERNAL: Return the catalog information through using the native SQL catalog selects.java.lang.String
getNoWaitString()
INTERNAL: DB2 does not support NOWAIT.java.lang.String
getProcedureArgument(java.lang.String name, java.lang.Object parameter, DatasourceCall.ParameterType parameterType, StoredProcedureCall call, AbstractSession session)
Obtain the platform specific argument stringjava.lang.String
getProcedureAsString()
INTERNAL: Used for stored procedure defs.java.lang.String
getProcedureBeginString()
Used for stored procedure defs.java.lang.String
getProcedureCallHeader()
INTERNAL: Used for sp calls.java.lang.String
getProcedureEndString()
INTERNAL: Used for stored procedure defs.java.lang.String
getSelectForUpdateString()
INTERNAL: Used for pessimistic locking in DB2.DatabaseTable
getTempTableForTable(DatabaseTable table)
INTERNAL: DB2 temp table syntax.ValueReadQuery
getTimestampQuery()
INTERNAL: This method returns the query to select the timestamp from the server for DB2.void
initializeConnectionData(java.sql.Connection connection)
INTERNAL: Allow initialization from the connection.protected void
initializePlatformOperators()
INTERNAL: Initialize any platform-specific operatorsboolean
isAlterSequenceObjectSupported()
INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.boolean
isDB2()
boolean
isDynamicSQLRequiredForFunctions()
INTERNAL DB2 has some issues with using parameters on certain functions and relations.boolean
isNullAllowedInSelectClause()
INTERNAL: DB2 does not allow NULL in select clause.protected ExpressionOperator
lengthOperator()
Disable binding support.protected ExpressionOperator
ltrim2Operator()
DB2 does not support untyped parameter binding forprotected ExpressionOperator
max()
Disable binding support.java.util.Hashtable
maximumNumericValues()
INTERNAL: Builds a table of maximum numeric values keyed on java class.protected ExpressionOperator
min()
Disable binding support.java.util.Hashtable
minimumNumericValues()
INTERNAL: Builds a table of minimum numeric values keyed on java class.protected ExpressionOperator
nullifOperator()
DB2 requires that at least one argument be a known typevoid
printFieldIdentityClause(java.io.Writer writer)
INTERNAL: Append the receiver's field 'identity' constraint clause to a writer.protected void
printFieldTypeSize(java.io.Writer writer, FieldDefinition field, FieldTypeDefinition ftd)
void
printSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter printer, SQLSelectStatement statement)
INTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall.protected ExpressionOperator
rtrim2Operator()
DB2 does not support untyped parameter binding forboolean
shouldBindPartialParameters()
Used to determine if the platform should perform partial parameter binding or not Enabled for DB2 and DB2 for zOS to add support for partial bindingboolean
shouldIgnoreException(java.sql.SQLException exception)
INTERNAL: Allow for the platform to ignore exceptions.boolean
shouldPrintForUpdateClause()
boolean
shouldPrintOutputTokenAtStart()
INTERNAL: This is required in the construction of the stored procedures with output parameters.boolean
shouldUseJDBCOuterJoinSyntax()
INTERNAL: JDBC defines and outer join syntax, many drivers do not support this.boolean
supportsGlobalTempTables()
INTERNAL: DB2 supports temp tables.boolean
supportsIdentity()
INTERNAL: Indicates whether the platform supports identity.boolean
supportsLockingQueriesWithMultipleTables()
INTERNAL: DB2 does not seem to allow FOR UPDATE on queries with multiple tables.boolean
supportsOrderByParameters()
DB2 disables single parameter usage in ORDER BY clause.boolean
supportsSequenceObjects()
INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.protected ExpressionOperator
trim2()
DB2 does not support untyped parameter binding forvoid
writeParameterMarker(java.io.Writer writer, ParameterExpression parameter, AbstractRecord record, DatabaseCall call)
INTERNAL: DB2 requires casting on certain operations, such as the CONCAT function, and parameterized queries of the form, ":param = :param".-
Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
addBatch, addStructConverter, allowsSizeInProcedureArguments, appendBoolean, 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, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getDropCascadeString, getDropDatabaseSchemaString, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIdentifierQuoteCharacter, getIndexNamePrefix, getInOutputProcedureToken, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxIndexNameSize, getObjectFromResultSet, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgumentString, getProcedureCallTail, 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, isForUpdateCompatibleWithDistinct, isInformixOuterJoin, isJDBCExecuteCompliant, isLobCompatibleWithDistinct, isLockTimeoutException, isOutputAllowWithResultSet, isRowCountOutputParameterRequired, isXDBDocument, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldNullClause, printFieldTypeSize, printFieldUnique, printFieldUnique, printStoredFunctionReturnKeyWord, printValuelist, printValuelist, registerOutputParameter, registerOutputParameter, registerOutputParameter, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureBrackets, requiresProcedureCallBrackets, 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, shouldAlwaysUseTempStorageForModifyAll, shouldBindAllParameters, shouldBindLiterals, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldOptimizeDataConversion, shouldPrintAliasForUpdate, shouldPrintConstraintNameAfter, shouldPrintFieldIdentityClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureArgumentNameInCall, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsAutoConversionToNumericForArithmeticOperations, supportsConnectionUserName, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsIndexes, supportsIndividualTableLocking, supportsLocalTempTables, supportsNestingOuterJoins, 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, writeTableCreationSuffix, writeUpdateOriginalFromTempTableSql
-
Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, clone, convertObject, convertObject, createConnectionCustomizer, createExpressionFor, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSeqenceAtNextValue, getDefaultSequence, getDefaultSequenceToWrite, getDriverVersion, getEndDelimiter, getINClauseLimit, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, isAccess, isAttunity, isCloudscape, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isInformix, isMaxDB, isMySQL, isODBC, isOracle, isOracle23, isOracle9, isPervasive, isPointBase, isPostgreSQL, isSQLAnywhere, isSQLServer, isSybase, isSymfoware, isTimesTen, isTimesTen7, removeAllSequences, removeSequence, sequencesAfterCloneCleanup, setConversionManager, setDefaultNativeSequenceToTable, setDefaultSeqenceAtNextValue, setDefaultSequence, setEndDelimiter, setSelectSequenceNumberQuery, setSequencePreallocationSize, setSequences, setStartDelimiter, setSupportsReturnGeneratedKeys, setTableQualifier, setTimestampQuery, setUpdateSequenceQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, shouldSelectIncludeOrderBy, supportsNativeSequenceNumbers, supportsReturnGeneratedKeys, toString, usesPlatformDefaultSequence
-
-
-
-
Method Detail
-
initializeConnectionData
public void initializeConnectionData(java.sql.Connection connection) throws java.sql.SQLException
Description copied from class:DatabasePlatform
INTERNAL: Allow initialization from the connection.- Overrides:
initializeConnectionData
in classDatabasePlatform
- Throws:
java.sql.SQLException
-
appendByteArray
protected void appendByteArray(byte[] bytes, java.io.Writer writer) throws java.io.IOException
INTERNAL: Append a byte[] in native DB@ format BLOB(hexString) if usesNativeSQL(), otherwise use ODBC format from DatabasePLatform.- Overrides:
appendByteArray
in classDatabasePlatform
- Throws:
java.io.IOException
-
appendDate
protected void appendDate(java.sql.Date date, java.io.Writer writer) throws java.io.IOException
INTERNAL: Appends the Date in native format if usesNativeSQL() otherwise use ODBC format from DatabasePlatform. Native format: 'mm/dd/yyyy'- Overrides:
appendDate
in classDatabasePlatform
- Throws:
java.io.IOException
-
appendDB2Date
protected void appendDB2Date(java.sql.Date date, java.io.Writer writer) throws java.io.IOException
INTERNAL: Write a timestamp in DB2 specific format (mm/dd/yyyy).- Throws:
java.io.IOException
-
appendDB2Timestamp
protected void appendDB2Timestamp(java.sql.Timestamp timestamp, java.io.Writer writer) throws java.io.IOException
INTERNAL: Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).- Throws:
java.io.IOException
-
appendDB2Calendar
protected void appendDB2Calendar(java.util.Calendar calendar, java.io.Writer writer) throws java.io.IOException
Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).- Throws:
java.io.IOException
-
appendTime
protected void appendTime(java.sql.Time time, java.io.Writer writer) throws java.io.IOException
INTERNAL: Append the Time in Native format if usesNativeSQL() otherwise use ODBC format from DAtabasePlatform. Native Format: 'hh:mm:ss'- Overrides:
appendTime
in classDatabasePlatform
- Throws:
java.io.IOException
-
appendTimestamp
protected void appendTimestamp(java.sql.Timestamp timestamp, java.io.Writer writer) throws java.io.IOException
INTERNAL: Append the Timestamp in native format if usesNativeSQL() is true otherwise use ODBC format from DatabasePlatform. Native format: 'YYYY-MM-DD-hh.mm.ss.SSSSSS'- Overrides:
appendTimestamp
in classDatabasePlatform
- Throws:
java.io.IOException
-
appendCalendar
protected void appendCalendar(java.util.Calendar calendar, java.io.Writer writer) throws java.io.IOException
INTERNAL: Append the Timestamp in native format if usesNativeSQL() is true otherwise use ODBC format from DatabasePlatform. Native format: 'YYYY-MM-DD-hh.mm.ss.SSSSSS'- Overrides:
appendCalendar
in classDatabasePlatform
- Throws:
java.io.IOException
-
buildFieldTypes
protected java.util.Hashtable buildFieldTypes()
Description copied from class:DatabasePlatform
Return the mapping of class types to database types for the schema framework.- Overrides:
buildFieldTypes
in classDatabasePlatform
-
getMaxFieldNameSize
public int getMaxFieldNameSize()
INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.- Overrides:
getMaxFieldNameSize
in classDatabasePlatform
-
getMaxForeignKeyNameSize
public int getMaxForeignKeyNameSize()
INTERNAL: returns the maximum number of characters that can be used in a foreign key name on this platform.- Overrides:
getMaxForeignKeyNameSize
in classDatabasePlatform
-
getMaxUniqueKeyNameSize
public int getMaxUniqueKeyNameSize()
INTERNAL: returns the maximum number of characters that can be used in a unique key name on this platform.- Overrides:
getMaxUniqueKeyNameSize
in classDatabasePlatform
-
getNativeTableInfo
public java.util.Vector getNativeTableInfo(java.lang.String table, java.lang.String creator, AbstractSession session)
INTERNAL: Return the catalog information through using the native SQL catalog selects. This is required because many JDBC driver do not support meta-data. Wildcards can be passed as arguments. This is currently not used.
-
getProcedureCallHeader
public java.lang.String getProcedureCallHeader()
INTERNAL: Used for sp calls.- Overrides:
getProcedureCallHeader
in classDatabasePlatform
-
getSelectForUpdateString
public java.lang.String getSelectForUpdateString()
INTERNAL: Used for pessimistic locking in DB2. Without the "WITH RS" the lock is not held.- Overrides:
getSelectForUpdateString
in classDatabasePlatform
-
getProcedureEndString
public java.lang.String getProcedureEndString()
INTERNAL: Used for stored procedure defs.- Overrides:
getProcedureEndString
in classDatabasePlatform
-
getProcedureBeginString
public java.lang.String getProcedureBeginString()
Used for stored procedure defs.- Overrides:
getProcedureBeginString
in classDatabasePlatform
-
getProcedureAsString
public java.lang.String getProcedureAsString()
INTERNAL: Used for stored procedure defs.- Overrides:
getProcedureAsString
in classDatabasePlatform
-
getProcedureArgument
public java.lang.String getProcedureArgument(java.lang.String name, java.lang.Object parameter, DatasourceCall.ParameterType parameterType, StoredProcedureCall call, AbstractSession session)
Obtain the platform specific argument string- Overrides:
getProcedureArgument
in classDatabasePlatform
-
shouldPrintOutputTokenAtStart
public boolean shouldPrintOutputTokenAtStart()
INTERNAL: This is required in the construction of the stored procedures with output parameters.- Overrides:
shouldPrintOutputTokenAtStart
in classDatabasePlatform
-
shouldBindPartialParameters
public boolean shouldBindPartialParameters()
Used to determine if the platform should perform partial parameter binding or not Enabled for DB2 and DB2 for zOS to add support for partial binding- Overrides:
shouldBindPartialParameters
in classDatabasePlatform
-
getTimestampQuery
public ValueReadQuery getTimestampQuery()
INTERNAL: This method returns the query to select the timestamp from the server for DB2.- Specified by:
getTimestampQuery
in interfacePlatform
- Overrides:
getTimestampQuery
in classDatasourcePlatform
-
initializePlatformOperators
protected void initializePlatformOperators()
INTERNAL: Initialize any platform-specific operators- Overrides:
initializePlatformOperators
in classDatasourcePlatform
-
disableAllBindingExpression
protected static ExpressionOperator disableAllBindingExpression()
Create an ExpressionOperator that disables all parameter binding
-
disableAtLeast1BindingExpression
protected static ExpressionOperator disableAtLeast1BindingExpression()
Create an ExpressionOperator that requires at least 1 typed argument
-
ascendingOperator
protected ExpressionOperator ascendingOperator()
Disable binding support.With binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X34: There is a ? parameter in the select list. This is not allowed.
-
descendingOperator
protected ExpressionOperator descendingOperator()
Disable binding support.With binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X34: There is a ? parameter in the select list. This is not allowed.
-
concatOperator
protected ExpressionOperator concatOperator()
INTERNAL: The concat operator is of the form .... VARCHAR (|| )
-
count
protected ExpressionOperator count()
Disable binding support.With binding enabled, DB2 will throw an error:
Db2 cannot determine how to implicitly cast the arguments between string and numeric data types. DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5
With binding enabled, DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X36: The 'COUNT' operator is not allowed to take a ? parameter as an operand.
-
max
protected ExpressionOperator max()
Disable binding support.With binding enabled, DB2 will throw an error:
Db2 cannot determine how to implicitly cast the arguments between string and numeric data types. DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5
With binding enabled, DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X36: The 'MAX' operator is not allowed to take a ? parameter as an operand.
-
min
protected ExpressionOperator min()
Disable binding support.With binding enabled, DB2 will throw an error:
Db2 cannot determine how to implicitly cast the arguments between string and numeric data types. DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5
With binding enabled, DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X36: The 'MIN' operator is not allowed to take a ? parameter as an operand.
-
distinct
protected ExpressionOperator distinct()
Disable binding support.With binding enabled, DB2 will throw an error:
Db2 cannot determine how to implicitly cast the arguments between string and numeric data types. DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5
With binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X34: There is a ? parameter in the select list. This is not allowed.
-
caseOperator
protected ExpressionOperator caseOperator()
DB2 does not allow untyped parameter binding for the THEN & ELSE 'result-expressions' of CASE expressionsWith binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
Examples of places where parameter markers cannot be used:- In a result-expression in any CASE expression when all the other result-expressions are either NULL or untyped parameter markers
With binding enabled, Derby will throw an error:
ERROR 42X87: At least one result expression (THEN or ELSE) of the CASE expression must have a known type.
-
caseConditionOperator
protected ExpressionOperator caseConditionOperator()
DB2 does not allow untyped parameter binding for the THEN & ELSE 'result-expressions' of CASE expressionsWith binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
Examples of places where parameter markers cannot be used:- In a result-expression in any CASE expression when all the other result-expressions are either NULL or untyped parameter markers
With binding enabled, Derby will throw an error:
ERROR 42X87: At least one result expression (THEN or ELSE) of the CASE expression must have a known type.
-
lengthOperator
protected ExpressionOperator lengthOperator()
Disable binding support.With binding enabled, DB2 will throw an error:
Db2 cannot determine how to implicitly cast the arguments between string and numeric data types. DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5
With binding enabled, DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X36: The 'length' operator is not allowed to take a ? parameter as an operand.
-
nullifOperator
protected ExpressionOperator nullifOperator()
DB2 requires that at least one argument be a known typeWith binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, Derby will throw an error:
ERROR 42X35: It is not allowed for both operands of '=' to be ? parameters.
-
coalesceOperator
protected ExpressionOperator coalesceOperator()
DB2 requires that at least one argument be a known typeWith binding enabled, DB2 will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
With binding enabled, DB2 z/OS will throw an error:
The statement string specified as the object of a PREPARE contains a predicate or expression where parameter markers have been used as operands of the same operator for example: ? > ?. DB2 SQL Error: SQLCODE=-417, SQLSTATE=42609
With binding enabled, Derby will throw an error:
ERROR 42610: All the arguments to the COALESCE/VALUE function cannot be parameters. The function needs at least one argument that is not a parameter.
-
trim2
protected ExpressionOperator trim2()
DB2 does not support untyped parameter binding forWith binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
-
ltrim2Operator
protected ExpressionOperator ltrim2Operator()
DB2 does not support untyped parameter binding forWith binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
-
rtrim2Operator
protected ExpressionOperator rtrim2Operator()
DB2 does not support untyped parameter binding forWith binding enabled, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
-
isDB2
public boolean isDB2()
- Specified by:
isDB2
in interfacePlatform
- Overrides:
isDB2
in classDatasourcePlatform
-
maximumNumericValues
public java.util.Hashtable maximumNumericValues()
INTERNAL: Builds a table of maximum numeric values keyed on java class. This is used for type testing but might also be useful to end users attempting to sanitize values.NOTE: BigInteger & BigDecimal maximums are dependent upon their precision & Scale
- Overrides:
maximumNumericValues
in classDatabasePlatform
-
minimumNumericValues
public java.util.Hashtable minimumNumericValues()
INTERNAL: Builds a table of minimum numeric values keyed on java class. This is used for type testing but might also be useful to end users attempting to sanitize values.NOTE: BigInteger & BigDecimal minimums are dependent upon their precision & Scale
- Overrides:
minimumNumericValues
in classDatabasePlatform
-
shouldIgnoreException
public boolean shouldIgnoreException(java.sql.SQLException exception)
INTERNAL: Allow for the platform to ignore exceptions. This is required for DB2 which throws no-data modified as an exception.- Overrides:
shouldIgnoreException
in classDatabasePlatform
-
shouldUseJDBCOuterJoinSyntax
public boolean shouldUseJDBCOuterJoinSyntax()
INTERNAL: JDBC defines and outer join syntax, many drivers do not support this. So we normally avoid it.- Overrides:
shouldUseJDBCOuterJoinSyntax
in classDatabasePlatform
-
buildSelectQueryForIdentity
public ValueReadQuery buildSelectQueryForIdentity()
INTERNAL: Build the identity query for native sequencing.- Overrides:
buildSelectQueryForIdentity
in classDatasourcePlatform
-
printFieldIdentityClause
public void printFieldIdentityClause(java.io.Writer writer) throws ValidationException
INTERNAL: Append the receiver's field 'identity' constraint clause to a writer. Used by table creation with sequencing.- Overrides:
printFieldIdentityClause
in classDatabasePlatform
- Throws:
ValidationException
-
printFieldTypeSize
protected void printFieldTypeSize(java.io.Writer writer, FieldDefinition field, FieldTypeDefinition ftd) throws java.io.IOException
- Overrides:
printFieldTypeSize
in classDatabasePlatform
- Throws:
java.io.IOException
-
supportsIdentity
public boolean supportsIdentity()
INTERNAL: Indicates whether the platform supports identity. DB2 does through AS IDENTITY field types. This is used by sequencing.- Overrides:
supportsIdentity
in classDatasourcePlatform
-
supportsGlobalTempTables
public boolean supportsGlobalTempTables()
INTERNAL: DB2 supports temp tables. This is used by UpdateAllQuerys.- Overrides:
supportsGlobalTempTables
in classDatabasePlatform
-
getCreateTempTableSqlPrefix
protected java.lang.String getCreateTempTableSqlPrefix()
INTERNAL: DB2 temp table syntax. This is used by UpdateAllQuerys.- Overrides:
getCreateTempTableSqlPrefix
in classDatabasePlatform
-
getTempTableForTable
public DatabaseTable getTempTableForTable(DatabaseTable table)
INTERNAL: DB2 temp table syntax. This is used by UpdateAllQuerys.- Overrides:
getTempTableForTable
in classDatabasePlatform
- Returns:
- DatabaseTable temorary table
-
getCreateTempTableSqlSuffix
protected java.lang.String getCreateTempTableSqlSuffix()
INTERNAL: DB2 temp table syntax. This is used by UpdateAllQuerys.- Overrides:
getCreateTempTableSqlSuffix
in classDatabasePlatform
-
getCreateTempTableSqlBodyForTable
protected java.lang.String getCreateTempTableSqlBodyForTable(DatabaseTable table)
INTERNAL: DB2 allows LIKE to be used to create temp tables, which avoids having to know the types. This is used by UpdateAllQuerys.- Overrides:
getCreateTempTableSqlBodyForTable
in classDatabasePlatform
-
getNoWaitString
public java.lang.String getNoWaitString()
INTERNAL: DB2 does not support NOWAIT.- Overrides:
getNoWaitString
in classDatabasePlatform
-
dontBindUpdateAllQueryUsingTempTables
public boolean dontBindUpdateAllQueryUsingTempTables()
INTERNAL: DB2 has issues with binding with temp table queries. This is used by UpdateAllQuerys.- Overrides:
dontBindUpdateAllQueryUsingTempTables
in classDatabasePlatform
-
isNullAllowedInSelectClause
public boolean isNullAllowedInSelectClause()
INTERNAL: DB2 does not allow NULL in select clause. This is used by UpdateAllQuerys.- Overrides:
isNullAllowedInSelectClause
in classDatabasePlatform
-
isDynamicSQLRequiredForFunctions
public boolean isDynamicSQLRequiredForFunctions()
INTERNAL DB2 has some issues with using parameters on certain functions and relations. This allows statements to disable binding only in these cases. If users set casting on, then casting is used instead of dynamic SQL.- Overrides:
isDynamicSQLRequiredForFunctions
in classDatabasePlatform
-
allowBindingForSelectClause
public boolean allowBindingForSelectClause()
INTERNAL: DB2 does not allow stand alone, untyped parameter markers in select clause.- Overrides:
allowBindingForSelectClause
in classDatabasePlatform
- See Also:
org.eclipse.persistence.internal.expressions.ConstantExpression#writeFields(ExpressionSQLPrinter, List, SQLSelectStatement)
,org.eclipse.persistence.internal.expressions.ParameterExpression#writeFields(ExpressionSQLPrinter, List, SQLSelectStatement)
-
writeParameterMarker
public void writeParameterMarker(java.io.Writer writer, ParameterExpression parameter, AbstractRecord record, DatabaseCall call) throws java.io.IOException
INTERNAL: DB2 requires casting on certain operations, such as the CONCAT function, and parameterized queries of the form, ":param = :param". This method will write CAST operation to parameters if the type is known. This is not used by default, only if isCastRequired is set to true, by default dynamic SQL is used to avoid the issue in only the required cases.- Overrides:
writeParameterMarker
in classDatabasePlatform
- Throws:
java.io.IOException
-
supportsLockingQueriesWithMultipleTables
public boolean supportsLockingQueriesWithMultipleTables()
INTERNAL: DB2 does not seem to allow FOR UPDATE on queries with multiple tables. This is only used by testing to exclude these tests.- Overrides:
supportsLockingQueriesWithMultipleTables
in classDatabasePlatform
-
buildSelectQueryForSequenceObject
public ValueReadQuery buildSelectQueryForSequenceObject(java.lang.String qualifiedSeqName, java.lang.Integer size)
INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.- Overrides:
buildSelectQueryForSequenceObject
in classDatasourcePlatform
-
supportsSequenceObjects
public boolean supportsSequenceObjects()
INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.- Overrides:
supportsSequenceObjects
in classDatasourcePlatform
-
supportsOrderByParameters
public boolean supportsOrderByParameters()
DB2 disables single parameter usage in ORDER BY clause.If a parameter marker is used, DB2 & DB2 z/OS will throw an error:
The statement cannot be executed because a parameter marker has been used in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610
If a parameter marker is used, Derby will throw an error:
ERROR 42X34: There is a ? parameter in the select list. This is not allowed.
- Overrides:
supportsOrderByParameters
in classDatabasePlatform
-
isAlterSequenceObjectSupported
public boolean isAlterSequenceObjectSupported()
INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.- Overrides:
isAlterSequenceObjectSupported
in classDatabasePlatform
-
shouldPrintForUpdateClause
public boolean shouldPrintForUpdateClause()
- Overrides:
shouldPrintForUpdateClause
in classDatabasePlatform
-
printSQLSelectStatement
public void printSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter printer, SQLSelectStatement statement)
INTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall. This implementation works MaxRows and FirstResult into the SQL using DB2's ROWNUMBER() OVER() to filter values if shouldUseRownumFiltering is true.- Overrides:
printSQLSelectStatement
in classDatabasePlatform
-
-