Class SQLServerPlatform

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, org.eclipse.persistence.internal.core.databaseaccess.CorePlatform<org.eclipse.persistence.internal.helper.ConversionManager>, org.eclipse.persistence.internal.databaseaccess.Platform

    public class SQLServerPlatform
    extends DatabasePlatform

    Purpose: Provides SQL Server specific behavior.

    Responsibilities:

    • Native SQL for byte[], Date, Time, & Timestamp.
    • Native sequencing using @@IDENTITY.
    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, 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
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected static ExpressionOperator addMonthsOperator()
      INTERNAL: Function, to add months to a date.
      protected void appendByteArray​(byte[] bytes, java.io.Writer writer)
      If using native SQL then print a byte[] as '0xFF...'
      protected void appendCalendar​(java.util.Calendar calendar, java.io.Writer writer)
      Answer a platform correct string representation of a Calendar, suitable for SQL generation.
      protected void appendDate​(java.sql.Date date, java.io.Writer writer)
      Answer a platform correct string representation of a Date, suitable for SQL generation.
      protected void appendSybaseCalendar​(java.util.Calendar calendar, java.io.Writer writer)
      Write a timestamp in Sybase specific format ( yyyy-mm-dd-hh.mm.ss.fff)
      protected void appendSybaseTimestamp​(java.sql.Timestamp timestamp, java.io.Writer writer)
      Write a timestamp in Sybase specific format ( yyyy-mm-dd-hh.mm.ss.fff)
      protected void appendTime​(java.sql.Time time, java.io.Writer writer)
      Answer a platform correct string representation of a Time, suitable for SQL generation.
      protected void appendTimestamp​(java.sql.Timestamp timestamp, java.io.Writer writer)
      Answer a platform correct string representation of a Timestamp, suitable for SQL generation.
      protected java.util.Hashtable buildFieldTypes()  
      ValueReadQuery buildSelectQueryForIdentity()
      INTERNAL: Build the identity query for native sequencing.
      ValueReadQuery buildSelectQueryForSequenceObject​(java.lang.String qualifiedSeqName, java.lang.Integer size)
      INTERNAL: Produce a DataReadQuery which updates(!)
      boolean dontBindUpdateAllQueryUsingTempTables()
      INTERNAL: In SQLServer local temporary table created by one PreparedStatement can't be used in another PreparedStatement.
      protected static ExpressionOperator extractOperator()
      INTERNAL: Derby does not support EXTRACT, but does have DATEPART.
      java.lang.String getBatchDelimiterString()
      Used for batch writing and sp defs.
      protected java.lang.String getCreateTempTableSqlPrefix()
      INTERNAL:
      java.lang.String getCreationInOutputProcedureToken()
      This method is used to print the required output parameter token for the specific platform.
      java.lang.String getCreationOutputProcedureToken()
      This method is used to print the required output parameter token for the specific platform.
      java.lang.String getInOutputProcedureToken()
      This method is used to print the output parameter token when stored procedures are called
      int getMaxFieldNameSize()
      INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.
      java.util.Vector getNativeTableInfo​(java.lang.String table, java.lang.String creator, org.eclipse.persistence.internal.sessions.AbstractSession session)
      Return the catalog information through using the native SQL catalog selects.
      java.lang.Object getObjectFromResultSet​(java.sql.ResultSet resultSet, int columnNumber, int type, org.eclipse.persistence.internal.sessions.AbstractSession session)  
      java.lang.String getOutputProcedureToken()
      This method is used to print the output parameter token when stored procedures are called
      java.lang.String getProcedureArgumentString()
      Used for sp defs.
      java.lang.String getProcedureCallHeader()
      Used for sp calls.
      java.lang.String getSelectForUpdateNoWaitString()
      INTERNAL: This syntax does no wait on the lock.
      java.lang.String getSelectForUpdateString()
      INTERNAL: Lock.
      java.lang.String getStoredProcedureParameterPrefix()  
      org.eclipse.persistence.internal.helper.DatabaseTable getTempTableForTable​(org.eclipse.persistence.internal.helper.DatabaseTable table)
      INTERNAL:
      ValueReadQuery getTimestampQuery()
      PUBLIC: This method returns the query to select the timestamp from the server for SQLServer.
      void initializeConnectionData​(java.sql.Connection connection)  
      protected void initializePlatformOperators()
      Initialize any platform-specific operators
      protected static ExpressionOperator inStringOperator()
      INTERNAL: Build instring operator
      boolean isOutputAllowWithResultSet()
      INTERNAL: Return true if output parameters can be built with result sets.
      boolean isSQLServer()  
      protected static ExpressionOperator locate2Operator()
      INTERNAL: create the Locate2 Operator for this platform
      protected static ExpressionOperator locateOperator()
      INTERNAL: Build the Sybase equivalent to Locate
      java.util.Hashtable maximumNumericValues()
      Builds a table of maximum numeric values keyed on java class.
      java.util.Hashtable minimumNumericValues()
      Builds a table of minimum numeric values keyed on java class.
      protected ExpressionOperator modOperator()
      Override the default MOD operator.
      protected static ExpressionOperator operatorOuterJoin()  
      void printFieldIdentityClause​(java.io.Writer writer)
      INTERNAL: Append the receiver's field 'identity' constraint clause to a writer.
      void printFieldNullClause​(java.io.Writer writer)
      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)  
      boolean requiresProcedureCallBrackets()
      USed for sp calls.
      boolean requiresProcedureCallOuputToken()
      Used for sp calls.
      void setDriverSupportsOffsetDateTime​(boolean driverSupportsOffsetDateTime)
      Allow user to turn off ODT support, in case they rely on the old behavior.
      void setParameterValueInDatabaseCall​(java.lang.Object parameter, java.sql.CallableStatement statement, java.lang.String name, org.eclipse.persistence.internal.sessions.AbstractSession session)  
      void setParameterValueInDatabaseCall​(java.lang.Object parameter, java.sql.PreparedStatement statement, int index, org.eclipse.persistence.internal.sessions.AbstractSession session)  
      boolean shouldPrintInOutputTokenBeforeType()
      This is required in the construction of the stored procedures with output parameters
      boolean shouldPrintLockingClauseAfterWhereClause()
      INTERNAL: Indicates whether locking clause should be printed after where clause by SQLSelectStatement.
      boolean shouldPrintOutputTokenBeforeType()
      This is required in the construction of the stored procedures with output parameters
      boolean shouldUseJDBCOuterJoinSyntax()
      JDBC defines and outer join syntax, many drivers do not support this.
      protected static ExpressionOperator singleArgumentSubstringOperator()
      Override the default SubstringSingleArg operator.
      boolean supportsIdentity()
      INTERNAL: Indicates whether the platform supports identity.
      boolean supportsLocalTempTables()
      INTERNAL:
      boolean supportsSequenceObjects()
      INTERNAL:
      protected static ExpressionOperator toCharOperator()
      INTERNAL: Build Sybase equivalent to TO_CHAR.
      protected static ExpressionOperator toDateOperator()
      INTERNAL: Build Sybase equivalent to TO_DATE.
      protected static ExpressionOperator toDateToStringOperator()
      INTERNAL: Build Sybase equivalent to TO_CHAR.
      protected static ExpressionOperator toNumberOperator()
      INTERNAL: Build Sybase equivalent to TO_NUMBER.
      protected static ExpressionOperator trim2Operator()
      INTERNAL: Build Trim operator.
      protected static ExpressionOperator trimOperator()
      INTERNAL: Use RTRIM(LTRIM(?))
      void writeUpdateOriginalFromTempTableSql​(java.io.Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, java.util.Collection pkFields, java.util.Collection assignedFields)
      INTERNAL:
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

        addBatch, addStructConverter, allowBindingForSelectClause, 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, getBatchEndString, getBatchRowCountAssignString, getBatchRowCountDeclareString, getBatchRowCountReturnString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConnectionUserName, getConstraintDeletionString, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateTempTableSqlSuffix, getCreateViewString, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getDropCascadeString, getDropDatabaseSchemaString, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIdentifierQuoteCharacter, getIndexNamePrefix, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgument, getProcedureAsString, getProcedureBeginString, getProcedureCallTail, getProcedureEndString, getProcedureOptionList, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateOfString, getSelectForUpdateWaitString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTableExistsQuery, getTransactionIsolation, getTypeConverters, getUniqueConstraintDeletionString, getUseNationalCharacterVaryingTypeForString, getVPDClearIdentifierQuery, getVPDCreationFunctionString, getVPDCreationPolicyString, getVPDDeletionString, getVPDSetIdentifierQuery, hasPartitioningCallback, initialize, isAlterSequenceObjectSupported, isCastRequired, isDynamicSQLRequiredForFunctions, isForUpdateCompatibleWithDistinct, isInformixOuterJoin, isJDBCExecuteCompliant, isLobCompatibleWithDistinct, isLockTimeoutException, isNullAllowedInSelectClause, isRowCountOutputParameterRequired, isXDBDocument, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldTypeSize, printFieldTypeSize, printFieldUnique, printFieldUnique, printStoredFunctionReturnKeyWord, printValuelist, printValuelist, registerOutputParameter, registerOutputParameter, registerOutputParameter, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureBrackets, requiresTableInIndexDropDDL, requiresTypeNameToRegisterOutputParameter, requiresUniqueConstraintCreationOnTableCreate, retrieveFirstPrimaryKeyOrOne, rollbackTransaction, setBatchWritingMechanism, setCastSizeForVarcharParameter, setClassTypes, setCursorCode, setDriverName, setDriverSupportsNVarChar, setFieldTypes, setIsCastRequired, setMaxBatchWritingSize, setNullFromDatabaseField, setNullFromDatabaseField, 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, shouldPrintForUpdateClause, shouldPrintInnerJoinInWhereClause, shouldPrintInputTokenAtStart, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenAtStart, shouldPrintStoredProcedureArgumentNameInCall, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsAutoConversionToNumericForArithmeticOperations, supportsConnectionUserName, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsGlobalTempTables, supportsIndexes, supportsIndividualTableLocking, supportsLockingQueriesWithMultipleTables, supportsNestingOuterJoins, supportsOrderByParameters, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsStoredFunctions, supportsTempTables, supportsUniqueColumns, supportsUniqueKeyConstraints, supportsVPD, supportsWaitForUpdate, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesSequenceTable, usesStreamsForBinding, usesStringBinding, wasFailureCommunicationBased, writeAddColumnClause, writeAutoAssignmentSetClause, writeAutoJoinWhereClause, writeCleanUpTempTableSql, writeCreateTempTableSql, writeDeleteFromTargetTableUsingTempTableSql, writeFields, writeFieldsAutoClause, writeFieldsList, writeInsertIntoTableSql, writeJoinWhereClause, writeLOB, writeParameterMarker, writeTableCreationSuffix
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

        addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, clone, convertObject, 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, isDB2, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isInformix, isMaxDB, isMySQL, isODBC, isOracle, isOracle23, isOracle9, isPervasive, isPointBase, isPostgreSQL, isSQLAnywhere, 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
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • SQLServerPlatform

        public SQLServerPlatform()
    • Method Detail

      • initializeConnectionData

        public void initializeConnectionData​(java.sql.Connection connection)
                                      throws java.sql.SQLException
        Overrides:
        initializeConnectionData in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.sql.SQLException
      • setDriverSupportsOffsetDateTime

        public void setDriverSupportsOffsetDateTime​(boolean driverSupportsOffsetDateTime)
        Allow user to turn off ODT support, in case they rely on the old behavior.
      • appendByteArray

        protected void appendByteArray​(byte[] bytes,
                                       java.io.Writer writer)
                                throws java.io.IOException
        If using native SQL then print a byte[] as '0xFF...'
        Overrides:
        appendByteArray in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • appendDate

        protected void appendDate​(java.sql.Date date,
                                  java.io.Writer writer)
                           throws java.io.IOException
        Answer a platform correct string representation of a Date, suitable for SQL generation. Native format: 'yyyy-mm-dd
        Overrides:
        appendDate in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • appendSybaseTimestamp

        protected void appendSybaseTimestamp​(java.sql.Timestamp timestamp,
                                             java.io.Writer writer)
                                      throws java.io.IOException
        Write a timestamp in Sybase specific format ( yyyy-mm-dd-hh.mm.ss.fff)
        Throws:
        java.io.IOException
      • appendSybaseCalendar

        protected void appendSybaseCalendar​(java.util.Calendar calendar,
                                            java.io.Writer writer)
                                     throws java.io.IOException
        Write a timestamp in Sybase specific format ( yyyy-mm-dd-hh.mm.ss.fff)
        Throws:
        java.io.IOException
      • appendTime

        protected void appendTime​(java.sql.Time time,
                                  java.io.Writer writer)
                           throws java.io.IOException
        Answer a platform correct string representation of a Time, suitable for SQL generation. The time is printed in the ODBC platform independent format {t'hh:mm:ss'}.
        Overrides:
        appendTime in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • appendTimestamp

        protected void appendTimestamp​(java.sql.Timestamp timestamp,
                                       java.io.Writer writer)
                                throws java.io.IOException
        Answer a platform correct string representation of a Timestamp, suitable for SQL generation. The date is printed in the ODBC platform independent format {d'YYYY-MM-DD'}.
        Overrides:
        appendTimestamp in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • appendCalendar

        protected void appendCalendar​(java.util.Calendar calendar,
                                      java.io.Writer writer)
                               throws java.io.IOException
        Answer a platform correct string representation of a Calendar, suitable for SQL generation. The date is printed in the ODBC platform independent format {d'YYYY-MM-DD'}.
        Overrides:
        appendCalendar in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • buildFieldTypes

        protected java.util.Hashtable buildFieldTypes()
        Overrides:
        buildFieldTypes 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
      • buildSelectQueryForSequenceObject

        public ValueReadQuery buildSelectQueryForSequenceObject​(java.lang.String qualifiedSeqName,
                                                                java.lang.Integer size)
        INTERNAL: Produce a DataReadQuery which updates(!) the sequence number in the database and returns it.
        Overrides:
        buildSelectQueryForSequenceObject in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
        Parameters:
        qualifiedSeqName - a defined database sequence
      • dontBindUpdateAllQueryUsingTempTables

        public boolean dontBindUpdateAllQueryUsingTempTables()
        INTERNAL: In SQLServer local temporary table created by one PreparedStatement can't be used in another PreparedStatement. Workaround is to use Statement instead of PreparedStatement.
        Overrides:
        dontBindUpdateAllQueryUsingTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getBatchDelimiterString

        public java.lang.String getBatchDelimiterString()
        Used for batch writing and sp defs.
        Overrides:
        getBatchDelimiterString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreationInOutputProcedureToken

        public java.lang.String getCreationInOutputProcedureToken()
        This method is used to print the required output parameter token for the specific platform. Used when stored procedures are created.
        Overrides:
        getCreationInOutputProcedureToken in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreationOutputProcedureToken

        public java.lang.String getCreationOutputProcedureToken()
        This method is used to print the required output parameter token for the specific platform. Used when stored procedures are created.
        Overrides:
        getCreationOutputProcedureToken in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getInOutputProcedureToken

        public java.lang.String getInOutputProcedureToken()
        This method is used to print the output parameter token when stored procedures are called
        Overrides:
        getInOutputProcedureToken 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 java.util.Vector getNativeTableInfo​(java.lang.String table,
                                                   java.lang.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.
      • getOutputProcedureToken

        public java.lang.String getOutputProcedureToken()
        This method is used to print the output parameter token when stored procedures are called
        Overrides:
        getOutputProcedureToken in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureArgumentString

        public java.lang.String getProcedureArgumentString()
        Used for sp defs.
        Overrides:
        getProcedureArgumentString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureCallHeader

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

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

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

        public java.lang.String getSelectForUpdateString()
        INTERNAL: Lock. UPDLOCK seems like the correct table hint to use: HOLDLOCK is too weak - doesn't lock out another read with HOLDLOCK, XLOCK is too strong - locks out another read which doesn't use any locks. UPDLOCK seems to behave exactly like Oracle's FOR UPDATE: locking out updates and other reads with FOR UPDATE but allowing other reads without locks. SQLServer seems to decide itself on the granularity of the lock - it could lock more than the returned rows (for instance a page). It could be forced to obtain to make sure to obtain row level lock: WITH (UPDLOCK, ROWLOCK) However this approach is strongly discouraged because it can consume too much resources: selecting 900 rows from and requiring a "personal" lock for each row may not be feasible because of not enough memory available at the moment - in that case SQLServer will wait until the resource becomes available.
        Overrides:
        getSelectForUpdateString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getSelectForUpdateNoWaitString

        public java.lang.String getSelectForUpdateNoWaitString()
        INTERNAL: This syntax does no wait on the lock.
        Overrides:
        getSelectForUpdateNoWaitString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintLockingClauseAfterWhereClause

        public boolean shouldPrintLockingClauseAfterWhereClause()
        INTERNAL: Indicates whether locking clause should be printed after where clause by SQLSelectStatement. Example: on Oracle platform (method returns true): SELECT ADDRESS_ID, ... FROM ADDRESS WHERE (ADDRESS_ID = ?) FOR UPDATE on SQLServer platform (method returns false): SELECT ADDRESS_ID, ... FROM ADDRESS WITH (UPDLOCK) WHERE (ADDRESS_ID = ?)
        Overrides:
        shouldPrintLockingClauseAfterWhereClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • initializePlatformOperators

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

        protected static ExpressionOperator extractOperator()
        INTERNAL: Derby does not support EXTRACT, but does have DATEPART.
      • trimOperator

        protected static ExpressionOperator trimOperator()
        INTERNAL: Use RTRIM(LTRIM(?)) function for trim.
      • trim2Operator

        protected static ExpressionOperator trim2Operator()
        INTERNAL: Build Trim operator.
      • modOperator

        protected ExpressionOperator modOperator()
        Override the default MOD operator.
      • singleArgumentSubstringOperator

        protected static ExpressionOperator singleArgumentSubstringOperator()
        Override the default SubstringSingleArg operator.
      • locate2Operator

        protected static ExpressionOperator locate2Operator()
        INTERNAL: create the Locate2 Operator for this platform
      • addMonthsOperator

        protected static ExpressionOperator addMonthsOperator()
        INTERNAL: Function, to add months to a date.
      • inStringOperator

        protected static ExpressionOperator inStringOperator()
        INTERNAL: Build instring operator
      • toNumberOperator

        protected static ExpressionOperator toNumberOperator()
        INTERNAL: Build Sybase equivalent to TO_NUMBER.
      • toDateToStringOperator

        protected static ExpressionOperator toDateToStringOperator()
        INTERNAL: Build Sybase equivalent to TO_CHAR.
      • toDateOperator

        protected static ExpressionOperator toDateOperator()
        INTERNAL: Build Sybase equivalent to TO_DATE.
      • toCharOperator

        protected static ExpressionOperator toCharOperator()
        INTERNAL: Build Sybase equivalent to TO_CHAR.
      • locateOperator

        protected static ExpressionOperator locateOperator()
        INTERNAL: Build the Sybase equivalent to Locate
      • isOutputAllowWithResultSet

        public boolean isOutputAllowWithResultSet()
        INTERNAL: Return true if output parameters can be built with result sets.
        Overrides:
        isOutputAllowWithResultSet in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • isSQLServer

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

        public java.util.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 java.util.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
      • printFieldIdentityClause

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

        public void printFieldNullClause​(java.io.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
      • requiresProcedureCallBrackets

        public boolean requiresProcedureCallBrackets()
        USed for sp calls.
        Overrides:
        requiresProcedureCallBrackets in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • requiresProcedureCallOuputToken

        public boolean requiresProcedureCallOuputToken()
        Used for sp calls. Sybase must print output after output params.
        Overrides:
        requiresProcedureCallOuputToken in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintInOutputTokenBeforeType

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

        public boolean shouldPrintOutputTokenBeforeType()
        This is required in the construction of the stored procedures with output parameters
        Overrides:
        shouldPrintOutputTokenBeforeType 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
      • supportsIdentity

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

        public boolean supportsSequenceObjects()
        INTERNAL:
        Overrides:
        supportsSequenceObjects in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsLocalTempTables

        public boolean supportsLocalTempTables()
        INTERNAL:
        Overrides:
        supportsLocalTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreateTempTableSqlPrefix

        protected java.lang.String getCreateTempTableSqlPrefix()
        INTERNAL:
        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:
        Overrides:
        getTempTableForTable in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • writeUpdateOriginalFromTempTableSql

        public void writeUpdateOriginalFromTempTableSql​(java.io.Writer writer,
                                                        org.eclipse.persistence.internal.helper.DatabaseTable table,
                                                        java.util.Collection pkFields,
                                                        java.util.Collection assignedFields)
                                                 throws java.io.IOException
        INTERNAL:
        Overrides:
        writeUpdateOriginalFromTempTableSql in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • 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)
        Overrides:
        printSQLSelectStatement in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getObjectFromResultSet

        public java.lang.Object getObjectFromResultSet​(java.sql.ResultSet resultSet,
                                                       int columnNumber,
                                                       int type,
                                                       org.eclipse.persistence.internal.sessions.AbstractSession session)
                                                throws java.sql.SQLException
        Overrides:
        getObjectFromResultSet in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.sql.SQLException
      • setParameterValueInDatabaseCall

        public void setParameterValueInDatabaseCall​(java.lang.Object parameter,
                                                    java.sql.PreparedStatement statement,
                                                    int index,
                                                    org.eclipse.persistence.internal.sessions.AbstractSession session)
                                             throws java.sql.SQLException
        Overrides:
        setParameterValueInDatabaseCall in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.sql.SQLException
      • setParameterValueInDatabaseCall

        public void setParameterValueInDatabaseCall​(java.lang.Object parameter,
                                                    java.sql.CallableStatement statement,
                                                    java.lang.String name,
                                                    org.eclipse.persistence.internal.sessions.AbstractSession session)
                                             throws java.sql.SQLException
        Overrides:
        setParameterValueInDatabaseCall in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.sql.SQLException