Class OraclePlatform

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.OraclePlatform
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:
Oracle8Platform, Oracle8Platform

public class OraclePlatform extends DatabasePlatform

Purpose: Provides Oracle specific behavior.

Responsibilities:

  • Native SQL for byte[], Date, Time, & Timestamp.
  • Native sequencing named sequences.
  • Native SQL/ROWNUM support for MaxRows and FirstResult filtering.
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected String
     
    protected boolean
    Whether a FOR UPDATE clause should be printed at the end of the query
    protected boolean
    Advanced attribute indicating whether identity is supported, see comment to setSupportsIdentity method.
    protected static DataModifyQuery
     
    protected static DataModifyQuery
     

    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

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    Used for stored procedure definitions.
    protected void
    appendByteArray(byte[] bytes, Writer writer)
    INTERNAL: If using native SQL then print a byte[] literally as a hex string otherwise use ODBC format as provided in DatabasePlatform.
    protected void
    appendCalendar(Calendar calendar, Writer writer)
    INTERNAL: Appends an Oracle specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format.
    protected void
    appendDate(Date date, Writer writer)
    INTERNAL: Appends an Oracle specific date if usesNativeSQL is true otherwise use the ODBC format.
    protected void
    appendTime(Time time, Writer writer)
    INTERNAL: Appends an Oracle specific time if usesNativeSQL is true otherwise use the ODBC format.
    protected void
    appendTimestamp(Timestamp timestamp, Writer writer)
    INTERNAL: Appends an Oracle specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format.
    org.eclipse.persistence.internal.databaseaccess.DatabaseCall
    buildCallWithReturning(SQLCall sqlCall, Vector returnFields)
    INTERNAL: Returns null unless the platform supports call with returning
    protected Hashtable
    INTERNAL:
    protected String
    Build the hint string used for first rows.
    buildSelectQueryForIdentity(String qualifiedSeqName, Integer size)
    INTERNAL: Though Oracle doesn't support identity it could be imitated, see comment to setSupportsIdentity method.
    INTERNAL: Produce a DataReadQuery which updates(!) the sequence number in the db and returns it.
    boolean
    INTERNAL: Indicates whether the platform can build call with returning.
    boolean
    INTERNAL: Indicates whether this Oracle platform can unwrap Oracle connection.
    boolean
    checkTableExists(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl session, TableDefinition table, boolean suppressLogging)
    INTERNAL: Executes and evaluates query to check whether given table exists.
    void
    INTERNAL: Clears both implicit and explicit caches of OracleConnection on Oracle9Platform, noop here.
    createExpressionFor(org.eclipse.persistence.internal.helper.DatabaseField field, Expression builder, String fieldClassificationClassName)
    INTERNAL: Override this method if the platform needs to use a custom function based on the DatabaseField
    protected static ExpressionOperator
    INTERNAL: Create the EXCEPT operator, MINUS in Oracle.
    INTERNAL: Used for stored function calls.
    Used for batch writing and sp defs.
    Used for batch writing and sp defs.
    Used for batch writing for row count return.
    Used for batch writing for row count return.
    Used for batch writing for row count return.
    INTERNAL: DECLARE stanza header for Anonymous PL/SQL block
    Allows DROP TABLE to cascade dropping of any dependent constraints if the database supports this option.
    Return the drop schema definition.
    int
    INTERNAL: Some database platforms have a limit for the number of parameters in an IN clause.
    int
    INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.
    getNativeTableInfo(String table, String creator, org.eclipse.persistence.internal.sessions.AbstractSession session)
    Return the catalog information through using the native SQL catalog selects.
    getObjectFromResultSet(ResultSet resultSet, int columnNumber, int type, org.eclipse.persistence.internal.sessions.AbstractSession session)
    INTERNAL: Get a timestamp value from a result set.
    getProcedureArgument(String name, Object parameter, org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType parameterType, StoredProcedureCall call, org.eclipse.persistence.internal.sessions.AbstractSession session)
    Obtain the platform specific argument string
    Used for sp calls.
    Used for sp calls.
    Most database support a syntax.
    Platforms that support the WAIT option should override this method.
     
    PUBLIC: The query to select the current system change number from Oracle.
    protected DataReadQuery
    INTERNAL: Returns query to check whether given table exists.
    PUBLIC: This method returns the query to select the timestamp from the server for Oracle.
    INTERNAL: Return an Oracle defined VPD clear identifier query.
    getVPDCreationFunctionString(String tableName, String tenantFieldName)
    INTERNAL: Return an Oracle defined VPD identifier function.
    getVPDCreationPolicyString(String tableName, org.eclipse.persistence.internal.sessions.AbstractSession session)
    INTERNAL: Return an Oracle defined VPD identifier policy.
    getVPDDeletionString(String tableName, org.eclipse.persistence.internal.sessions.AbstractSession session)
    INTERNAL: Return an Oracle defined VPD identifier policy deletion.
    INTERNAL: Return an Oracle defined VPD set identifier query.
    void
    INTERNAL: Allow initialization from the connection.
    protected void
    Initialize any platform-specific operators
    boolean
    INTERNAL: Override this method if the platform supports sequence objects and it's possible to alter sequence object's increment in the database.
    boolean
    INTERNAL: Indicates whether SELECT DISTINCT ...
    boolean
    INTERNAL: Indicates whether SELECT DISTINCT lob FROM ...
    boolean
    Return true if the given exception occurred as a result of a lock time out exception (WAIT clause).
    boolean
    INTERNAL: Used by derived platforms (Oracle8Platform and higher) to indicate whether app.
    boolean
     
    boolean
    Oracle does not return the row count from PLSQL anon blocks, so an output parameter is required for this.
    protected static ExpressionOperator
    Create the log operator for this platform
    Builds a table of maximum numeric values keyed on java class.
    Builds a table of minimum numeric values keyed on java class.
    protected static ExpressionOperator
    INTERNAL: Override the default locate operator
    protected static ExpressionOperator
    INTERNAL: Override the default locate operator
    protected static ExpressionOperator
    Create the outer join operator for this platform
    protected static ExpressionOperator
    INTERNAL: Oracle equivalent to DATENAME is TO_CHAR.
    void
    INTERNAL: Append the receiver's field 'NULL' constraint clause to a writer.
    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.
    protected static ExpressionOperator
    INTERNAL: Create the REGEXP_LIKE operator.
    Return the current date and time from the server.
    void
    setSupportsIdentity(boolean supportsIdentity)
    ADVANCED: Oracle db doesn't support identity.
    boolean
     
    boolean
    INTERNAL: Should the variable name of a stored procedure call be printed as part of the procedure call e.g.
    boolean
    JDBC defines and outer join syntax, many drivers do not support this.
    boolean
    Some db allow VARCHAR db field to be used in arithmetic operations automatically converting them to numeric: UPDATE OL_PHONE SET PHONE_ORDER_VARCHAR = (PHONE_ORDER_VARCHAR + 1) WHERE ...
    boolean
    INTERNAL: Indicates whether the platform supports identity.
    boolean
    Returns true if the database supports SQL syntax not to wait on a SELECT..FOR UPADTE (i.e.
    boolean
    INTERNAL: Indicates whether the platform supports sequence objects.
    boolean
    INTERNAL: Return if database stored functions are supported.
    boolean
    Oracle db supports VPD.
    boolean
    INTERNAL: Indicates whether the platform supports timeouts on For Update
    INTERNAL: If can unwrap returns unwrapped Oracle connection, otherwise original connection.
    boolean
    Return true if JDBC syntax should be used for stored procedure calls.
    boolean
    wasFailureCommunicationBased(SQLException exception, Connection connection, org.eclipse.persistence.internal.sessions.AbstractSession sessionForProfile)
    INTERNAL: A call to this method will perform a platform based check on the connection and exception error code to determine if the connection is still valid or if a communication error has occurred.

    Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

    addBatch, addStructConverter, allowBindingForSelectClause, appendBoolean, appendLiteralToCall, appendLiteralToCallWithBinding, appendNumber, appendParameter, appendParameterInternal, appendString, autoCommit, beginTransaction, buildBatchCriteria, buildBatchCriteriaForComplexId, buildClassTypes, buildCreateIndex, buildCreateIndex, buildDropIndex, buildDropIndex, buildProcedureCallString, buildSequenceObjectAlterIncrementWriter, buildSequenceObjectCreationWriter, buildSequenceObjectDeletionWriter, canBatchWriteWithOptimisticLocking, commitTransaction, computeMaxRowsForSQL, convertToDatabaseType, copyInto, createArray, createArray, createPlatformDefaultSequence, createStruct, createStruct, createStruct, dontBindUpdateAllQueryUsingTempTables, executeBatch, executeStoredProcedure, freeTemporaryObject, getBatchDelimiterString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConnectionUserName, getConstraintDeletionString, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateTempTableSqlPrefix, getCreateTempTableSqlSuffix, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIndexNamePrefix, getInOutputProcedureToken, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgumentString, getProcedureAsString, getProcedureBeginString, getProcedureEndString, getProcedureOptionList, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateNoWaitString, getSelectForUpdateOfString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTempTableForTable, getTransactionIsolation, getTypeConverters, getUniqueConstraintDeletionString, getUseNationalCharacterVaryingTypeForString, hasPartitioningCallback, initialize, isCastRequired, isDynamicSQLRequiredForFunctions, isInformixOuterJoin, isJDBCExecuteCompliant, isNullAllowedInSelectClause, isOutputAllowWithResultSet, isXDBDocument, minimumTimeIncrement, prepareBatchStatement, printFieldIdentityClause, printFieldNotNullClause, printFieldTypeSize, 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, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldIgnoreException, shouldOptimizeDataConversion, shouldPrintAliasForUpdate, shouldPrintConstraintNameAfter, shouldPrintFieldIdentityClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenAtStart, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsConnectionUserName, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsGlobalTempTables, supportsIndexes, supportsIndividualTableLocking, supportsLocalTempTables, supportsLockingQueriesWithMultipleTables, supportsNestingOuterJoins, supportsOrderByParameters, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsTempTables, supportsUniqueColumns, supportsUniqueKeyConstraints, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesSequenceTable, usesStreamsForBinding, usesStringBinding, writeAddColumnClause, writeAutoAssignmentSetClause, writeAutoJoinWhereClause, writeCleanUpTempTableSql, writeCreateTempTableSql, writeDeleteFromTargetTableUsingTempTableSql, writeFields, writeFieldsAutoClause, writeFieldsList, writeInsertIntoTableSql, writeJoinWhereClause, writeLOB, writeParameterMarker, writeTableCreationSuffix, writeUpdateOriginalFromTempTableSql

    Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

    addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, clone, convertObject, createConnectionCustomizer, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSeqenceAtNextValue, getDefaultSequence, getDefaultSequenceToWrite, getEndDelimiter, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, initIdentitySequences, isAccess, isAttunity, isCloudscape, isDB2, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isInformix, isMaxDB, isMySQL, isODBC, 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, shouldSelectIncludeOrderBy, supportsNativeSequenceNumbers, supportsReturnGeneratedKeys, toString, usesPlatformDefaultSequence

    Methods inherited from class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • vpdSetIdentifierQuery

      protected static DataModifyQuery vpdSetIdentifierQuery
    • vpdClearIdentifierQuery

      protected static DataModifyQuery vpdClearIdentifierQuery
    • shouldPrintForUpdateClause

      protected boolean shouldPrintForUpdateClause
      Whether a FOR UPDATE clause should be printed at the end of the query
    • supportsIdentity

      protected boolean supportsIdentity
      Advanced attribute indicating whether identity is supported, see comment to setSupportsIdentity method.
    • SELECT

      protected String SELECT
    • HINT_START

      protected String HINT_START
    • HINT_END

      protected String HINT_END
    • FROM

      protected String FROM
    • END_FROM

      protected String END_FROM
    • MAX_ROW

      protected String MAX_ROW
    • MIN_ROW

      protected String MIN_ROW
    • LOCK_START_PREFIX

      protected String LOCK_START_PREFIX
    • LOCK_START_PREFIX_WHERE

      protected String LOCK_START_PREFIX_WHERE
    • LOCK_START_SUFFIX

      protected String LOCK_START_SUFFIX
    • LOCK_END

      protected String LOCK_END
    • SELECT_ID_PREFIX

      protected String SELECT_ID_PREFIX
    • SELECT_ID_SUFFIX

      protected String SELECT_ID_SUFFIX
    • FROM_ID

      protected String FROM_ID
    • END_FROM_ID

      protected String END_FROM_ID
    • ORDER_BY_ID

      protected String ORDER_BY_ID
    • BRACKET_END

      protected String BRACKET_END
  • Constructor Details

    • OraclePlatform

      public OraclePlatform()
  • Method Details

    • 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
    • allowsSizeInProcedureArguments

      public boolean allowsSizeInProcedureArguments()
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Used for stored procedure definitions.
      Overrides:
      allowsSizeInProcedureArguments in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • appendByteArray

      protected void appendByteArray(byte[] bytes, Writer writer) throws IOException
      INTERNAL: If using native SQL then print a byte[] literally as a hex string otherwise use ODBC format as provided in 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 an Oracle specific date if usesNativeSQL is true otherwise use the ODBC format. Native FORMAT: to_date('1997-11-06','yyyy-mm-dd')
      Overrides:
      appendDate in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Throws:
      IOException
    • appendTime

      protected void appendTime(Time time, Writer writer) throws IOException
      INTERNAL: Appends an Oracle specific time if usesNativeSQL is true otherwise use the ODBC format. Native FORMAT: to_date(#####, 'sssss').
      Overrides:
      appendTime in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Throws:
      IOException
    • appendTimestamp

      protected void appendTimestamp(Timestamp timestamp, Writer writer) throws IOException
      INTERNAL: Appends an Oracle specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format. Native Format: to_date ('1997-11-06 10:35:45.0' , 'yyyy-mm-dd hh:mm:ss.n')
      Overrides:
      appendTimestamp in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Throws:
      IOException
    • appendCalendar

      protected void appendCalendar(Calendar calendar, Writer writer) throws IOException
      INTERNAL: Appends an Oracle specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format. Native Format: to_date ('1997-11-06 10:35:45.0' , 'yyyy-mm-dd hh:mm:ss.n')
      Overrides:
      appendCalendar in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Throws:
      IOException
    • buildFieldTypes

      protected Hashtable buildFieldTypes()
      INTERNAL:
      Overrides:
      buildFieldTypes in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • buildFirstRowsHint

      protected String buildFirstRowsHint(int max)
      Build the hint string used for first rows. Allows it to be overridden
      Parameters:
      max -
      Returns:
    • buildCallWithReturning

      public org.eclipse.persistence.internal.databaseaccess.DatabaseCall buildCallWithReturning(SQLCall sqlCall, Vector returnFields)
      INTERNAL: Returns null unless the platform supports call with returning
      Overrides:
      buildCallWithReturning in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • canBuildCallWithReturning

      public boolean canBuildCallWithReturning()
      INTERNAL: Indicates whether the platform can build call with returning. In case this method returns true, buildCallWithReturning method may be called.
      Overrides:
      canBuildCallWithReturning in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • clearOracleConnectionCache

      public void clearOracleConnectionCache(Connection conn)
      INTERNAL: Clears both implicit and explicit caches of OracleConnection on Oracle9Platform, noop here.
    • getAssignmentString

      public String getAssignmentString()
      INTERNAL: Used for stored function calls.
      Overrides:
      getAssignmentString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getDeclareBeginString

      public String getDeclareBeginString()
      INTERNAL: DECLARE stanza header for Anonymous PL/SQL block
    • getBatchBeginString

      public String getBatchBeginString()
      Used for batch writing and sp defs.
      Overrides:
      getBatchBeginString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getBatchEndString

      public String getBatchEndString()
      Used for batch writing and sp defs.
      Overrides:
      getBatchEndString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getBatchRowCountDeclareString

      public String getBatchRowCountDeclareString()
      Used for batch writing for row count return.
      Overrides:
      getBatchRowCountDeclareString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • isRowCountOutputParameterRequired

      public boolean isRowCountOutputParameterRequired()
      Oracle does not return the row count from PLSQL anon blocks, so an output parameter is required for this.
      Overrides:
      isRowCountOutputParameterRequired in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getBatchRowCountReturnString

      public String getBatchRowCountReturnString()
      Used for batch writing for row count return.
      Overrides:
      getBatchRowCountReturnString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getDropDatabaseSchemaString

      public String getDropDatabaseSchemaString(String schema)
      Return the drop schema definition. Subclasses should override as needed.
      Overrides:
      getDropDatabaseSchemaString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getBatchRowCountAssignString

      public String getBatchRowCountAssignString()
      Used for batch writing for row count return.
      Overrides:
      getBatchRowCountAssignString 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
    • getNativeTableInfo

      public Vector getNativeTableInfo(String table, String creator, org.eclipse.persistence.internal.sessions.AbstractSession session)
      Return the catalog information through using the native SQL catalog selects. This is required because many JDBC driver do not support meta-data. Willcards can be passed as arguments.
    • getProcedureCallHeader

      public String getProcedureCallHeader()
      Used for sp calls.
      Overrides:
      getProcedureCallHeader in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getProcedureCallTail

      public String getProcedureCallTail()
      Used for sp calls.
      Overrides:
      getProcedureCallTail in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getDropCascadeString

      public String getDropCascadeString()
      Allows DROP TABLE to cascade dropping of any dependent constraints if the database supports this option.
      Overrides:
      getDropCascadeString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getSelectForUpdateString

      public String getSelectForUpdateString()
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Most database support a syntax. although don't actually lock the row. Some require the OF some don't like it.
      Overrides:
      getSelectForUpdateString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getSelectForUpdateWaitString

      public String getSelectForUpdateWaitString(Integer waitTimeout)
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Platforms that support the WAIT option should override this method. By default the wait timeout is ignored.
      Overrides:
      getSelectForUpdateWaitString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      See Also:
      • DatabasePlatform.supportsWaitForUpdate()
    • getStoredProcedureParameterPrefix

      public String getStoredProcedureParameterPrefix()
      Overrides:
      getStoredProcedureParameterPrefix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getSystemChangeNumberQuery

      public ValueReadQuery getSystemChangeNumberQuery()
      PUBLIC: The query to select the current system change number from Oracle. In order to execute this query a database administrator may need to grant execute permission on pl/sql package DBMS_FLASHBACK.
    • getTimestampQuery

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

      public DatabaseQuery getVPDClearIdentifierQuery(String vpdIdentifier)
      INTERNAL: Return an Oracle defined VPD clear identifier query.
      Overrides:
      getVPDClearIdentifierQuery in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getVPDCreationFunctionString

      public String getVPDCreationFunctionString(String tableName, String tenantFieldName)
      INTERNAL: Return an Oracle defined VPD identifier function. Used for DDL generation.
      Overrides:
      getVPDCreationFunctionString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getVPDCreationPolicyString

      public String getVPDCreationPolicyString(String tableName, org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Return an Oracle defined VPD identifier policy. Used for DDL generation.
      Overrides:
      getVPDCreationPolicyString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getVPDDeletionString

      public String getVPDDeletionString(String tableName, org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Return an Oracle defined VPD identifier policy deletion. Used for DDL generation.
      Overrides:
      getVPDDeletionString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getVPDSetIdentifierQuery

      public DatabaseQuery getVPDSetIdentifierQuery(String vpdIdentifier)
      INTERNAL: Return an Oracle defined VPD set identifier query.
      Overrides:
      getVPDSetIdentifierQuery in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getObjectFromResultSet

      public Object getObjectFromResultSet(ResultSet resultSet, int columnNumber, int type, org.eclipse.persistence.internal.sessions.AbstractSession session) throws SQLException
      INTERNAL: Get a timestamp value from a result set. Overrides the default behavior to specifically return a timestamp. Added to overcome an issue with the oracle 9.0.1.4 JDBC driver.
      Overrides:
      getObjectFromResultSet in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Throws:
      SQLException
      See Also:
      • "org.eclipse.persistence.platform.database.oracle.Oracle9Plaform"
    • initializePlatformOperators

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

      protected static ExpressionOperator operatorOuterJoin()
      Create the outer join operator for this platform
    • exceptOperator

      protected static ExpressionOperator exceptOperator()
      INTERNAL: Create the EXCEPT operator, MINUS in Oracle.
    • regexpOperator

      protected static ExpressionOperator regexpOperator()
      INTERNAL: Create the REGEXP_LIKE operator.
    • operatorLocate

      protected static ExpressionOperator operatorLocate()
      INTERNAL: Override the default locate operator
    • operatorLocate2

      protected static ExpressionOperator operatorLocate2()
      INTERNAL: Override the default locate operator
    • logOperator

      protected static ExpressionOperator logOperator()
      Create the log operator for this platform
    • oracleDateName

      protected static ExpressionOperator oracleDateName()
      INTERNAL: Oracle equivalent to DATENAME is TO_CHAR.
    • isNativeConnectionRequiredForLobLocator

      public boolean isNativeConnectionRequiredForLobLocator()
      INTERNAL: Used by derived platforms (Oracle8Platform and higher) to indicate whether app. server should unwrap connection to use lob locator.
    • isOracle

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

      public Hashtable maximumNumericValues()
      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()
      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
    • buildSelectQueryForSequenceObject

      public ValueReadQuery buildSelectQueryForSequenceObject(String qualifiedSeqName, Integer size)
      INTERNAL: Produce a DataReadQuery which updates(!) the sequence number in the db and returns it. Currently implemented on Oracle only.
      Overrides:
      buildSelectQueryForSequenceObject in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      Parameters:
      qualifiedSeqName - known by Oracle to be a defined sequence
    • buildSelectQueryForIdentity

      public ValueReadQuery buildSelectQueryForIdentity(String qualifiedSeqName, Integer size)
      INTERNAL: Though Oracle doesn't support identity it could be imitated, see comment to setSupportsIdentity method.
      Overrides:
      buildSelectQueryForIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      Parameters:
      qualifiedSeqName - known by Oracle to be a defined sequence
    • printFieldNullClause

      public void printFieldNullClause(Writer writer) throws ValidationException
      INTERNAL: Append the receiver's field 'NULL' constraint clause to a writer.
      Overrides:
      printFieldNullClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Throws:
      ValidationException
    • serverTimestampString

      public String serverTimestampString()
      Return the current date and time from the server.
    • shouldPrintStoredProcedureArgumentNameInCall

      public boolean shouldPrintStoredProcedureArgumentNameInCall()
      INTERNAL: Should the variable name of a stored procedure call be printed as part of the procedure call e.g. EXECUTE PROCEDURE MyStoredProc(myvariable = ?)
      Overrides:
      shouldPrintStoredProcedureArgumentNameInCall in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • getProcedureArgument

      public String getProcedureArgument(String name, Object parameter, org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType parameterType, StoredProcedureCall call, org.eclipse.persistence.internal.sessions.AbstractSession session)
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Obtain the platform specific argument string
      Overrides:
      getProcedureArgument in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • shouldUseJDBCOuterJoinSyntax

      public boolean shouldUseJDBCOuterJoinSyntax()
      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
    • supportsAutoConversionToNumericForArithmeticOperations

      public boolean supportsAutoConversionToNumericForArithmeticOperations()
      Some db allow VARCHAR db field to be used in arithmetic operations automatically converting them to numeric: UPDATE OL_PHONE SET PHONE_ORDER_VARCHAR = (PHONE_ORDER_VARCHAR + 1) WHERE ... SELECT ... WHERE ... t0.MANAGED_ORDER_VARCHAR BETWEEN 1 AND 4 ...
      Overrides:
      supportsAutoConversionToNumericForArithmeticOperations in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • supportsSequenceObjects

      public boolean supportsSequenceObjects()
      INTERNAL: Indicates whether the platform supports sequence objects. This method is to be used *ONLY* by sequencing classes
      Overrides:
      supportsSequenceObjects in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
    • supportsIdentity

      public boolean supportsIdentity()
      INTERNAL: Indicates whether the platform supports identity. This method is to be used *ONLY* by sequencing classes
      Overrides:
      supportsIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
    • setSupportsIdentity

      public void setSupportsIdentity(boolean supportsIdentity)
      ADVANCED: Oracle db doesn't support identity. However it's possible to get identity-like behavior using sequence in an insert trigger - that's the only case when supportsIdentity should be set to true: in this case all the sequences that have shouldAcquireValueAfterInsert set to true will keep this setting (it would've been reversed in case identity is not supported). Note that with supportsIdentity==true attempt to create tables that have identity fields will fail - Oracle doesn't support identity. Therefore if there's table creation reqiured it should be done with supportsIdentity==false, then set the flag to true and reset sequencing (or logout and login the session).
    • supportsStoredFunctions

      public boolean supportsStoredFunctions()
      INTERNAL: Return if database stored functions are supported.
      Overrides:
      supportsStoredFunctions in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • supportsVPD

      public boolean supportsVPD()
      Oracle db supports VPD.
      Overrides:
      supportsVPD in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • supportsWaitForUpdate

      public boolean supportsWaitForUpdate()
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      INTERNAL: Indicates whether the platform supports timeouts on For Update
      Overrides:
      supportsWaitForUpdate in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      See Also:
      • DatabasePlatform.getSelectForUpdateWaitString(Integer waitTimeout)
    • supportsSelectForUpdateNoWait

      public boolean supportsSelectForUpdateNoWait()
      Returns true if the database supports SQL syntax not to wait on a SELECT..FOR UPADTE (i.e. In Oracle adding NOWAIT to the end will accomplish this)
    • canUnwrapOracleConnection

      public boolean canUnwrapOracleConnection()
      INTERNAL: Indicates whether this Oracle platform can unwrap Oracle connection.
    • unwrapOracleConnection

      public Connection unwrapOracleConnection(Connection connection)
      INTERNAL: If can unwrap returns unwrapped Oracle connection, otherwise original connection.
    • useJDBCStoredProcedureSyntax

      public boolean useJDBCStoredProcedureSyntax()
      Return true if JDBC syntax should be used for stored procedure calls.
    • 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 Oracle's ROWNUM to filter values if shouldUseRownumFiltering is true.
      Overrides:
      printSQLSelectStatement in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • isAlterSequenceObjectSupported

      public boolean isAlterSequenceObjectSupported()
      INTERNAL: Override this method if the platform supports sequence objects and it's possible to alter sequence object's increment in the database.
      Overrides:
      isAlterSequenceObjectSupported in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • isForUpdateCompatibleWithDistinct

      public boolean isForUpdateCompatibleWithDistinct()
      INTERNAL: Indicates whether SELECT DISTINCT ... FOR UPDATE is allowed by the platform (Oracle doesn't allow this).
      Overrides:
      isForUpdateCompatibleWithDistinct in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • isLobCompatibleWithDistinct

      public boolean isLobCompatibleWithDistinct()
      INTERNAL: Indicates whether SELECT DISTINCT lob FROM ... (where lob is BLOB or CLOB) is allowed by the platform (Oracle doesn't allow this).
      Overrides:
      isLobCompatibleWithDistinct in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • isLockTimeoutException

      public boolean isLockTimeoutException(DatabaseException e)
      Return true if the given exception occurred as a result of a lock time out exception (WAIT clause).
      Overrides:
      isLockTimeoutException in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      See Also:
    • wasFailureCommunicationBased

      public boolean wasFailureCommunicationBased(SQLException exception, Connection connection, org.eclipse.persistence.internal.sessions.AbstractSession sessionForProfile)
      INTERNAL: A call to this method will perform a platform based check on the connection and exception error code to determine if the connection is still valid or if a communication error has occurred. If a communication error has occurred then the query may be retried. If this platform is unable to determine if the error was communication based it will return false forcing the error to be thrown to the user.
      Overrides:
      wasFailureCommunicationBased in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
    • shouldPrintForUpdateClause

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

      public Expression createExpressionFor(org.eclipse.persistence.internal.helper.DatabaseField field, Expression builder, String fieldClassificationClassName)
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      INTERNAL: Override this method if the platform needs to use a custom function based on the DatabaseField
      Overrides:
      createExpressionFor in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      Returns:
      An expression for the given field set equal to a parameter matching the field
    • getTableExistsQuery

      protected DataReadQuery getTableExistsQuery(TableDefinition table)
      INTERNAL: Returns query to check whether given table exists. Query execution returns a row when table exists or empty result otherwise.
      Overrides:
      getTableExistsQuery in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Parameters:
      table - database table meta-data
      Returns:
      query to check whether given table exists
    • checkTableExists

      public boolean checkTableExists(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl session, TableDefinition table, boolean suppressLogging)
      INTERNAL: Executes and evaluates query to check whether given table exists. Returned value depends on returned result set being empty or not.
      Overrides:
      checkTableExists in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      Parameters:
      session - current database session
      table - database table meta-data
      suppressLogging - whether to suppress logging during query execution
      Returns:
      value of true if given table exists or false otherwise
    • getINClauseLimit

      public int getINClauseLimit()
      Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      INTERNAL: Some database platforms have a limit for the number of parameters in an IN clause.
      Overrides:
      getINClauseLimit in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform