Class JdbcAdapter

java.lang.Object
org.apache.cayenne.dba.JdbcAdapter
All Implemented Interfaces:
DbAdapter
Direct Known Subclasses:
DB2Adapter, DerbyAdapter, FirebirdAdapter, FrontBaseAdapter, H2Adapter, HSQLDBAdapter, IngresAdapter, MySQLAdapter, OpenBaseAdapter, OracleAdapter, PostgresAdapter, SQLiteAdapter, SybaseAdapter

public class JdbcAdapter extends Object implements DbAdapter
A generic DbAdapter implementation. Can be used as a default adapter or as a superclass of a concrete adapter implementation.
  • Field Details

    • quotingStrategy

      protected QuotingStrategy quotingStrategy
    • typesHandler

      protected TypesHandler typesHandler
    • extendedTypes

      protected ExtendedTypeMap extendedTypes
    • supportsBatchUpdates

      protected boolean supportsBatchUpdates
    • supportsUniqueConstraints

      protected boolean supportsUniqueConstraints
    • supportsGeneratedKeys

      protected boolean supportsGeneratedKeys
    • ejbqlTranslatorFactory

      protected EJBQLTranslatorFactory ejbqlTranslatorFactory
    • resourceLocator

      protected ResourceLocator resourceLocator
    • caseInsensitiveCollations

      protected boolean caseInsensitiveCollations
    • batchQueryBuilderFactory

      protected BatchTranslatorFactory batchQueryBuilderFactory
      Deprecated.
      since 4.0 BatchQueryBuilderfactory is attached to the DataNode.
      Since:
      3.1
    • logger

      protected JdbcEventLogger logger
  • Constructor Details

  • Method Details

    • getBatchTerminator

      public String getBatchTerminator()
      Returns default separator - a semicolon.
      Specified by:
      getBatchTerminator in interface DbAdapter
      Since:
      1.0.4
    • getJdbcEventLogger

      public JdbcEventLogger getJdbcEventLogger()
      Since:
      3.1
    • findResource

      protected URL findResource(String name)
      Locates and returns a named adapter resource. A resource can be an XML file, etc.

      This implementation is based on the premise that each adapter is located in its own Java package and all resources are in the same package as well. Resource lookup is recursive, so that if DbAdapter is a subclass of another adapter, parent adapter package is searched as a failover.

      Since:
      3.0
    • configureExtendedTypes

      protected void configureExtendedTypes(ExtendedTypeMap map)
      Called from initExtendedTypes(List, List, List, ValueObjectTypeRegistry) to load adapter-specific types into the ExtendedTypeMap right after the default types are loaded, but before the DI overrides are. This method has specific implementations in JdbcAdapter subclasses.
    • initExtendedTypes

      protected void initExtendedTypes(List<ExtendedType> defaultExtendedTypes, List<ExtendedType> userExtendedTypes, List<ExtendedTypeFactory> extendedTypeFactories, ValueObjectTypeRegistry valueObjectTypeRegistry)
      Since:
      3.1
    • createPkGenerator

      @Deprecated protected PkGenerator createPkGenerator()
      Deprecated.
      Creates and returns a primary key generator. This factory method should be overriden by JdbcAdapter subclasses to provide custom implementations of PKGenerator.
    • createEJBQLTranslatorFactory

      protected EJBQLTranslatorFactory createEJBQLTranslatorFactory()
      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.
      Since:
      3.0
    • getPkGenerator

      public PkGenerator getPkGenerator()
      Returns primary key generator associated with this DbAdapter.
      Specified by:
      getPkGenerator in interface DbAdapter
    • setPkGenerator

      public void setPkGenerator(PkGenerator pkGenerator)
      Sets new primary key generator.
      Specified by:
      setPkGenerator in interface DbAdapter
      Parameters:
      pkGenerator - to set
      Since:
      1.1
    • supportsUniqueConstraints

      public boolean supportsUniqueConstraints()
      Returns true.
      Specified by:
      supportsUniqueConstraints in interface DbAdapter
      Since:
      1.1
    • supportsCatalogsOnReverseEngineering

      public boolean supportsCatalogsOnReverseEngineering()
      Returns true.
      Specified by:
      supportsCatalogsOnReverseEngineering in interface DbAdapter
      Since:
      4.0
    • setSupportsUniqueConstraints

      public void setSupportsUniqueConstraints(boolean flag)
      Since:
      1.1
    • typeSupportsLength

      public boolean typeSupportsLength(int type)
      Returns true if supplied type can have a length attribute as a part of column definition
      Specified by:
      typeSupportsLength in interface DbAdapter
      Since:
      4.0
    • 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
      Since:
      3.0
    • createTable

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

      protected void createTableAppendPKClause(StringBuffer sqlBuffer, DbEntity entity)
      Since:
      1.2
    • createTableAppendColumn

      public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column)
      Appends SQL for column creation to CREATE TABLE buffer.
      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
      Since:
      1.2
    • sizeAndPrecision

      public static String sizeAndPrecision(DbAdapter adapter, DbAttribute column)
    • getType

      public static String getType(DbAdapter adapter, DbAttribute column)
    • createUniqueConstraint

      public String createUniqueConstraint(DbEntity source, Collection<DbAttribute> columns)
      Returns a DDL string to create a unique constraint over a set of columns.
      Specified by:
      createUniqueConstraint in interface DbAdapter
      Since:
      1.1
    • createFkConstraint

      public String createFkConstraint(DbRelationship rel)
      Returns a SQL string that can be used to create a foreign key constraint for the relationship.
      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
    • buildAttribute

      public DbAttribute buildAttribute(String name, String typeName, int type, int size, int scale, 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)
      scale - database column scale, i.e. the number of decimal digits (ignored if less than zero)
      allowNulls - database column nullable parameter
    • 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
    • getAction

      public SQLAction getAction(Query query, DataNode node)
      Uses JdbcActionBuilder to create the right action.
      Specified by:
      getAction in interface DbAdapter
      Since:
      1.2
    • 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
    • getSelectTranslator

      public SelectTranslator getSelectTranslator(FluentSelect<?> query, EntityResolver entityResolver)
      Specified by:
      getSelectTranslator in interface DbAdapter
    • getSqlTreeProcessor

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

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

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

      public void setSupportsBatchUpdates(boolean flag)
    • 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
      Since:
      1.2
    • setSupportsGeneratedKeys

      public void setSupportsGeneratedKeys(boolean flag)
      Since:
      1.2
    • getEjbqlTranslatorFactory

      public EJBQLTranslatorFactory getEjbqlTranslatorFactory()
      Returns a translator factory for EJBQL to SQL translation. The factory is normally initialized in constructor by calling createEJBQLTranslatorFactory(), and can be changed later by calling setEjbqlTranslatorFactory(EJBQLTranslatorFactory).
      Specified by:
      getEjbqlTranslatorFactory in interface DbAdapter
      Since:
      3.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
    • setEjbqlTranslatorFactory

      public void setEjbqlTranslatorFactory(EJBQLTranslatorFactory ejbqlTranslatorFactory)
      Sets a translator factory for EJBQL to SQL translation. This property is normally initialized in constructor by calling createEJBQLTranslatorFactory(), so users would only override it if they need to customize EJBQL translation.
      Since:
      3.0
    • createQuotingStrategy

      protected QuotingStrategy createQuotingStrategy()
      Since:
      4.0
    • 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()
      Simply returns this, as JdbcAdapter is not a wrapper.
      Specified by:
      unwrap in interface DbAdapter
      Since:
      4.0