Package org.apache.cayenne.dba

# Class AutoAdapter

java.lang.Object
org.apache.cayenne.dba.AutoAdapter

All Implemented Interfaces:
  `DbAdapter`

public class AutoAdapter extends Object implements DbAdapter
A DbAdapter that automatically detects the kind of database it is running on and instantiates an appropriate DB-specific adapter, delegating all subsequent method calls to this adapter.

Since:
  1.2

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Provider<DbAdapter>`
  `adapterProvider`
  `protected JdbcEventLogger`
  `logger`
  `protected PkGenerator`
  `pkGenerator`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AutoAdapter(Provider<DbAdapter> adapterProvider, JdbcEventLogger logger)`
  Creates an `AutoAdapter` based on a delegate adapter obtained via "adapterProvider".

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `bindParameter(PreparedStatement statement, ParameterBinding parameterBinding)`
  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).
  `String`
  `createFkConstraint(DbRelationship rel)`
  Returns a SQL string that can be used to create a foreign key constraint for the relationship, or null if foreign keys are not supported.
  `String`
  `createTable(DbEntity entity)`
  Returns a SQL string that can be used to create database table corresponding to `entity` parameter.
  `void`
  `createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column)`
  Append the column type part of a "create table" to the given `StringBuffer`
  `String`
  `createUniqueConstraint(DbEntity source, Collection<DbAttribute> columns)`
  Returns a DDL string to create a unique constraint over a set of columns, or null if the unique constraints are not supported.
  `Collection<String>`
  `dropTableStatements(DbEntity table)`
  Returns a collection of SQL statements needed to drop a database table.
  `String[]`
  `externalTypesForJdbcType(int type)`
  Returns an array of RDBMS types that can be used with JDBC `type`.
  `SQLAction`
  `getAction(Query query, DataNode node)`
  Returns an instance of SQLAction that should handle the query.
  `protected DbAdapter`
  `getAdapter()`
  Returns a proxied DbAdapter, lazily creating it on first invocation.
  `String`
  `getBatchTerminator()`
  Returns a String used to terminate a batch in command-line tools.
  `EJBQLTranslatorFactory`
  `getEjbqlTranslatorFactory()`
  Returns a translator factory for EJBQL to SQL translation.
  `ExtendedTypeMap`
  `getExtendedTypes()`
  Returns a map of ExtendedTypes that is used to translate values between Java and JDBC layer.
  `PkGenerator`
  `getPkGenerator()`
  Returns a primary key generator.
  `QuotingStrategy`
  `getQuotingStrategy()`
  Returns SQL identifier quoting strategy object
  `SelectTranslator`
  `getSelectTranslator(FluentSelect<?> query, EntityResolver entityResolver)`
  `SelectTranslator`
  `getSelectTranslator(SelectQuery<?> query, EntityResolver entityResolver)`
  Deprecated.
  `SQLTreeProcessor`
  `getSqlTreeProcessor()`
  `List<String>`
  `getSystemCatalogs()`
  `List<String>`
  `getSystemSchemas()`
  `protected DbAdapter`
  `loadAdapter()`
  Loads underlying DbAdapter delegate.
  `void`
  `setPkGenerator(PkGenerator pkGenerator)`
  Sets a PK generator override.
  `boolean`
  `supportsBatchUpdates()`
  Returns `true` if the target database supports batch updates.
  `boolean`
  `supportsCatalogsOnReverseEngineering()`
  Returns true if a target database supports catalogs on reverse engineering.
  `boolean`
  `supportsGeneratedKeys()`
  Returns true if a target database supports key autogeneration.
  `boolean`
  `supportsGeneratedKeysForBatchInserts()`
  Returns true if a target database supports key autogeneration in a batch insert.
  `boolean`
  `supportsUniqueConstraints()`
  Returns true if a target database supports UNIQUE constraints.
  `String`
  `tableTypeForTable()`
  Returns the name of the table type (as returned by `DatabaseMetaData.getTableTypes`) for a simple user table.
  `String`
  `tableTypeForView()`
  Returns the name of the table type (as returned by `DatabaseMetaData.getTableTypes`) for a view table.
  `boolean`
  `typeSupportsLength(int type)`
  `DbAdapter`
  `unwrap()`
  Allows the users to get access to the adapter decorated by a given adapter.

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

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

- ## Field Details

  - ### adapterProvider

    protected Provider<DbAdapter> adapterProvider

  - ### pkGenerator

    protected PkGenerator pkGenerator

  - ### logger

    protected JdbcEventLogger logger

- ## Constructor Details

  - ### AutoAdapter

    public AutoAdapter(Provider<DbAdapter> adapterProvider, JdbcEventLogger logger)
    Creates an `AutoAdapter` based on a delegate adapter obtained via "adapterProvider".
    Since:
      3.1

- ## Method Details

  - ### getAdapter

    protected DbAdapter getAdapter()
    Returns a proxied DbAdapter, lazily creating it on first invocation.

  - ### loadAdapter

    protected DbAdapter loadAdapter()
    Loads underlying DbAdapter delegate.

  - ### getSelectTranslator

    @Deprecated public SelectTranslator getSelectTranslator(SelectQuery<?> query, EntityResolver entityResolver)
    Deprecated.
    Description copied from interface: `DbAdapter`
    Returns a SelectTranslator that works with the adapter target database.
    Specified by:
      `getSelectTranslator` in interface `DbAdapter`
    Since:
      4.0

  - ### getSelectTranslator

    public SelectTranslator getSelectTranslator(FluentSelect<?> query, EntityResolver entityResolver)
    Specified by:
      `getSelectTranslator` in interface `DbAdapter`
    Since:
      4.2

  - ### getBatchTerminator

    public String getBatchTerminator()
    Description copied from interface: `DbAdapter`
    Returns a String used to terminate a batch in command-line tools. E.g. ";" on Oracle or "go" on Sybase.
    Specified by:
      `getBatchTerminator` in interface `DbAdapter`

  - ### getSqlTreeProcessor

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

  - ### getAction

    public SQLAction getAction(Query query, DataNode node)
    Description copied from interface: `DbAdapter`
    Returns an instance of SQLAction that should handle the query.
    Specified by:
      `getAction` in interface `DbAdapter`

  - ### supportsUniqueConstraints

    public boolean supportsUniqueConstraints()
    Description copied from interface: `DbAdapter`
    Returns true if a target database supports UNIQUE constraints.
    Specified by:
      `supportsUniqueConstraints` in interface `DbAdapter`

  - ### supportsCatalogsOnReverseEngineering

    public boolean supportsCatalogsOnReverseEngineering()
    Description copied from interface: `DbAdapter`
    Returns true if a target database supports catalogs on reverse engineering.
    Specified by:
      `supportsCatalogsOnReverseEngineering` in interface `DbAdapter`

  - ### supportsGeneratedKeys

    public boolean supportsGeneratedKeys()
    Description copied from interface: `DbAdapter`
    Returns true if a target database supports key autogeneration. This feature also requires JDBC3-compliant driver.
    Specified by:
      `supportsGeneratedKeys` in interface `DbAdapter`

  - ### supportsGeneratedKeysForBatchInserts

    public boolean supportsGeneratedKeysForBatchInserts()
    Description copied from interface: `DbAdapter`
    Returns true if a target database supports key autogeneration in a batch insert.
    Specified by:
      `supportsGeneratedKeysForBatchInserts` in interface `DbAdapter`
    Since:
      4.2
    See Also:
      - `DbAdapter.supportsGeneratedKeys()`

  - ### supportsBatchUpdates

    public boolean supportsBatchUpdates()
    Description copied from interface: `DbAdapter`
    Returns `true` if the target database supports batch updates.
    Specified by:
      `supportsBatchUpdates` in interface `DbAdapter`

  - ### typeSupportsLength

    public boolean typeSupportsLength(int type)
    Specified by:
      `typeSupportsLength` in interface `DbAdapter`

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

  - ### createTable

    public String createTable(DbEntity entity)
    Description copied from interface: `DbAdapter`
    Returns a SQL string that can be used to create database table corresponding to `entity` parameter.
    Specified by:
      `createTable` in interface `DbAdapter`

  - ### createUniqueConstraint

    public String createUniqueConstraint(DbEntity source, Collection<DbAttribute> columns)
    Description copied from interface: `DbAdapter`
    Returns a DDL string to create a unique constraint over a set of columns, or null if the unique constraints are not supported.
    Specified by:
      `createUniqueConstraint` in interface `DbAdapter`

  - ### createFkConstraint

    public String createFkConstraint(DbRelationship rel)
    Description copied from interface: `DbAdapter`
    Returns a SQL string that can be used to create a foreign key constraint for the relationship, or null if foreign keys are not supported.
    Specified by:
      `createFkConstraint` in interface `DbAdapter`

  - ### externalTypesForJdbcType

    public String[] externalTypesForJdbcType(int type)
    Description copied from interface: `DbAdapter`
    Returns an array of RDBMS types that can be used with JDBC `type`. Valid JDBC types are defined in java.sql.Types.
    Specified by:
      `externalTypesForJdbcType` in interface `DbAdapter`

  - ### getExtendedTypes

    public ExtendedTypeMap getExtendedTypes()
    Description copied from interface: `DbAdapter`
    Returns a map of ExtendedTypes that is used to translate values between Java and JDBC layer.
    Specified by:
      `getExtendedTypes` in interface `DbAdapter`

  - ### getPkGenerator

    public PkGenerator getPkGenerator()
    Returns a primary key generator.
    Specified by:
      `getPkGenerator` in interface `DbAdapter`

  - ### setPkGenerator

    public void setPkGenerator(PkGenerator pkGenerator)
    Sets a PK generator override. If set to non-null value, such PK generator will be used instead of the one provided by wrapped adapter.
    Specified by:
      `setPkGenerator` in interface `DbAdapter`
    Parameters:
      `pkGenerator` - to set

  - ### 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`
    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 parameterBinding) throws SQLException, Exception
    Description copied from interface: `DbAdapter`
    Binds an object value to PreparedStatement's parameter.
    Specified by:
      `bindParameter` in interface `DbAdapter`
    Throws:
      `SQLException`
      `Exception`

  - ### tableTypeForTable

    public String tableTypeForTable()
    Description copied from interface: `DbAdapter`
    Returns the name of the table type (as returned by `DatabaseMetaData.getTableTypes`) for a simple user table.
    Specified by:
      `tableTypeForTable` in interface `DbAdapter`

  - ### tableTypeForView

    public String tableTypeForView()
    Description copied from interface: `DbAdapter`
    Returns the name of the table type (as returned by `DatabaseMetaData.getTableTypes`) for a view table.
    Specified by:
      `tableTypeForView` in interface `DbAdapter`

  - ### createTableAppendColumn

    public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column)
    Description copied from interface: `DbAdapter`
    Append the column type part of a "create table" to the given `StringBuffer`
    Specified by:
      `createTableAppendColumn` in interface `DbAdapter`
    Parameters:
      `sqlBuffer` - the `StringBuffer` to append the column type to
      `column` - the `DbAttribute` defining the column to append type for

  - ### getQuotingStrategy

    public QuotingStrategy getQuotingStrategy()
    Description copied from interface: `DbAdapter`
    Returns SQL identifier quoting strategy object
    Specified by:
      `getQuotingStrategy` in interface `DbAdapter`
    Since:
      4.0

  - ### unwrap

    public DbAdapter unwrap()
    Description copied from interface: `DbAdapter`
    Allows the users to get access to the adapter decorated by a given adapter.
    Specified by:
      `unwrap` in interface `DbAdapter`
    Since:
      4.0

  - ### getEjbqlTranslatorFactory

    public EJBQLTranslatorFactory getEjbqlTranslatorFactory()
    Description copied from interface: `DbAdapter`
    Returns a translator factory for EJBQL to SQL translation.
    Specified by:
      `getEjbqlTranslatorFactory` in interface `DbAdapter`
    Since:
      4.0

  - ### getSystemCatalogs

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

  - ### getSystemSchemas

    public List<String> getSystemSchemas()
    Specified by:
      `getSystemSchemas` in interface `DbAdapter`
    Returns:
      list of system schemas