org.apache.cayenne.dba
Class JdbcAdapter

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

public class JdbcAdapter
extends java.lang.Object
implements DbAdapter

A generic DbAdapter implementation. Can be used as a default adapter or as a superclass of a concrete adapter implementation.


Field Summary
protected  BatchQueryBuilderFactory batchQueryBuilderFactory
           
protected  boolean caseInsensitiveCollations
           
static java.lang.String CI_PROPERTY
           
protected  EJBQLTranslatorFactory ejbqlTranslatorFactory
           
protected  ExtendedTypeMap extendedTypes
           
protected  java.lang.String identifiersEndQuote
           
protected  java.lang.String identifiersStartQuote
           
protected  JdbcEventLogger logger
           
protected  ResourceLocator resourceLocator
           
protected  boolean supportsBatchUpdates
           
protected  boolean supportsGeneratedKeys
           
protected  boolean supportsUniqueConstraints
           
protected  TypesHandler typesHandler
           
 
Constructor Summary
JdbcAdapter(RuntimeProperties runtimeProperties, java.util.List<ExtendedType> defaultExtendedTypes, java.util.List<ExtendedType> userExtendedTypes, java.util.List<ExtendedTypeFactory> extendedTypeFactories)
          Creates new JdbcAdapter with a set of default parameters.
 
Method Summary
 void bindParameter(java.sql.PreparedStatement statement, java.lang.Object object, int pos, int sqlType, int scale)
          Binds an object value to PreparedStatement's numbered parameter.
 DbAttribute buildAttribute(java.lang.String name, java.lang.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).
protected  void configureExtendedTypes(ExtendedTypeMap map)
          Called from initExtendedTypes(List, List, List) to load adapter-specific types into the ExtendedTypeMap right after the default types are loaded, but before the DI overrides are.
protected  EJBQLTranslatorFactory createEJBQLTranslatorFactory()
          Creates and returns an EJBQLTranslatorFactory used to generate visitors for EJBQL to SQL translations.
 java.lang.String createFkConstraint(DbRelationship rel)
          Returns a SQL string that can be used to create a foreign key constraint for the relationship.
protected  PkGenerator createPkGenerator()
          Creates and returns a primary key generator.
 java.lang.String createTable(DbEntity entity)
          Returns a SQL string that can be used to create database table corresponding to ent parameter.
 void createTableAppendColumn(java.lang.StringBuffer sqlBuffer, DbAttribute column)
          Appends SQL for column creation to CREATE TABLE buffer.
protected  void createTableAppendPKClause(java.lang.StringBuffer sqlBuffer, DbEntity entity)
           
 java.lang.String createUniqueConstraint(DbEntity source, java.util.Collection<DbAttribute> columns)
          Returns a DDL string to create a unique constraint over a set of columns.
 java.util.Collection<java.lang.String> dropTableStatements(DbEntity table)
          Returns a collection of SQL statements needed to drop a database table.
 java.lang.String[] externalTypesForJdbcType(int type)
          Returns an array of RDBMS types that can be used with JDBC type.
protected  java.net.URL findResource(java.lang.String name)
          Locates and returns a named adapter resource.
 SQLAction getAction(Query query, DataNode node)
          Uses JdbcActionBuilder to create the right action.
 BatchQueryBuilderFactory getBatchQueryBuilderFactory()
           
 java.lang.String getBatchTerminator()
          Returns default separator - a semicolon.
 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.
 java.lang.String getIdentifiersEndQuote()
           
 java.lang.String getIdentifiersStartQuote()
           
 JdbcEventLogger getJdbcEventLogger()
           
 PkGenerator getPkGenerator()
          Returns primary key generator associated with this DbAdapter.
 QualifierTranslator getQualifierTranslator(QueryAssembler queryAssembler)
          Creates and returns a default implementation of a qualifier translator.
 QuotingStrategy getQuotingStrategy(boolean needQuotes)
           
protected  void initExtendedTypes(java.util.List<ExtendedType> defaultExtendedTypes, java.util.List<ExtendedType> userExtendedTypes, java.util.List<ExtendedTypeFactory> extendedTypeFactories)
           
protected  void initIdentifiersQuotes()
           
 MergerFactory mergerFactory()
           
 void setBatchQueryBuilderFactory(BatchQueryBuilderFactory batchQueryBuilderFactory)
           
 void setEjbqlTranslatorFactory(EJBQLTranslatorFactory ejbqlTranslatorFactory)
          Sets a translator factory for EJBQL to SQL translation.
 void setPkGenerator(PkGenerator pkGenerator)
          Sets new primary key generator.
 void setSupportsBatchUpdates(boolean flag)
           
 void setSupportsGeneratedKeys(boolean flag)
           
 void setSupportsUniqueConstraints(boolean flag)
           
 boolean supportsBatchUpdates()
          Returns true if the target database supports batch updates.
 boolean supportsGeneratedKeys()
          Returns true if a target database supports key autogeneration.
 boolean supportsUniqueConstraints()
          Returns true.
 java.lang.String tableTypeForTable()
          Returns the name of the table type (as returned by DatabaseMetaData.getTableTypes) for a simple user table.
 java.lang.String tableTypeForView()
          Returns the name of the table type (as returned by DatabaseMetaData.getTableTypes) for a view table.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CI_PROPERTY

public static final java.lang.String CI_PROPERTY
See Also:
Constant Field Values

typesHandler

protected TypesHandler typesHandler

extendedTypes

protected ExtendedTypeMap extendedTypes

supportsBatchUpdates

protected boolean supportsBatchUpdates

supportsUniqueConstraints

protected boolean supportsUniqueConstraints

supportsGeneratedKeys

protected boolean supportsGeneratedKeys

ejbqlTranslatorFactory

protected EJBQLTranslatorFactory ejbqlTranslatorFactory

identifiersStartQuote

protected java.lang.String identifiersStartQuote

identifiersEndQuote

protected java.lang.String identifiersEndQuote

resourceLocator

protected ResourceLocator resourceLocator

caseInsensitiveCollations

protected boolean caseInsensitiveCollations

batchQueryBuilderFactory

protected BatchQueryBuilderFactory batchQueryBuilderFactory
Since:
3.1

logger

protected JdbcEventLogger logger
Constructor Detail

JdbcAdapter

public JdbcAdapter(RuntimeProperties runtimeProperties,
                   java.util.List<ExtendedType> defaultExtendedTypes,
                   java.util.List<ExtendedType> userExtendedTypes,
                   java.util.List<ExtendedTypeFactory> extendedTypeFactories)
Creates new JdbcAdapter with a set of default parameters.

Method Detail

getIdentifiersStartQuote

public java.lang.String getIdentifiersStartQuote()
Since:
3.0

getIdentifiersEndQuote

public java.lang.String getIdentifiersEndQuote()
Since:
3.0

getBatchTerminator

public java.lang.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 java.net.URL findResource(java.lang.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) 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(java.util.List<ExtendedType> defaultExtendedTypes,
                                 java.util.List<ExtendedType> userExtendedTypes,
                                 java.util.List<ExtendedTypeFactory> extendedTypeFactories)
Since:
3.1

createPkGenerator

protected PkGenerator createPkGenerator()
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.

Since:
1.1

supportsUniqueConstraints

public boolean supportsUniqueConstraints()
Returns true.

Specified by:
supportsUniqueConstraints in interface DbAdapter
Since:
1.1

setSupportsUniqueConstraints

public void setSupportsUniqueConstraints(boolean flag)
Since:
1.1

dropTableStatements

public java.util.Collection<java.lang.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 java.lang.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(java.lang.StringBuffer sqlBuffer,
                                         DbEntity entity)
Since:
1.2

createTableAppendColumn

public void createTableAppendColumn(java.lang.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

createUniqueConstraint

public java.lang.String createUniqueConstraint(DbEntity source,
                                               java.util.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 java.lang.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 java.lang.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(java.lang.String name,
                                  java.lang.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 java.lang.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 java.lang.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

getQualifierTranslator

public QualifierTranslator getQualifierTranslator(QueryAssembler queryAssembler)
Creates and returns a default implementation of a qualifier translator.

Specified by:
getQualifierTranslator 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

bindParameter

public void bindParameter(java.sql.PreparedStatement statement,
                          java.lang.Object object,
                          int pos,
                          int sqlType,
                          int scale)
                   throws java.sql.SQLException,
                          java.lang.Exception
Description copied from interface: DbAdapter
Binds an object value to PreparedStatement's numbered parameter.

Specified by:
bindParameter in interface DbAdapter
Throws:
java.sql.SQLException
java.lang.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. This property is normally initialized in constructor by calling createEJBQLTranslatorFactory(), and can be overridden by calling setEjbqlTranslatorFactory(EJBQLTranslatorFactory).

Since:
3.0

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

mergerFactory

public MergerFactory mergerFactory()
Specified by:
mergerFactory in interface DbAdapter
Since:
3.0

initIdentifiersQuotes

protected void initIdentifiersQuotes()
Since:
3.0

getQuotingStrategy

public QuotingStrategy getQuotingStrategy(boolean needQuotes)
Specified by:
getQuotingStrategy in interface DbAdapter
Since:
3.0

getBatchQueryBuilderFactory

public BatchQueryBuilderFactory getBatchQueryBuilderFactory()
Since:
3.1

setBatchQueryBuilderFactory

public void setBatchQueryBuilderFactory(BatchQueryBuilderFactory batchQueryBuilderFactory)
Since:
3.1


Copyright © 2001-2012 Apache Cayenne. All Rights Reserved.