Package org.apache.cayenne.dba.mysql

# Class MySQLAdapter

java.lang.Object
org.apache.cayenne.dba.JdbcAdapter
org.apache.cayenne.dba.mysql.MySQLAdapter

All Implemented Interfaces:
  `DbAdapter`

public class MySQLAdapter extends JdbcAdapter
DbAdapter implementation for MySQL RDBMS.

### Foreign Key Constraint Handling

Foreign key constraints are supported by InnoDB engine and NOT supported by MyISAM engine. This adapter by default assumes MyISAM, so `supportsFkConstraints` will be false. Users can manually change this by calling setSupportsFkConstraints(true) or better by using an `AutoAdapter`, i.e. not entering the adapter name at all for the DataNode, letting Cayenne guess it in runtime. In the later case Cayenne will check the table_type MySQL variable to detect whether InnoDB is the default, and configure the adapter accordingly.

### Sample Connection Settings

- Adapter name: org.apache.cayenne.dba.mysql.MySQLAdapter
- DB URL: jdbc:mysql://serverhostname/dbname
- Driver Class: com.mysql.jdbc.Driver

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected String`
  `storageEngine`

  ### Fields inherited from class org.apache.cayenne.dba.JdbcAdapter

  `batchQueryBuilderFactory, caseInsensitiveCollations, ejbqlTranslatorFactory, extendedTypes, logger, quotingStrategy, resourceLocator, supportsBatchUpdates, supportsGeneratedKeys, supportsUniqueConstraints, typesHandler`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MySQLAdapter(RuntimeProperties runtimeProperties, List<ExtendedType> defaultExtendedTypes, List<ExtendedType> userExtendedTypes, List<ExtendedTypeFactory> extendedTypeFactories, ResourceLocator resourceLocator, ValueObjectTypeRegistry valueObjectTypeRegistry)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `bindParameter(PreparedStatement statement, ParameterBinding binding)`
  Binds an object value to PreparedStatement's parameter.
  `DbAttribute`
  `buildAttribute(String name, String typeName, int type, int size, int precision, boolean allowNulls)`
  Creates and returns a DbAttribute based on supplied parameters (usually obtained from database meta data).
  `protected void`
  `configureExtendedTypes(ExtendedTypeMap map)`
  Installs appropriate ExtendedTypes used as converters for passing values between JDBC and Java layers.
  `protected EJBQLTranslatorFactory`
  `createEJBQLTranslatorFactory()`
  Creates and returns an `EJBQLTranslatorFactory` used to generate visitors for EJBQL to SQL translations.
  `protected PkGenerator`
  `createPkGenerator()`
  Creates and returns a primary key generator.
  `protected QuotingStrategy`
  `createQuotingStrategy()`
  `String`
  `createTable(DbEntity entity)`
  Overrides super implementation to explicitly set table engine to InnoDB if FK constraints are supported by this adapter.
  `void`
  `createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column)`
  Appends AUTO_INCREMENT clause to the column definition for generated columns.
  `protected void`
  `createTableAppendPKClause(StringBuffer sqlBuffer, DbEntity entity)`
  Customizes PK clause semantics to ensure that generated columns are in the beginning of the PK definition, as this seems to be a requirement for InnoDB tables.
  `Collection<String>`
  `dropTableStatements(DbEntity table)`
  Returns a collection of SQL statements needed to drop a database table.
  `SQLAction`
  `getAction(Query query, DataNode node)`
  Uses special action builder to create the right action.
  `SQLTreeProcessor`
  `getSqlTreeProcessor()`
  `String`
  `getStorageEngine()`
  `List<String>`
  `getSystemCatalogs()`
  `void`
  `setStorageEngine(String engine)`
  `boolean`
  `typeSupportsLength(int type)`
  Returns true if supplied type can have a length attribute as a part of column definition

  ### Methods inherited from class org.apache.cayenne.dba.JdbcAdapter

  `createFkConstraint, createUniqueConstraint, externalTypesForJdbcType, findResource, getBatchTerminator, getEjbqlTranslatorFactory, getExtendedTypes, getJdbcEventLogger, getPkGenerator, getQuotingStrategy, getSelectTranslator, getSelectTranslator, getSystemSchemas, getType, initExtendedTypes, setEjbqlTranslatorFactory, setPkGenerator, setSupportsBatchUpdates, setSupportsGeneratedKeys, setSupportsUniqueConstraints, sizeAndPrecision, supportsBatchUpdates, supportsCatalogsOnReverseEngineering, supportsGeneratedKeys, supportsUniqueConstraints, tableTypeForTable, tableTypeForView, unwrap`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.apache.cayenne.dba.DbAdapter

  `supportsGeneratedKeysForBatchInserts`

- ## Field Details

  - ### storageEngine

    protected String storageEngine

- ## Constructor Details

  - ### MySQLAdapter

    public MySQLAdapter(RuntimeProperties runtimeProperties, List<ExtendedType> defaultExtendedTypes, List<ExtendedType> userExtendedTypes, List<ExtendedTypeFactory> extendedTypeFactories, ResourceLocator resourceLocator, ValueObjectTypeRegistry valueObjectTypeRegistry)

- ## Method Details

  - ### createQuotingStrategy

    protected QuotingStrategy createQuotingStrategy()
    Overrides:
      `createQuotingStrategy` in class `JdbcAdapter`

  - ### getSqlTreeProcessor

    public SQLTreeProcessor getSqlTreeProcessor()
    Specified by:
      `getSqlTreeProcessor` in interface `DbAdapter`
    Overrides:
      `getSqlTreeProcessor` in class `JdbcAdapter`
    Returns:
      `SQLTreeProcessor` that can adjust SQL tree to specific database flavour
    Since:
      4.2

  - ### getAction

    public SQLAction getAction(Query query, DataNode node)
    Uses special action builder to create the right action.
    Specified by:
      `getAction` in interface `DbAdapter`
    Overrides:
      `getAction` in class `JdbcAdapter`
    Since:
      1.2

  - ### dropTableStatements

    public Collection<String> dropTableStatements(DbEntity table)
    Description copied from interface: `DbAdapter`
    Returns a collection of SQL statements needed to drop a database table.
    Specified by:
      `dropTableStatements` in interface `DbAdapter`
    Overrides:
      `dropTableStatements` in class `JdbcAdapter`
    Since:
      3.0

  - ### configureExtendedTypes

    protected void configureExtendedTypes(ExtendedTypeMap map)
    Installs appropriate ExtendedTypes used as converters for passing values between JDBC and Java layers.
    Overrides:
      `configureExtendedTypes` in class `JdbcAdapter`

  - ### buildAttribute

    public DbAttribute buildAttribute(String name, String typeName, int type, int size, int precision, boolean allowNulls)
    Description copied from interface: `DbAdapter`
    Creates and returns a DbAttribute based on supplied parameters (usually obtained from database meta data).
    Specified by:
      `buildAttribute` in interface `DbAdapter`
    Overrides:
      `buildAttribute` in class `JdbcAdapter`
    Parameters:
      `name` - database column name
      `typeName` - database specific type name, may be used as a hint to determine the right JDBC type.
      `type` - JDBC column type
      `size` - database column size (ignored if less than zero)
      `precision` - database column scale, i.e. the number of decimal digits (ignored if less than zero)
      `allowNulls` - database column nullable parameter

  - ### bindParameter

    public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception
    Description copied from interface: `DbAdapter`
    Binds an object value to PreparedStatement's parameter.
    Specified by:
      `bindParameter` in interface `DbAdapter`
    Overrides:
      `bindParameter` in class `JdbcAdapter`
    Throws:
      `SQLException`
      `Exception`

  - ### createPkGenerator

    protected PkGenerator createPkGenerator()
    Creates and returns a primary key generator. Overrides superclass implementation to return an instance of MySQLPkGenerator that does the correct table locking.
    Overrides:
      `createPkGenerator` in class `JdbcAdapter`

  - ### createEJBQLTranslatorFactory

    protected EJBQLTranslatorFactory createEJBQLTranslatorFactory()
    Description copied from class: `JdbcAdapter`
    Creates and returns an `EJBQLTranslatorFactory` used to generate visitors for EJBQL to SQL translations. This method should be overriden by subclasses that need to customize EJBQL generation.
    Overrides:
      `createEJBQLTranslatorFactory` in class `JdbcAdapter`
    Since:
      3.0

  - ### createTable

    public String createTable(DbEntity entity)
    Overrides super implementation to explicitly set table engine to InnoDB if FK constraints are supported by this adapter.
    Specified by:
      `createTable` in interface `DbAdapter`
    Overrides:
      `createTable` in class `JdbcAdapter`

  - ### createTableAppendPKClause

    protected void createTableAppendPKClause(StringBuffer sqlBuffer, DbEntity entity)
    Customizes PK clause semantics to ensure that generated columns are in the beginning of the PK definition, as this seems to be a requirement for InnoDB tables.
    Overrides:
      `createTableAppendPKClause` in class `JdbcAdapter`
    Since:
      1.2

  - ### createTableAppendColumn

    public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column)
    Appends AUTO_INCREMENT clause to the column definition for generated columns.
    Specified by:
      `createTableAppendColumn` in interface `DbAdapter`
    Overrides:
      `createTableAppendColumn` in class `JdbcAdapter`
    Parameters:
      `sqlBuffer` - the `StringBuffer` to append the column type to
      `column` - the `DbAttribute` defining the column to append type for

  - ### typeSupportsLength

    public boolean typeSupportsLength(int type)
    Description copied from class: `JdbcAdapter`
    Returns true if supplied type can have a length attribute as a part of column definition
    Specified by:
      `typeSupportsLength` in interface `DbAdapter`
    Overrides:
      `typeSupportsLength` in class `JdbcAdapter`

  - ### getSystemCatalogs

    public List<String> getSystemCatalogs()
    Specified by:
      `getSystemCatalogs` in interface `DbAdapter`
    Overrides:
      `getSystemCatalogs` in class `JdbcAdapter`
    Returns:
      list of system catalogs

  - ### getStorageEngine

    public String getStorageEngine()
    Since:
      3.0

  - ### setStorageEngine

    public void setStorageEngine(String engine)
    Since:
      3.0