Class DB2Platform

  • All Implemented Interfaces:
    Serializable, Cloneable, org.eclipse.persistence.internal.core.databaseaccess.CorePlatform<org.eclipse.persistence.internal.helper.ConversionManager>, org.eclipse.persistence.internal.databaseaccess.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.
    See Also:
    Serialized Form
    Since:
    TOPLink/Java 1.0
    • Field Summary

      • 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, 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, tableQualifier, timestampQuery
    • Constructor Summary

      Constructors 
      Constructor Description
      DB2Platform()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void appendByteArray​(byte[] bytes, Writer writer)
      INTERNAL: Append a byte[] in native DB@ format BLOB(hexString) if usesNativeSQL(), otherwise use ODBC format from DatabasePLatform.
      protected void appendCalendar​(Calendar calendar, Writer writer)
      INTERNAL: Append the Timestamp in native format if usesNativeSQL() is true otherwise use ODBC format from DatabasePlatform.
      protected void appendDate​(Date date, Writer writer)
      INTERNAL: Appends the Date in native format if usesNativeSQL() otherwise use ODBC format from DatabasePlatform.
      protected void appendDB2Calendar​(Calendar calendar, Writer writer)
      Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).
      protected void appendDB2Date​(Date date, Writer writer)
      INTERNAL: Write a timestamp in DB2 specific format (mm/dd/yyyy).
      protected void appendDB2Timestamp​(Timestamp timestamp, Writer writer)
      INTERNAL: Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).
      protected void appendTime​(Time time, Writer writer)
      INTERNAL: Append the Time in Native format if usesNativeSQL() otherwise use ODBC format from DAtabasePlatform.
      protected void appendTimestamp​(Timestamp timestamp, Writer writer)
      INTERNAL: Append the Timestamp in native format if usesNativeSQL() is true otherwise use ODBC format from DatabasePlatform.
      protected 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​(String qualifiedSeqName, Integer size)
      INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.
      boolean dontBindUpdateAllQueryUsingTempTables()
      INTERNAL: DB2 has issues with binding with temp table queries.
      protected String getCreateTempTableSqlBodyForTable​(org.eclipse.persistence.internal.helper.DatabaseTable table)
      INTERNAL: DB2 allows LIKE to be used to create temp tables, which avoids having to know the types.
      protected String getCreateTempTableSqlPrefix()
      INTERNAL: DB2 temp table syntax.
      protected 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.
      Vector getNativeTableInfo​(String table, String creator, org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Return the catalog information through using the native SQL catalog selects.
      String getNoWaitString()
      INTERNAL: DB2 does not support NOWAIT.
      String getProcedureArgument​(String name, Object parameter, Integer parameterType, StoredProcedureCall call, org.eclipse.persistence.internal.sessions.AbstractSession session)
      Obtain the platform specific argument string
      String getProcedureAsString()
      INTERNAL: Used for stored procedure defs.
      String getProcedureBeginString()
      Used for stored procedure defs.
      String getProcedureCallHeader()
      INTERNAL: Used for sp calls.
      String getProcedureEndString()
      INTERNAL: Used for stored procedure defs.
      String getSelectForUpdateString()
      INTERNAL: Used for pessimistic locking in DB2.
      org.eclipse.persistence.internal.helper.DatabaseTable getTempTableForTable​(org.eclipse.persistence.internal.helper.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​(Connection connection)
      INTERNAL: Allow initialization from the connection.
      protected void initializePlatformOperators()
      INTERNAL: Initialize any platform-specific operators
      boolean 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.
      Hashtable maximumNumericValues()
      INTERNAL: Builds a table of maximum numeric values keyed on java class.
      Hashtable minimumNumericValues()
      INTERNAL: Builds a table of minimum numeric values keyed on java class.
      void printFieldIdentityClause​(Writer writer)
      INTERNAL: Append the receiver's field 'identity' constraint clause to a writer.
      protected void printFieldTypeSize​(Writer writer, FieldDefinition field, org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition ftd)  
      void printSQLSelectStatement​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call, org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter printer, org.eclipse.persistence.internal.expressions.SQLSelectStatement statement)
      INTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall.
      boolean shouldIgnoreException​(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()
      Used to determine if the platform supports untyped parameters, as ordinal variables, within the Order By clause
      boolean supportsSequenceObjects()
      INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.
      void writeParameterMarker​(Writer writer, org.eclipse.persistence.internal.expressions.ParameterExpression parameter, org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.databaseaccess.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, getIndexNamePrefix, getInOutputProcedureToken, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxIndexNameSize, getObjectFromResultSet, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, 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, 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, createConnectionCustomizer, createExpressionFor, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSeqenceAtNextValue, getDefaultSequence, getDefaultSequenceToWrite, getEndDelimiter, getINClauseLimit, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, initIdentitySequences, isAccess, isAttunity, isCloudscape, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isInformix, 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, setTableQualifier, setTimestampQuery, setUpdateSequenceQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, shouldSelectIncludeOrderBy, supportsNativeSequenceNumbers, toString, usesPlatformDefaultSequence
    • Constructor Detail

      • DB2Platform

        public DB2Platform()
    • Method Detail

      • initializeConnectionData

        public void initializeConnectionData​(Connection connection)
                                      throws SQLException
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        INTERNAL: Allow initialization from the connection.
        Overrides:
        initializeConnectionData in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        SQLException
      • appendByteArray

        protected void appendByteArray​(byte[] bytes,
                                       Writer writer)
                                throws IOException
        INTERNAL: Append a byte[] in native DB@ format BLOB(hexString) if usesNativeSQL(), otherwise use ODBC format from DatabasePLatform.
        Overrides:
        appendByteArray in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • appendDate

        protected void appendDate​(Date date,
                                  Writer writer)
                           throws IOException
        INTERNAL: Appends the Date in native format if usesNativeSQL() otherwise use ODBC format from DatabasePlatform. Native format: 'mm/dd/yyyy'
        Overrides:
        appendDate in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • appendDB2Date

        protected void appendDB2Date​(Date date,
                                     Writer writer)
                              throws IOException
        INTERNAL: Write a timestamp in DB2 specific format (mm/dd/yyyy).
        Throws:
        IOException
      • appendDB2Timestamp

        protected void appendDB2Timestamp​(Timestamp timestamp,
                                          Writer writer)
                                   throws IOException
        INTERNAL: Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).
        Throws:
        IOException
      • appendDB2Calendar

        protected void appendDB2Calendar​(Calendar calendar,
                                         Writer writer)
                                  throws IOException
        Write a timestamp in DB2 specific format (yyyy-mm-dd-hh.mm.ss.ffffff).
        Throws:
        IOException
      • appendTime

        protected void appendTime​(Time time,
                                  Writer writer)
                           throws IOException
        INTERNAL: Append the Time in Native format if usesNativeSQL() otherwise use ODBC format from DAtabasePlatform. Native Format: 'hh:mm:ss'
        Overrides:
        appendTime in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • appendTimestamp

        protected void appendTimestamp​(Timestamp timestamp,
                                       Writer writer)
                                throws 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • appendCalendar

        protected void appendCalendar​(Calendar calendar,
                                      Writer writer)
                               throws 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • buildFieldTypes

        protected Hashtable buildFieldTypes()
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Return the mapping of class types to database types for the schema framework.
        Overrides:
        buildFieldTypes in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getNativeTableInfo

        public Vector getNativeTableInfo​(String table,
                                         String creator,
                                         org.eclipse.persistence.internal.sessions.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 String getProcedureCallHeader()
        INTERNAL: Used for sp calls.
        Overrides:
        getProcedureCallHeader in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getSelectForUpdateString

        public String getSelectForUpdateString()
        INTERNAL: Used for pessimistic locking in DB2. Without the "WITH RS" the lock is not held.
        Overrides:
        getSelectForUpdateString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureEndString

        public String getProcedureEndString()
        INTERNAL: Used for stored procedure defs.
        Overrides:
        getProcedureEndString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureBeginString

        public String getProcedureBeginString()
        Used for stored procedure defs.
        Overrides:
        getProcedureBeginString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureAsString

        public String getProcedureAsString()
        INTERNAL: Used for stored procedure defs.
        Overrides:
        getProcedureAsString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureArgument

        public String getProcedureArgument​(String name,
                                           Object parameter,
                                           Integer parameterType,
                                           StoredProcedureCall call,
                                           org.eclipse.persistence.internal.sessions.AbstractSession session)
        Obtain the platform specific argument string
        Overrides:
        getProcedureArgument in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintOutputTokenAtStart

        public boolean shouldPrintOutputTokenAtStart()
        INTERNAL: This is required in the construction of the stored procedures with output parameters.
        Overrides:
        shouldPrintOutputTokenAtStart in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getTimestampQuery

        public ValueReadQuery getTimestampQuery()
        INTERNAL: This method returns the query to select the timestamp from the server for DB2.
        Specified by:
        getTimestampQuery in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        getTimestampQuery in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • initializePlatformOperators

        protected void initializePlatformOperators()
        INTERNAL: Initialize any platform-specific operators
        Overrides:
        initializePlatformOperators in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • isDB2

        public boolean isDB2()
        Specified by:
        isDB2 in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        isDB2 in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • maximumNumericValues

        public 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • minimumNumericValues

        public 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldIgnoreException

        public boolean shouldIgnoreException​(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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • buildSelectQueryForIdentity

        public ValueReadQuery buildSelectQueryForIdentity()
        INTERNAL: Build the identity query for native sequencing.
        Overrides:
        buildSelectQueryForIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • printFieldIdentityClause

        public void printFieldIdentityClause​(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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        ValidationException
      • printFieldTypeSize

        protected void printFieldTypeSize​(Writer writer,
                                          FieldDefinition field,
                                          org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition ftd)
                                   throws IOException
        Overrides:
        printFieldTypeSize in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        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 class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsGlobalTempTables

        public boolean supportsGlobalTempTables()
        INTERNAL: DB2 supports temp tables. This is used by UpdateAllQuerys.
        Overrides:
        supportsGlobalTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreateTempTableSqlPrefix

        protected String getCreateTempTableSqlPrefix()
        INTERNAL: DB2 temp table syntax. This is used by UpdateAllQuerys.
        Overrides:
        getCreateTempTableSqlPrefix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getTempTableForTable

        public org.eclipse.persistence.internal.helper.DatabaseTable getTempTableForTable​(org.eclipse.persistence.internal.helper.DatabaseTable table)
        INTERNAL: DB2 temp table syntax. This is used by UpdateAllQuerys.
        Overrides:
        getTempTableForTable in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Parameters:
        table - is original table for which temp table is created.
        Returns:
        temporary table
      • getCreateTempTableSqlSuffix

        protected String getCreateTempTableSqlSuffix()
        INTERNAL: DB2 temp table syntax. This is used by UpdateAllQuerys.
        Overrides:
        getCreateTempTableSqlSuffix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreateTempTableSqlBodyForTable

        protected String getCreateTempTableSqlBodyForTable​(org.eclipse.persistence.internal.helper.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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Parameters:
        table - is original table for which temp table is created.
        Returns:
        String
      • getNoWaitString

        public String getNoWaitString()
        INTERNAL: DB2 does not support NOWAIT.
        Overrides:
        getNoWaitString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • dontBindUpdateAllQueryUsingTempTables

        public boolean dontBindUpdateAllQueryUsingTempTables()
        INTERNAL: DB2 has issues with binding with temp table queries. This is used by UpdateAllQuerys.
        Overrides:
        dontBindUpdateAllQueryUsingTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • isNullAllowedInSelectClause

        public boolean isNullAllowedInSelectClause()
        INTERNAL: DB2 does not allow NULL in select clause. This is used by UpdateAllQuerys.
        Overrides:
        isNullAllowedInSelectClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • writeParameterMarker

        public void writeParameterMarker​(Writer writer,
                                         org.eclipse.persistence.internal.expressions.ParameterExpression parameter,
                                         org.eclipse.persistence.internal.sessions.AbstractRecord record,
                                         org.eclipse.persistence.internal.databaseaccess.DatabaseCall call)
                                  throws 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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • buildSelectQueryForSequenceObject

        public ValueReadQuery buildSelectQueryForSequenceObject​(String qualifiedSeqName,
                                                                Integer size)
        INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.
        Overrides:
        buildSelectQueryForSequenceObject in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsSequenceObjects

        public boolean supportsSequenceObjects()
        INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.
        Overrides:
        supportsSequenceObjects in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsOrderByParameters

        public boolean supportsOrderByParameters()
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Used to determine if the platform supports untyped parameters, as ordinal variables, within the Order By clause

        On by default. Only platforms without support added should disable this configuration.

        Overrides:
        supportsOrderByParameters in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • isAlterSequenceObjectSupported

        public boolean isAlterSequenceObjectSupported()
        INTERNAL: DB2 added SEQUENCE support as of (I believe) v8.
        Overrides:
        isAlterSequenceObjectSupported in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintForUpdateClause

        public boolean shouldPrintForUpdateClause()
        Overrides:
        shouldPrintForUpdateClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • printSQLSelectStatement

        public void printSQLSelectStatement​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call,
                                            org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter printer,
                                            org.eclipse.persistence.internal.expressions.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 class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform