Package org.apache.cayenne.dba

# Interface DbAdapter

All Known Implementing Classes:
  `AutoAdapter`, `DB2Adapter`, `DerbyAdapter`, `FirebirdAdapter`, `FrontBaseAdapter`, `H2Adapter`, `HSQLDBAdapter`, `HSQLDBNoSchemaAdapter`, `IngresAdapter`, `JdbcAdapter`, `MySQLAdapter`, `Oracle8Adapter`, `OracleAdapter`, `PostgresAdapter`, `SQLiteAdapter`, `SQLServerAdapter`, `SybaseAdapter`

public interface DbAdapter
A Cayenne extension point that abstracts the differences between specifics of JDBC interfaces to various databases. Cayenne already ships with a number of built-in adapters for most common databases and users can provide their own custom adapters.

- ## 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 scale, 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.
  `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 primary key generator associated with this DbAdapter.
  `QuotingStrategy`
  `getQuotingStrategy()`
  Returns SQL identifier quoting strategy object
  `SelectTranslator`
  `getSelectTranslator(FluentSelect<?,?> query, EntityResolver entityResolver)`
  `SQLTreeProcessor`
  `getSqlTreeProcessor()`
  `List<String>`
  `getSystemCatalogs()`
  `List<String>`
  `getSystemSchemas()`
  `void`
  `setPkGenerator(PkGenerator pkGenerator)`
  Set custom PK generator associated with this DbAdapter.
  `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.
  `default 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)`
  `boolean`
  `typeSupportsScale(int type)`
  Returns true if supplied type can have a scale attribute as a part of column definition.
  `DbAdapter`
  `unwrap()`
  Allows the users to get access to the adapter decorated by a given adapter.

- ## Method Details

  - ### getBatchTerminator

    String getBatchTerminator()
    Returns a String used to terminate a batch in command-line tools. E.g. ";" on Oracle or "go" on Sybase.
    Since:
      1.0.4

  - ### getSelectTranslator

    SelectTranslator getSelectTranslator(FluentSelect<?,?> query, EntityResolver entityResolver)
    Since:
      4.2

  - ### getSqlTreeProcessor

    SQLTreeProcessor getSqlTreeProcessor()
    Returns:
      `SQLTreeProcessor` that can adjust SQL tree to specific database flavour
    Since:
      4.2

  - ### getAction

    SQLAction getAction(Query query, DataNode node)
    Returns an instance of SQLAction that should handle the query.
    Since:
      1.2

  - ### supportsUniqueConstraints

    boolean supportsUniqueConstraints()
    Returns true if a target database supports UNIQUE constraints.
    Since:
      1.1

  - ### supportsCatalogsOnReverseEngineering

    boolean supportsCatalogsOnReverseEngineering()
    Returns true if a target database supports catalogs on reverse engineering.
    Since:
      4.0

  - ### supportsGeneratedKeys

    boolean supportsGeneratedKeys()
    Returns true if a target database supports key autogeneration. This feature also requires JDBC3-compliant driver.
    Since:
      1.2

  - ### supportsGeneratedKeysForBatchInserts

    default boolean supportsGeneratedKeysForBatchInserts()
    Returns true if a target database supports key autogeneration in a batch insert.
    Since:
      4.2
    See Also:
      - `supportsGeneratedKeys()`

  - ### supportsBatchUpdates

    boolean supportsBatchUpdates()
    Returns `true` if the target database supports batch updates.

  - ### typeSupportsLength

    boolean typeSupportsLength(int type)

  - ### typeSupportsScale

    boolean typeSupportsScale(int type)
    Returns true if supplied type can have a scale attribute as a part of column definition.
    Parameters:
      `type` - sql type code
    Returns:
      `true` if a given type supports scale
    Since:
      5.0

  - ### dropTableStatements

    Collection<String> dropTableStatements(DbEntity table)
    Returns a collection of SQL statements needed to drop a database table.
    Since:
      3.0

  - ### createTable

    String createTable(DbEntity entity)
    Returns a SQL string that can be used to create database table corresponding to `entity` parameter.

  - ### createUniqueConstraint

    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.
    Since:
      1.1

  - ### createFkConstraint

    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.

  - ### externalTypesForJdbcType

    String[] externalTypesForJdbcType(int type)
    Returns an array of RDBMS types that can be used with JDBC `type`. Valid JDBC types are defined in java.sql.Types.

  - ### getExtendedTypes

    ExtendedTypeMap getExtendedTypes()
    Returns a map of ExtendedTypes that is used to translate values between Java and JDBC layer.

  - ### getPkGenerator

    PkGenerator getPkGenerator()
    Returns primary key generator associated with this DbAdapter.

  - ### setPkGenerator

    void setPkGenerator(PkGenerator pkGenerator)
    Set custom PK generator associated with this DbAdapter.
    Parameters:
      `pkGenerator` - to set
    Since:
      4.1

  - ### buildAttribute

    DbAttribute buildAttribute(String name, String typeName, int type, int size, int scale, boolean allowNulls)
    Creates and returns a DbAttribute based on supplied parameters (usually obtained from database meta data).
    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)
      `scale` - database column scale, i.e. the number of decimal digits (ignored if less than zero)
      `allowNulls` - database column nullable parameter

  - ### bindParameter

    void bindParameter(PreparedStatement statement, ParameterBinding parameterBinding) throws SQLException, Exception
    Binds an object value to PreparedStatement's parameter.
    Throws:
      `SQLException`
      `Exception`

  - ### tableTypeForTable

    String tableTypeForTable()
    Returns the name of the table type (as returned by `DatabaseMetaData.getTableTypes`) for a simple user table.

  - ### tableTypeForView

    String tableTypeForView()
    Returns the name of the table type (as returned by `DatabaseMetaData.getTableTypes`) for a view table.

  - ### createTableAppendColumn

    void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column)
    Append the column type part of a "create table" to the given `StringBuffer`
    Parameters:
      `sqlBuffer` - the `StringBuffer` to append the column type to
      `column` - the `DbAttribute` defining the column to append type for
    Since:
      3.0

  - ### getQuotingStrategy

    QuotingStrategy getQuotingStrategy()
    Returns SQL identifier quoting strategy object
    Since:
      4.0

  - ### unwrap

    DbAdapter unwrap()
    Allows the users to get access to the adapter decorated by a given adapter.
    Since:
      4.0

  - ### getEjbqlTranslatorFactory

    EJBQLTranslatorFactory getEjbqlTranslatorFactory()
    Returns a translator factory for EJBQL to SQL translation.
    Since:
      4.0

  - ### getSystemCatalogs

    List<String> getSystemCatalogs()
    Returns:
      list of system catalogs
    Since:
      4.1

  - ### getSystemSchemas

    List<String> getSystemSchemas()
    Returns:
      list of system schemas
    Since:
      4.1