Module eclipselink

Class MySQLPlatform

  • 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:
    MariaDBPlatform

    public class MySQLPlatform
    extends DatabasePlatform

    Purpose: Provides MySQL specific behavior.

    Responsibilities:

    • Native SQL for Date, Time, & Timestamp.
    • Native sequencing.
    • Mapping of class types to database types for the schema framework.
    • Pessimistic locking.
    • Platform specific operators.
    See Also:
    Serialized Form
    Since:
    OracleAS TopLink 10g (10.1.3)
    • 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, 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, uuidQuery
    • Constructor Summary

      Constructors 
      Constructor Description
      MySQLPlatform()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void appendCalendar​(Calendar calendar, Writer writer)
      Appends an MySQL specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format.
      protected void appendDate​(Date date, Writer writer)
      Appends an MySQL specific date if usesNativeSQL is true otherwise use the ODBC format.
      protected void appendTime​(Time time, Writer writer)
      Appends an MySQL specific time if usesNativeSQL is true otherwise use the ODBC format.
      protected void appendTimestamp​(Timestamp timestamp, Writer writer)
      Appends an MySQL specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format.
      protected Hashtable<Class<?>,​org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition> buildFieldTypes()
      Return the mapping of class types to database types for the schema framework.
      String buildProcedureCallString​(StoredProcedureCall call, org.eclipse.persistence.internal.sessions.AbstractSession session, org.eclipse.persistence.internal.sessions.AbstractRecord row)
      Return the stored procedure syntax for this platform.
      ValueReadQuery buildSelectQueryForIdentity()
      INTERNAL: Build the identity query for native sequencing.
      boolean canBatchWriteWithOptimisticLocking​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call)
      INTERNAL: Supports Batch Writing with Optimistic Locking.
      boolean checkTableExists​(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl session, TableDefinition table, boolean suppressLogging)
      INTERNAL: Executes and evaluates query to check whether given table exists.
      int computeMaxRowsForSQL​(int firstResultIndex, int maxResults)
      INTERNAL: Use the JDBC maxResults and firstResultIndex setting to compute a value to use when limiting the results of a query in SQL.
      protected ExpressionOperator currentDateOperator()
      INTERNAL: Create the current date operator for this platform.
      static ExpressionOperator currentTime()
      INTERNAL: MySQL specific currentTime operator.
      static ExpressionOperator currentTimeStamp()
      INTERNAL: MySQL specific currentTimeStamp operator.
      protected ExpressionOperator dateToStringOperator()
      INTERNAL: Build MySQL equivalent to TO_CHAR.
      String getConstraintDeletionString()
      INTERNAL: Used for constraint deletion.
      protected String getCreateTempTableSqlPrefix()
      INTERNAL: MySQL temp table syntax, used for update-all, delete-all queries.
      String getDropDatabaseSchemaString​(String schema)
      Return the drop schema definition.
      String getFunctionCallHeader()
      Used for stored function calls.
      String getInOutputProcedureToken()
      INTERNAL: MySQL uses the INOUT keyword for this.
      int getJDBCType​(Class<?> javaType)
      Return the JDBC type for the Java type.
      String getProcedureAsString()
      MySQL does not use the AS token.
      String getProcedureBeginString()
      INTERNAL: MySQL requires BEGIN.
      String getProcedureCallHeader()
      INTERNAL: Used for stored procedure calls.
      String getProcedureCallTail()
      Used for sp calls.
      String getProcedureEndString()
      INTERNAL: MySQL requires END.
      String getSelectForUpdateString()
      INTERNAL: Used for pessimistic locking.
      protected DataReadQuery getTableExistsQuery​(TableDefinition table)
      INTERNAL: Returns query to check whether given table exists.
      ValueReadQuery getTimestampQuery()
      INTERNAL: This method returns the query to select the timestamp from the server for MySQL.
      String getUniqueConstraintDeletionString()
      INTERNAL: Used for unique constraint deletion.
      ValueReadQuery getUUIDQuery()
      INTERNAL: This method returns the query to select the UUID from the server for MySQL.
      void initializeConnectionData​(Connection connection)
      INTERNAL: Allow initialization from the connection.
      protected void initializePlatformOperators()
      Initialize any platform-specific operators.
      boolean isForUpdateCompatibleWithDistinct()
      INTERNAL: Indicates whether SELECT DISTINCT ...
      boolean isFractionalTimeSupported()  
      boolean isMySQL()
      Answers whether platform is MySQL.
      protected ExpressionOperator leftTrim2()
      INTERNAL: Build MySQL equivalent to LTRIM(string_exp, character).
      static ExpressionOperator localDateTime()
      INTERNAL: MySQL specific localDateTime operator.
      static ExpressionOperator localTime()
      INTERNAL: MySQL specific localTime operator.
      protected ExpressionOperator logOperator()
      INTERNAL: Create the 10 based log operator for this platform.
      void printFieldIdentityClause​(Writer writer)
      INTERNAL: Append the receiver's field 'identity' 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.
      void printStoredFunctionReturnKeyWord​(Writer writer)
      INTERNAL: Prints return keyword for StoredFunctionDefinition: CREATE FUNCTION StoredFunction_In (P_IN BIGINT) RETURN BIGINT The method was introduced because MySQL requires "RETURNS" instead: CREATE FUNCTION StoredFunction_In (P_IN BIGINT) RETURNS BIGINT
      boolean requiresProcedureBrackets()
      Used for stored procedure creation: MySQL platforms need brackets around arguments declaration even if no arguments exist.
      boolean requiresTableInIndexDropDDL()
      INTERNAL: Return if this database requires the table name when dropping an index.
      protected ExpressionOperator rightTrim2()
      INTERNAL: Build MySQL equivalent to RTRIM(string_exp, character).
      boolean shouldAlwaysUseTempStorageForModifyAll()
      INTERNAL: MySQL supports temp tables for update-all, delete-all queries.
      boolean shouldPrintForUpdateClause()
      INTERNAL: MySQL FOR UPDATE clause has to be the last
      boolean shouldPrintOutputTokenAtStart()
      INTERNAL: MySQL requires the direction at the start of the argument.
      boolean shouldPrintStoredProcedureArgumentNameInCall()
      INTERNAL: MySQL stored procedure calls do not require the argument name be printed in the call string e.g.
      boolean shouldUseJDBCOuterJoinSyntax()
      INTERNAL: JDBC defines an outer join syntax which many drivers do not support.
      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 ...
      boolean supportsCountDistinctWithMultipleFields()
      INTERNAL: Indicates whether the platform supports the count distinct function with multiple fields.
      boolean supportsGlobalTempTables()
      INTERNAL: MySQL supports temp tables for update-all, delete-all queries.
      boolean supportsIdentity()
      INTERNAL: Indicates whether the platform supports identity.
      boolean supportsIndividualTableLocking()
      INTERNAL: Indicates whether locking clause could be selectively applied only to some tables in a ReadQuery.
      boolean supportsStoredFunctions()  
      protected ExpressionOperator toCharOperator()
      INTERNAL: Build MySQL equivalent to TO_CHAR.
      protected ExpressionOperator toDateOperator()
      INTERNAL: Build MySQL equivalent to TO_DATE.
      static ExpressionOperator today()
      INTERNAL: MySQL specific today operator.
      protected ExpressionOperator toNumberOperator()
      INTERNAL: Build MySQL equivalent to TO_NUMBER.
      void writeDeleteFromTargetTableUsingTempTableSql​(Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, org.eclipse.persistence.internal.helper.DatabaseTable targetTable, Collection<org.eclipse.persistence.internal.helper.DatabaseField> pkFields, Collection<org.eclipse.persistence.internal.helper.DatabaseField> targetPkFields, org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform platform)
      INTERNAL: Writes MySQL specific SQL for accessing temp tables for delete-all queries.
      void writeParameterMarker​(Writer writer, org.eclipse.persistence.internal.expressions.ParameterExpression expression, org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.databaseaccess.DatabaseCall call)  
      void writeUpdateOriginalFromTempTableSql​(Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, Collection<org.eclipse.persistence.internal.helper.DatabaseField> pkFields, Collection<org.eclipse.persistence.internal.helper.DatabaseField> assignedFields)
      INTERNAL: Writes MySQL specific SQL for accessing temp tables for update-all queries.
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

        addBatch, addStructConverter, allowBindingForSelectClause, allowsSizeInProcedureArguments, appendBoolean, appendByteArray, appendLiteralToCall, appendLiteralToCallWithBinding, appendNumber, appendParameter, appendParameterInternal, appendString, autoCommit, beginTransaction, buildBatchCriteria, buildBatchCriteriaForComplexId, buildCallWithReturning, buildClassTypes, buildCreateIndex, buildCreateIndex, buildDropIndex, buildDropIndex, buildSequenceObjectAlterIncrementWriter, buildSequenceObjectCreationWriter, buildSequenceObjectDeletionWriter, canBuildCallWithReturning, commitTransaction, convertToDatabaseType, copyInto, createArray, createArray, createPlatformDefaultSequence, createStruct, createStruct, createStruct, dontBindUpdateAllQueryUsingTempTables, executeBatch, executeStoredProcedure, freeTemporaryObject, getAssignmentString, getBatchBeginString, getBatchDelimiterString, getBatchEndString, getBatchRowCountAssignString, getBatchRowCountDeclareString, getBatchRowCountReturnString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConnectionUserName, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateTempTableSqlSuffix, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getDropCascadeString, getFieldTypeDefinition, getFieldTypes, getIndexNamePrefix, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getJsonPlatform, getMaxBatchWritingSize, getMaxFieldNameSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getObjectFromResultSet, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgumentString, getProcedureOptionList, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateNoWaitString, getSelectForUpdateOfString, getSelectForUpdateWaitString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureParameterPrefix, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTempTableForTable, getTransactionIsolation, getTypeConverters, getUseNationalCharacterVaryingTypeForString, getVPDClearIdentifierQuery, getVPDCreationFunctionString, getVPDCreationPolicyString, getVPDDeletionString, getVPDSetIdentifierQuery, hasPartitioningCallback, initialize, isAlterSequenceObjectSupported, isCastRequired, isDynamicSQLRequiredForFunctions, isInformixOuterJoin, isJDBCExecuteCompliant, isLobCompatibleWithDistinct, isLockTimeoutException, isNullAllowedInSelectClause, isOutputAllowWithResultSet, isRowCountOutputParameterRequired, isXDBDocument, maximumNumericValues, minimumNumericValues, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldNullClause, printFieldTypeSize, printFieldTypeSize, printFieldUnique, printFieldUnique, printValuelist, printValuelist, registerOutputParameter, registerOutputParameter, registerOutputParameter, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureCallBrackets, requiresProcedureCallOuputToken, requiresTypeNameToRegisterOutputParameter, requiresUniqueConstraintCreationOnTableCreate, retrieveFirstPrimaryKeyOrOne, rollbackTransaction, setBatchWritingMechanism, setCastSizeForVarcharParameter, setClassTypes, setCursorCode, setDriverName, setDriverSupportsNVarChar, setFieldTypes, setIsCastRequired, setMaxBatchWritingSize, setNullFromDatabaseField, setNullFromDatabaseField, setParameterValueInDatabaseCall, setParameterValueInDatabaseCall, setPartitioningCallback, setPingSQL, setPrintInnerJoinInWhereClause, setPrintOuterJoinInWhereClause, setSequenceCounterFieldName, setSequenceNameFieldName, setSequenceTableName, setShouldBindAllParameters, setShouldBindLiterals, setShouldBindPartialParameters, setShouldCacheAllStatements, setShouldCreateIndicesOnForeignKeys, setShouldForceBindAllParameters, setShouldForceFieldNamesToUpperCase, setShouldIgnoreCaseOnFieldComparisons, setShouldOptimizeDataConversion, setShouldTrimStrings, setShouldUseRownumFiltering, setStatementCacheSize, setStoredProcedureTerminationToken, setStringBindingSize, setSupportsAutoCommit, setTableCreationSuffix, setTransactionIsolation, setUseJDBCStoredProcedureSyntax, setUseNationalCharacterVaryingTypeForString, setUsesBatchWriting, setUsesByteArrayBinding, setUsesJDBCBatchWriting, setUsesNativeBatchWriting, setUsesNativeSQL, setUsesStreamsForBinding, setUsesStringBinding, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldIgnoreException, shouldOptimizeDataConversion, shouldPrintAliasForUpdate, shouldPrintConstraintNameAfter, shouldPrintFieldIdentityClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsConnectionUserName, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsIndexes, supportsLocalTempTables, supportsLockingQueriesWithMultipleTables, supportsNestingOuterJoins, supportsOrderByParameters, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsTempTables, supportsUniqueColumns, supportsUniqueKeyConstraints, supportsVPD, supportsWaitForUpdate, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesSequenceTable, usesStreamsForBinding, usesStringBinding, wasFailureCommunicationBased, writeAddColumnClause, writeAutoAssignmentSetClause, writeAutoJoinWhereClause, writeCleanUpTempTableSql, writeCreateTempTableSql, writeFields, writeFieldsAutoClause, writeFieldsList, writeInsertIntoTableSql, writeJoinWhereClause, writeLOB, writeTableCreationSuffix
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

        addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, buildSelectQueryForSequenceObject, clone, 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, initIdentitySequences, isAccess, isAttunity, isCloudscape, isDB2, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isInformix, isMariaDB, isMaxDB, isODBC, isOracle, isOracle12, isOracle23, 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, setUUIDQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, shouldSelectIncludeOrderBy, supportsNativeSequenceNumbers, supportsReturnGeneratedKeys, supportsSequenceObjects, toString, usesPlatformDefaultSequence
      • Methods inherited from interface org.eclipse.persistence.internal.databaseaccess.Platform

        connectionProperties
    • Constructor Detail

      • MySQLPlatform

        public MySQLPlatform()
    • 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
      • isFractionalTimeSupported

        public boolean isFractionalTimeSupported()
      • appendDate

        protected void appendDate​(Date date,
                                  Writer writer)
                           throws IOException
        Appends an MySQL specific date if usesNativeSQL is true otherwise use the ODBC format. Native FORMAT: '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
        Appends an MySQL specific time if usesNativeSQL is true otherwise use the ODBC format. 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
        Appends an MySQL specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format. Native Format: 'YYYY-MM-DD HH:MM:SS'
        Overrides:
        appendTimestamp in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • appendCalendar

        protected void appendCalendar​(Calendar calendar,
                                      Writer writer)
                               throws IOException
        Appends an MySQL specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format. Native Format: 'YYYY-MM-DD HH:MM:SS'
        Overrides:
        appendCalendar in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • buildFieldTypes

        protected Hashtable<Class<?>,​org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition> buildFieldTypes()
        Return the mapping of class types to database types for the schema framework.
        Overrides:
        buildFieldTypes in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getJDBCType

        public int getJDBCType​(Class<?> javaType)
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Return the JDBC type for the Java type.
        Overrides:
        getJDBCType 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
      • buildProcedureCallString

        public String buildProcedureCallString​(StoredProcedureCall call,
                                               org.eclipse.persistence.internal.sessions.AbstractSession session,
                                               org.eclipse.persistence.internal.sessions.AbstractRecord row)
        Return the stored procedure syntax for this platform.
        Overrides:
        buildProcedureCallString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • computeMaxRowsForSQL

        public int computeMaxRowsForSQL​(int firstResultIndex,
                                        int maxResults)
        INTERNAL: Use the JDBC maxResults and firstResultIndex setting to compute a value to use when limiting the results of a query in SQL. These limits tend to be used in two ways. 1. MaxRows is the index of the last row to be returned (like JDBC maxResults) 2. MaxRows is the number of rows to be returned MySQL uses case #2 and therefore the maxResults has to be altered based on the firstResultIndex
        Overrides:
        computeMaxRowsForSQL in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        See Also:
        MySQLPlatform
      • canBatchWriteWithOptimisticLocking

        public boolean canBatchWriteWithOptimisticLocking​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call)
        INTERNAL: Supports Batch Writing with Optimistic Locking.
        Overrides:
        canBatchWriteWithOptimisticLocking in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getConstraintDeletionString

        public String getConstraintDeletionString()
        INTERNAL: Used for constraint deletion.
        Overrides:
        getConstraintDeletionString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getUniqueConstraintDeletionString

        public String getUniqueConstraintDeletionString()
        INTERNAL: Used for unique constraint deletion.
        Overrides:
        getUniqueConstraintDeletionString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getFunctionCallHeader

        public String getFunctionCallHeader()
        Used for stored function calls.
        Overrides:
        getFunctionCallHeader 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
      • getSelectForUpdateString

        public String getSelectForUpdateString()
        INTERNAL: Used for pessimistic locking.
        Overrides:
        getSelectForUpdateString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • isForUpdateCompatibleWithDistinct

        public boolean isForUpdateCompatibleWithDistinct()
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        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
      • getTimestampQuery

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

        public boolean isMySQL()
        Answers whether platform is MySQL.
        Specified by:
        isMySQL in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        isMySQL in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • initializePlatformOperators

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

        public static ExpressionOperator currentTimeStamp()
        INTERNAL: MySQL specific currentTimeStamp operator.
        Returns:
        new ExpressionOperator instance with currentTimeStamp
      • logOperator

        protected ExpressionOperator logOperator()
        INTERNAL: Create the 10 based log operator for this platform.
      • toNumberOperator

        protected ExpressionOperator toNumberOperator()
        INTERNAL: Build MySQL equivalent to TO_NUMBER.
      • toDateOperator

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

        protected ExpressionOperator toCharOperator()
        INTERNAL: Build MySQL equivalent to TO_CHAR.
      • dateToStringOperator

        protected ExpressionOperator dateToStringOperator()
        INTERNAL: Build MySQL equivalent to TO_CHAR.
      • leftTrim2

        protected ExpressionOperator leftTrim2()
        INTERNAL: Build MySQL equivalent to LTRIM(string_exp, character). MySQL: TRIM(LEADING character FROM string_exp)
      • rightTrim2

        protected ExpressionOperator rightTrim2()
        INTERNAL: Build MySQL equivalent to RTRIM(string_exp, character). MySQL: TRIM(TRAILING character FROM string_exp)
      • currentDateOperator

        protected ExpressionOperator currentDateOperator()
        INTERNAL: Create the current date operator for this platform.
      • printFieldIdentityClause

        public void printFieldIdentityClause​(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
      • shouldUseJDBCOuterJoinSyntax

        public boolean shouldUseJDBCOuterJoinSyntax()
        INTERNAL: JDBC defines an outer join syntax which many drivers do not support. 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. MySQL supports native sequencing through AUTO_INCREMENT field types.
        Overrides:
        supportsIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsCountDistinctWithMultipleFields

        public boolean supportsCountDistinctWithMultipleFields()
        INTERNAL: Indicates whether the platform supports the count distinct function with multiple fields.
        Overrides:
        supportsCountDistinctWithMultipleFields in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • requiresTableInIndexDropDDL

        public boolean requiresTableInIndexDropDDL()
        INTERNAL: Return if this database requires the table name when dropping an index.
        Overrides:
        requiresTableInIndexDropDDL in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsGlobalTempTables

        public boolean supportsGlobalTempTables()
        INTERNAL: MySQL supports temp tables for update-all, delete-all queries.
        Overrides:
        supportsGlobalTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsIndividualTableLocking

        public boolean supportsIndividualTableLocking()
        INTERNAL: Indicates whether locking clause could be selectively applied only to some tables in a ReadQuery. Example: the following locks the rows in SALARY table, doesn't lock the rows in EMPLOYEE table: on Oracle platform (method returns true): SELECT t0.EMP_ID..., t1.SALARY FROM EMPLOYEE t0, SALARY t1 WHERE ... FOR UPDATE t1.SALARY on SQLServer platform (method returns true): SELECT t0.EMP_ID..., t1.SALARY FROM EMPLOYEE t0, SALARY t1 WITH (UPDLOCK) WHERE ...
        Overrides:
        supportsIndividualTableLocking in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsStoredFunctions

        public boolean supportsStoredFunctions()
        Overrides:
        supportsStoredFunctions 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
      • getCreateTempTableSqlPrefix

        protected String getCreateTempTableSqlPrefix()
        INTERNAL: MySQL temp table syntax, used for update-all, delete-all queries.
        Overrides:
        getCreateTempTableSqlPrefix 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
      • shouldAlwaysUseTempStorageForModifyAll

        public boolean shouldAlwaysUseTempStorageForModifyAll()
        INTERNAL: MySQL supports temp tables for update-all, delete-all queries.
        Overrides:
        shouldAlwaysUseTempStorageForModifyAll in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintStoredProcedureArgumentNameInCall

        public boolean shouldPrintStoredProcedureArgumentNameInCall()
        INTERNAL: MySQL stored procedure calls do not require the argument name be printed in the call string e.g. call MyStoredProc(?) instead of call MyStoredProc(myvariable = ?)
        Overrides:
        shouldPrintStoredProcedureArgumentNameInCall in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintForUpdateClause

        public boolean shouldPrintForUpdateClause()
        INTERNAL: MySQL FOR UPDATE clause has to be the last
        Overrides:
        shouldPrintForUpdateClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getInOutputProcedureToken

        public String getInOutputProcedureToken()
        INTERNAL: MySQL uses the INOUT keyword for this.
        Overrides:
        getInOutputProcedureToken in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureAsString

        public String getProcedureAsString()
        MySQL does not use the AS token.
        Overrides:
        getProcedureAsString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintOutputTokenAtStart

        public boolean shouldPrintOutputTokenAtStart()
        INTERNAL: MySQL requires the direction at the start of the argument.
        Overrides:
        shouldPrintOutputTokenAtStart in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureCallHeader

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

        public String getProcedureBeginString()
        INTERNAL: MySQL requires BEGIN.
        Overrides:
        getProcedureBeginString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureEndString

        public String getProcedureEndString()
        INTERNAL: MySQL requires END.
        Overrides:
        getProcedureEndString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • writeUpdateOriginalFromTempTableSql

        public void writeUpdateOriginalFromTempTableSql​(Writer writer,
                                                        org.eclipse.persistence.internal.helper.DatabaseTable table,
                                                        Collection<org.eclipse.persistence.internal.helper.DatabaseField> pkFields,
                                                        Collection<org.eclipse.persistence.internal.helper.DatabaseField> assignedFields)
                                                 throws IOException
        INTERNAL: Writes MySQL specific SQL for accessing temp tables for update-all queries.
        Overrides:
        writeUpdateOriginalFromTempTableSql in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        pkFields - primary key fields for the original table.
        assignedFields - fields to be assigned a new value.
        Throws:
        IOException
      • writeDeleteFromTargetTableUsingTempTableSql

        public void writeDeleteFromTargetTableUsingTempTableSql​(Writer writer,
                                                                org.eclipse.persistence.internal.helper.DatabaseTable table,
                                                                org.eclipse.persistence.internal.helper.DatabaseTable targetTable,
                                                                Collection<org.eclipse.persistence.internal.helper.DatabaseField> pkFields,
                                                                Collection<org.eclipse.persistence.internal.helper.DatabaseField> targetPkFields,
                                                                org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform platform)
                                                         throws IOException
        INTERNAL: Writes MySQL specific SQL for accessing temp tables for delete-all queries.
        Overrides:
        writeDeleteFromTargetTableUsingTempTableSql in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        targetTable - is a table from which to delete.
        pkFields - primary key fields for the original table.
        targetPkFields - primary key fields for the target table.
        Throws:
        IOException
      • writeParameterMarker

        public void writeParameterMarker​(Writer writer,
                                         org.eclipse.persistence.internal.expressions.ParameterExpression expression,
                                         org.eclipse.persistence.internal.sessions.AbstractRecord record,
                                         org.eclipse.persistence.internal.databaseaccess.DatabaseCall call)
                                  throws IOException
        Overrides:
        writeParameterMarker in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        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)
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        INTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall.
        Overrides:
        printSQLSelectStatement in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • requiresProcedureBrackets

        public boolean requiresProcedureBrackets()
        Used for stored procedure creation: MySQL platforms need brackets around arguments declaration even if no arguments exist.
        Overrides:
        requiresProcedureBrackets in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • printStoredFunctionReturnKeyWord

        public void printStoredFunctionReturnKeyWord​(Writer writer)
                                              throws IOException
        INTERNAL: Prints return keyword for StoredFunctionDefinition: CREATE FUNCTION StoredFunction_In (P_IN BIGINT) RETURN BIGINT The method was introduced because MySQL requires "RETURNS" instead: CREATE FUNCTION StoredFunction_In (P_IN BIGINT) RETURNS BIGINT
        Overrides:
        printStoredFunctionReturnKeyWord in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • 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
      • getUUIDQuery

        public ValueReadQuery getUUIDQuery()
        INTERNAL: This method returns the query to select the UUID from the server for MySQL.
        Specified by:
        getUUIDQuery in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        getUUIDQuery in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform