Module org.eclipse.persistence.core
Class MySQLPlatform
- 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.MySQLPlatform
-
- All Implemented Interfaces:
Serializable,Cloneable,CorePlatform<ConversionManager>,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.
- Since:
- OracleAS TopLink 10g (10.1.3)
- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from class org.eclipse.persistence.platform.database.DatabasePlatform
DEFAULT_VARCHAR_SIZE
-
Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
batchWritingMechanism, castSizeForVarcharParameter, classTypes, cursorCode, DEFAULT_MAX_BATCH_WRITING_SIZE, DEFAULT_PARAMETERIZED_MAX_BATCH_WRITING_SIZE, driverName, driverSupportsNationalCharacterVarying, fieldTypes, IS_VALID_TIMEOUT, isCastRequired, maxBatchWritingSize, partitioningCallback, pingSQL, printInnerJoinInWhereClause, printOuterJoinInWhereClause, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesOnForeignKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldOptimizeDataConversion, shouldTrimStrings, statementCacheSize, storedProcedureTerminationToken, stringBindingSize, structConverters, supportsAutoCommit, tableCreationSuffix, transactionIsolation, typeConverters, 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 voidappendCalendar(Calendar calendar, Writer writer)Appends an MySQL specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format.protected voidappendDate(Date date, Writer writer)Appends an MySQL specific date if usesNativeSQL is true otherwise use the ODBC format.protected voidappendTime(Time time, Writer writer)Appends an MySQL specific time if usesNativeSQL is true otherwise use the ODBC format.protected voidappendTimestamp(Timestamp timestamp, Writer writer)Appends an MySQL specific Timestamp, if usesNativeSQL is true otherwise use the ODBC format.protected Hashtable<Class<?>,FieldTypeDefinition>buildFieldTypes()Return the mapping of class types to database types for the schema framework.StringbuildProcedureCallString(StoredProcedureCall call, AbstractSession session, AbstractRecord row)Return the stored procedure syntax for this platform.ValueReadQuerybuildSelectQueryForIdentity()INTERNAL: Build the identity query for native sequencing.booleancanBatchWriteWithOptimisticLocking(DatabaseCall call)INTERNAL: Supports Batch Writing with Optimistic Locking.booleancheckTableExists(DatabaseSessionImpl session, TableDefinition table, boolean suppressLogging)INTERNAL: Executes and evaluates query to check whether given table exists.intcomputeMaxRowsForSQL(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 ExpressionOperatorcurrentDateOperator()INTERNAL: Create the current date operator for this platform.static ExpressionOperatorcurrentTime()INTERNAL: MySQL specificcurrentTimeoperator.static ExpressionOperatorcurrentTimeStamp()INTERNAL: MySQL specificcurrentTimeStampoperator.protected ExpressionOperatordateToStringOperator()INTERNAL: Build MySQL equivalent to TO_CHAR.StringgetConstraintDeletionString()INTERNAL: Used for constraint deletion.protected StringgetCreateTempTableSqlPrefix()INTERNAL: MySQL temp table syntax, used for update-all, delete-all queries.StringgetDropDatabaseSchemaString(String schema)Return the drop schema definition.StringgetFunctionCallHeader()Used for stored function calls.StringgetInOutputProcedureToken()INTERNAL: MySQL uses the INOUT keyword for this.intgetJDBCType(Class<?> javaType)Return the JDBC type for the Java type.StringgetProcedureAsString()MySQL does not use the AS token.StringgetProcedureBeginString()INTERNAL: MySQL requires BEGIN.StringgetProcedureCallHeader()INTERNAL: Used for stored procedure calls.StringgetProcedureCallTail()Used for sp calls.StringgetProcedureEndString()INTERNAL: MySQL requires END.StringgetSelectForUpdateString()INTERNAL: Used for pessimistic locking.protected DataReadQuerygetTableExistsQuery(TableDefinition table)INTERNAL: Returns query to check whether given table exists.ValueReadQuerygetTimestampQuery()INTERNAL: This method returns the query to select the timestamp from the server for MySQL.StringgetUniqueConstraintDeletionString()INTERNAL: Used for unique constraint deletion.ValueReadQuerygetUUIDQuery()INTERNAL: This method returns the query to select the UUID from the server for MySQL.voidinitializeConnectionData(Connection connection)INTERNAL: Allow initialization from the connection.protected voidinitializePlatformOperators()Initialize any platform-specific operators.booleanisForUpdateCompatibleWithDistinct()INTERNAL: Indicates whether SELECT DISTINCT ...booleanisFractionalTimeSupported()booleanisMySQL()Answers whether platform is MySQL.protected ExpressionOperatorleftTrim2()INTERNAL: Build MySQL equivalent to LTRIM(string_exp, character).static ExpressionOperatorlocalDateTime()INTERNAL: MySQL specificlocalDateTimeoperator.static ExpressionOperatorlocalTime()INTERNAL: MySQL specificlocalTimeoperator.protected ExpressionOperatorlogOperator()INTERNAL: Create the 10 based log operator for this platform.voidprintFieldIdentityClause(Writer writer)INTERNAL: Append the receiver's field 'identity' constraint clause to a writer.voidprintSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter printer, SQLSelectStatement statement)INTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall.voidprintStoredFunctionReturnKeyWord(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 BIGINTbooleanrequiresProcedureBrackets()Used for stored procedure creation: MySQL platforms need brackets around arguments declaration even if no arguments exist.booleanrequiresTableInIndexDropDDL()INTERNAL: Return if this database requires the table name when dropping an index.protected ExpressionOperatorrightTrim2()INTERNAL: Build MySQL equivalent to RTRIM(string_exp, character).booleanshouldAlwaysUseTempStorageForModifyAll()INTERNAL: MySQL supports temp tables for update-all, delete-all queries.booleanshouldPrintForUpdateClause()INTERNAL: MySQL FOR UPDATE clause has to be the lastbooleanshouldPrintOutputTokenAtStart()INTERNAL: MySQL requires the direction at the start of the argument.booleanshouldPrintStoredProcedureArgumentNameInCall()INTERNAL: MySQL stored procedure calls do not require the argument name be printed in the call string e.g.booleanshouldUseJDBCOuterJoinSyntax()INTERNAL: JDBC defines an outer join syntax which many drivers do not support.booleansupportsAutoConversionToNumericForArithmeticOperations()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 ...booleansupportsCountDistinctWithMultipleFields()INTERNAL: Indicates whether the platform supports the count distinct function with multiple fields.booleansupportsGlobalTempTables()INTERNAL: MySQL supports temp tables for update-all, delete-all queries.booleansupportsIdentity()INTERNAL: Indicates whether the platform supports identity.booleansupportsIndividualTableLocking()INTERNAL: Indicates whether locking clause could be selectively applied only to some tables in a ReadQuery.booleansupportsStoredFunctions()protected ExpressionOperatortoCharOperator()INTERNAL: Build MySQL equivalent to TO_CHAR.protected ExpressionOperatortoDateOperator()INTERNAL: Build MySQL equivalent to TO_DATE.static ExpressionOperatortoday()INTERNAL: MySQL specifictodayoperator.protected ExpressionOperatortoNumberOperator()INTERNAL: Build MySQL equivalent to TO_NUMBER.voidwriteDeleteFromTargetTableUsingTempTableSql(Writer writer, DatabaseTable table, DatabaseTable targetTable, Collection<DatabaseField> pkFields, Collection<DatabaseField> targetPkFields, DatasourcePlatform platform)INTERNAL: Writes MySQL specific SQL for accessing temp tables for delete-all queries.voidwriteParameterMarker(Writer writer, ParameterExpression expression, AbstractRecord record, DatabaseCall call)voidwriteUpdateOriginalFromTempTableSql(Writer writer, DatabaseTable table, Collection<DatabaseField> pkFields, Collection<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 class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.persistence.internal.databaseaccess.Platform
connectionProperties
-
-
-
-
Method Detail
-
initializeConnectionData
public void initializeConnectionData(Connection connection) throws SQLException
Description copied from class:DatabasePlatformINTERNAL: Allow initialization from the connection.- Overrides:
initializeConnectionDatain classDatabasePlatform- 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:
appendDatein classDatabasePlatform- 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:
appendTimein classDatabasePlatform- 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:
appendTimestampin classDatabasePlatform- 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:
appendCalendarin classDatabasePlatform- Throws:
IOException
-
buildFieldTypes
protected Hashtable<Class<?>,FieldTypeDefinition> buildFieldTypes()
Return the mapping of class types to database types for the schema framework.- Overrides:
buildFieldTypesin classDatabasePlatform
-
getJDBCType
public int getJDBCType(Class<?> javaType)
Description copied from class:DatabasePlatformReturn the JDBC type for the Java type.- Overrides:
getJDBCTypein classDatabasePlatform
-
buildSelectQueryForIdentity
public ValueReadQuery buildSelectQueryForIdentity()
INTERNAL: Build the identity query for native sequencing.- Overrides:
buildSelectQueryForIdentityin classDatasourcePlatform
-
buildProcedureCallString
public String buildProcedureCallString(StoredProcedureCall call, AbstractSession session, AbstractRecord row)
Return the stored procedure syntax for this platform.- Overrides:
buildProcedureCallStringin classDatabasePlatform
-
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:
computeMaxRowsForSQLin classDatabasePlatform- See Also:
MySQLPlatform
-
canBatchWriteWithOptimisticLocking
public boolean canBatchWriteWithOptimisticLocking(DatabaseCall call)
INTERNAL: Supports Batch Writing with Optimistic Locking.- Overrides:
canBatchWriteWithOptimisticLockingin classDatabasePlatform
-
getConstraintDeletionString
public String getConstraintDeletionString()
INTERNAL: Used for constraint deletion.- Overrides:
getConstraintDeletionStringin classDatabasePlatform
-
getUniqueConstraintDeletionString
public String getUniqueConstraintDeletionString()
INTERNAL: Used for unique constraint deletion.- Overrides:
getUniqueConstraintDeletionStringin classDatabasePlatform
-
getFunctionCallHeader
public String getFunctionCallHeader()
Used for stored function calls.- Overrides:
getFunctionCallHeaderin classDatabasePlatform
-
getProcedureCallTail
public String getProcedureCallTail()
Used for sp calls.- Overrides:
getProcedureCallTailin classDatabasePlatform
-
getSelectForUpdateString
public String getSelectForUpdateString()
INTERNAL: Used for pessimistic locking.- Overrides:
getSelectForUpdateStringin classDatabasePlatform
-
isForUpdateCompatibleWithDistinct
public boolean isForUpdateCompatibleWithDistinct()
Description copied from class:DatabasePlatformINTERNAL: Indicates whether SELECT DISTINCT ... FOR UPDATE is allowed by the platform (Oracle doesn't allow this).- Overrides:
isForUpdateCompatibleWithDistinctin classDatabasePlatform
-
getTimestampQuery
public ValueReadQuery getTimestampQuery()
INTERNAL: This method returns the query to select the timestamp from the server for MySQL.- Specified by:
getTimestampQueryin interfacePlatform- Overrides:
getTimestampQueryin classDatasourcePlatform
-
isMySQL
public boolean isMySQL()
Answers whether platform is MySQL.- Specified by:
isMySQLin interfacePlatform- Overrides:
isMySQLin classDatasourcePlatform
-
initializePlatformOperators
protected void initializePlatformOperators()
Initialize any platform-specific operators.- Overrides:
initializePlatformOperatorsin classDatasourcePlatform
-
currentTimeStamp
public static ExpressionOperator currentTimeStamp()
INTERNAL: MySQL specificcurrentTimeStampoperator.- Returns:
- new
ExpressionOperatorinstance withcurrentTimeStamp
-
today
public static ExpressionOperator today()
INTERNAL: MySQL specifictodayoperator.- Returns:
- new
ExpressionOperatorinstance withtoday
-
currentTime
public static ExpressionOperator currentTime()
INTERNAL: MySQL specificcurrentTimeoperator.- Returns:
- new
ExpressionOperatorinstance withcurrentTime
-
localTime
public static ExpressionOperator localTime()
INTERNAL: MySQL specificlocalTimeoperator.- Returns:
- new
ExpressionOperatorinstance withlocalTime
-
localDateTime
public static ExpressionOperator localDateTime()
INTERNAL: MySQL specificlocalDateTimeoperator.- Returns:
- new
ExpressionOperatorinstance withlocalDateTime
-
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:
printFieldIdentityClausein classDatabasePlatform- 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:
shouldUseJDBCOuterJoinSyntaxin classDatabasePlatform
-
supportsIdentity
public boolean supportsIdentity()
INTERNAL: Indicates whether the platform supports identity. MySQL supports native sequencing through AUTO_INCREMENT field types.- Overrides:
supportsIdentityin classDatasourcePlatform
-
supportsCountDistinctWithMultipleFields
public boolean supportsCountDistinctWithMultipleFields()
INTERNAL: Indicates whether the platform supports the count distinct function with multiple fields.- Overrides:
supportsCountDistinctWithMultipleFieldsin classDatabasePlatform
-
requiresTableInIndexDropDDL
public boolean requiresTableInIndexDropDDL()
INTERNAL: Return if this database requires the table name when dropping an index.- Overrides:
requiresTableInIndexDropDDLin classDatabasePlatform
-
supportsGlobalTempTables
public boolean supportsGlobalTempTables()
INTERNAL: MySQL supports temp tables for update-all, delete-all queries.- Overrides:
supportsGlobalTempTablesin classDatabasePlatform
-
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:
supportsIndividualTableLockingin classDatabasePlatform
-
supportsStoredFunctions
public boolean supportsStoredFunctions()
- Overrides:
supportsStoredFunctionsin classDatabasePlatform
-
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:
supportsAutoConversionToNumericForArithmeticOperationsin classDatabasePlatform
-
getCreateTempTableSqlPrefix
protected String getCreateTempTableSqlPrefix()
INTERNAL: MySQL temp table syntax, used for update-all, delete-all queries.- Overrides:
getCreateTempTableSqlPrefixin classDatabasePlatform
-
getDropDatabaseSchemaString
public String getDropDatabaseSchemaString(String schema)
Return the drop schema definition. Subclasses should override as needed.- Overrides:
getDropDatabaseSchemaStringin classDatabasePlatform
-
shouldAlwaysUseTempStorageForModifyAll
public boolean shouldAlwaysUseTempStorageForModifyAll()
INTERNAL: MySQL supports temp tables for update-all, delete-all queries.- Overrides:
shouldAlwaysUseTempStorageForModifyAllin classDatabasePlatform
-
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:
shouldPrintStoredProcedureArgumentNameInCallin classDatabasePlatform
-
shouldPrintForUpdateClause
public boolean shouldPrintForUpdateClause()
INTERNAL: MySQL FOR UPDATE clause has to be the last- Overrides:
shouldPrintForUpdateClausein classDatabasePlatform
-
getInOutputProcedureToken
public String getInOutputProcedureToken()
INTERNAL: MySQL uses the INOUT keyword for this.- Overrides:
getInOutputProcedureTokenin classDatabasePlatform
-
getProcedureAsString
public String getProcedureAsString()
MySQL does not use the AS token.- Overrides:
getProcedureAsStringin classDatabasePlatform
-
shouldPrintOutputTokenAtStart
public boolean shouldPrintOutputTokenAtStart()
INTERNAL: MySQL requires the direction at the start of the argument.- Overrides:
shouldPrintOutputTokenAtStartin classDatabasePlatform
-
getProcedureCallHeader
public String getProcedureCallHeader()
INTERNAL: Used for stored procedure calls.- Overrides:
getProcedureCallHeaderin classDatabasePlatform
-
getProcedureBeginString
public String getProcedureBeginString()
INTERNAL: MySQL requires BEGIN.- Overrides:
getProcedureBeginStringin classDatabasePlatform
-
getProcedureEndString
public String getProcedureEndString()
INTERNAL: MySQL requires END.- Overrides:
getProcedureEndStringin classDatabasePlatform
-
writeUpdateOriginalFromTempTableSql
public void writeUpdateOriginalFromTempTableSql(Writer writer, DatabaseTable table, Collection<DatabaseField> pkFields, Collection<DatabaseField> assignedFields) throws IOException
INTERNAL: Writes MySQL specific SQL for accessing temp tables for update-all queries.- Overrides:
writeUpdateOriginalFromTempTableSqlin classDatabasePlatform- Parameters:
writer- for writing the sqltable- 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, DatabaseTable table, DatabaseTable targetTable, Collection<DatabaseField> pkFields, Collection<DatabaseField> targetPkFields, DatasourcePlatform platform) throws IOException
INTERNAL: Writes MySQL specific SQL for accessing temp tables for delete-all queries.- Overrides:
writeDeleteFromTargetTableUsingTempTableSqlin classDatabasePlatform- Parameters:
writer- for writing the sqltable- 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, ParameterExpression expression, AbstractRecord record, DatabaseCall call) throws IOException
- Overrides:
writeParameterMarkerin classDatabasePlatform- Throws:
IOException
-
printSQLSelectStatement
public void printSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter printer, SQLSelectStatement statement)
Description copied from class:DatabasePlatformINTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall.- Overrides:
printSQLSelectStatementin classDatabasePlatform
-
requiresProcedureBrackets
public boolean requiresProcedureBrackets()
Used for stored procedure creation: MySQL platforms need brackets around arguments declaration even if no arguments exist.- Overrides:
requiresProcedureBracketsin classDatabasePlatform
-
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:
printStoredFunctionReturnKeyWordin classDatabasePlatform- 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:
getTableExistsQueryin classDatabasePlatform- Parameters:
table- database table meta-data- Returns:
- query to check whether given table exists
-
checkTableExists
public boolean checkTableExists(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:
checkTableExistsin classDatabasePlatform- Parameters:
session- current database sessiontable- database table meta-datasuppressLogging- whether to suppress logging during query execution- Returns:
- value of
trueif given table exists orfalseotherwise
-
getUUIDQuery
public ValueReadQuery getUUIDQuery()
INTERNAL: This method returns the query to select the UUID from the server for MySQL.- Specified by:
getUUIDQueryin interfacePlatform- Overrides:
getUUIDQueryin classDatasourcePlatform
-
-