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

    All Methods Instance Methods Concrete Methods
    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 Detail

    - #### storageEngine

          protected String storageEngine

  - ### Constructor Detail

    - #### MySQLAdapter

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

  - ### Method Detail

    - #### 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