org.springframework.jdbc.core.metadata

## Class GenericCallMetaDataProvider

- java.lang.Object
- - org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider

All Implemented Interfaces:
  CallMetaDataProvider

Direct Known Subclasses:
  Db2CallMetaDataProvider, DerbyCallMetaDataProvider, OracleCallMetaDataProvider, PostgresCallMetaDataProvider, SqlServerCallMetaDataProvider, SybaseCallMetaDataProvider

    public class GenericCallMetaDataProvider
    extends Object
    implements CallMetaDataProvider

Generic implementation for the `CallMetaDataProvider` interface. This class can be extended to provide database specific behavior.

Since:
  2.5
Author:
  Thomas Risberg

### Field Summary

Fields
`protected static Log` `logger` Logger available to subclasses

### Constructor Summary

Constructors
`protected` `GenericCallMetaDataProvider(DatabaseMetaData databaseMetaData)` Constructor used to initialize with provided database meta data.

### Method Summary

Methods
`boolean` `byPassReturnParameter(String parameterName)` Should we bypass the return parameter with the specified name.
`String` `catalogNameToUse(String catalogName)` Provide any modification of the catalog name passed in to match the meta data currently used.
`SqlParameter` `createDefaultInOutParameter(String parameterName, CallParameterMetaData meta)` Create a default inout parameter based on the provided meta data.
`SqlParameter` `createDefaultInParameter(String parameterName, CallParameterMetaData meta)` Create a default in parameter based on the provided meta data.
`SqlParameter` `createDefaultOutParameter(String parameterName, CallParameterMetaData meta)` Create a default out parameter based on the provided meta data.
`List<CallParameterMetaData>` `getCallParameterMetaData()` Get the call parameter metadata that is currently used.
`int` `getRefCursorSqlType()` Get the `Types` type for columns that return resultsets as ref cursors if this feature is supported.
`String` `getUserName()` Get the name of the current user.
`void` `initializeWithMetaData(DatabaseMetaData databaseMetaData)` Initialize using the provided DatabaseMetData.
`void` `initializeWithProcedureColumnMetaData(DatabaseMetaData databaseMetaData, String catalogName, String schemaName, String procedureName)` Initialize the database specific management of procedure column meta data.
`boolean` `isProcedureColumnMetaDataUsed()` Are we using the meta data for the procedure columns?
`boolean` `isRefCursorSupported()` Does this database support returning resultsets as ref cursors to be retrieved with `CallableStatement.getObject(int)` for the specified column.
`boolean` `isReturnResultSetSupported()` Does this database support returning resultsets that should be retrieved with the JDBC call `Statement.getResultSet()`
`protected boolean` `isStoresLowerCaseIdentifiers()` Does the database use lower case for identifiers
`protected boolean` `isStoresUpperCaseIdentifiers()` Does the database use upper case for identifiers
`boolean` `isSupportsCatalogsInProcedureCalls()` Does the database support the use of catalog name in procedure calls
`boolean` `isSupportsSchemasInProcedureCalls()` Does the database support the use of schema name in procedure calls
`String` `metaDataCatalogNameToUse(String catalogName)` Provide any modification of the catalog name passed in to match the meta data currently used.
`String` `metaDataSchemaNameToUse(String schemaName)` Provide any modification of the schema name passed in to match the meta data currently used.
`String` `parameterNameToUse(String parameterName)` Provide any modification of the column name passed in to match the meta data currently used.
`String` `procedureNameToUse(String procedureName)` Provide any modification of the procedure name passed in to match the meta data currently used.
`String` `schemaNameToUse(String schemaName)` Provide any modification of the schema name passed in to match the meta data currently used.
`protected void` `setStoresLowerCaseIdentifiers(boolean storesLowerCaseIdentifiers)` Specify whether the database uses lower case for identifiers
`protected void` `setStoresUpperCaseIdentifiers(boolean storesUpperCaseIdentifiers)` Specify whether the database uses upper case for identifiers
`protected void` `setSupportsCatalogsInProcedureCalls(boolean supportsCatalogsInProcedureCalls)` Specify whether the database supports the use of catalog name in procedure calls
`protected void` `setSupportsSchemasInProcedureCalls(boolean supportsSchemasInProcedureCalls)` Specify whether the database supports the use of schema name in procedure calls

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

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

### Field Detail

#### logger

    protected static final Log logger

Logger available to subclasses

### Constructor Detail

#### GenericCallMetaDataProvider

    protected GenericCallMetaDataProvider(DatabaseMetaData databaseMetaData)
                                   throws SQLException

Constructor used to initialize with provided database meta data.

Parameters:
  `databaseMetaData` - meta data to be used
Throws:
  `SQLException`

### Method Detail

#### initializeWithMetaData

    public void initializeWithMetaData(DatabaseMetaData databaseMetaData)
                                throws SQLException

Description copied from interface: `CallMetaDataProvider`
Initialize using the provided DatabaseMetData.

Specified by:
  `initializeWithMetaData` in interface `CallMetaDataProvider`
Parameters:
  `databaseMetaData` - used to retrieve database specific information
Throws:
  `SQLException` - in case of initialization failure

#### initializeWithProcedureColumnMetaData

    public void initializeWithProcedureColumnMetaData(DatabaseMetaData databaseMetaData,
                                             String catalogName,
                                             String schemaName,
                                             String procedureName)
                                               throws SQLException

Description copied from interface: `CallMetaDataProvider`
Initialize the database specific management of procedure column meta data. This is only called for databases that are supported. This initalization can be turned off by specifying that column meta data should not be used.

Specified by:
  `initializeWithProcedureColumnMetaData` in interface `CallMetaDataProvider`
Parameters:
  `databaseMetaData` - used to retrieve database specific information
  `catalogName` - name of catalog to use or null
  `schemaName` - name of schema name to use or null
  `procedureName` - name of the stored procedure
Throws:
  `SQLException` - in case of initialization failure
See Also:
  `SimpleJdbcCall.withoutProcedureColumnMetaDataAccess()`

#### getCallParameterMetaData

    public List<CallParameterMetaData> getCallParameterMetaData()

Description copied from interface: `CallMetaDataProvider`
Get the call parameter metadata that is currently used.

Specified by:
  `getCallParameterMetaData` in interface `CallMetaDataProvider`
Returns:
  List of `CallParameterMetaData`

#### procedureNameToUse

    public String procedureNameToUse(String procedureName)

Description copied from interface: `CallMetaDataProvider`
Provide any modification of the procedure name passed in to match the meta data currently used. This could include alterig the case.

Specified by:
  `procedureNameToUse` in interface `CallMetaDataProvider`

#### catalogNameToUse

    public String catalogNameToUse(String catalogName)

Description copied from interface: `CallMetaDataProvider`
Provide any modification of the catalog name passed in to match the meta data currently used. This could include alterig the case.

Specified by:
  `catalogNameToUse` in interface `CallMetaDataProvider`

#### schemaNameToUse

    public String schemaNameToUse(String schemaName)

Description copied from interface: `CallMetaDataProvider`
Provide any modification of the schema name passed in to match the meta data currently used. This could include alterig the case.

Specified by:
  `schemaNameToUse` in interface `CallMetaDataProvider`

#### metaDataCatalogNameToUse

    public String metaDataCatalogNameToUse(String catalogName)

Description copied from interface: `CallMetaDataProvider`
Provide any modification of the catalog name passed in to match the meta data currently used. The reyurned value will be used for meta data lookups. This could include alterig the case used or providing a base catalog if mone provided.

Specified by:
  `metaDataCatalogNameToUse` in interface `CallMetaDataProvider`

#### metaDataSchemaNameToUse

    public String metaDataSchemaNameToUse(String schemaName)

Description copied from interface: `CallMetaDataProvider`
Provide any modification of the schema name passed in to match the meta data currently used. The reyurned value will be used for meta data lookups. This could include alterig the case used or providing a base schema if mone provided.

Specified by:
  `metaDataSchemaNameToUse` in interface `CallMetaDataProvider`

#### parameterNameToUse

    public String parameterNameToUse(String parameterName)

Description copied from interface: `CallMetaDataProvider`
Provide any modification of the column name passed in to match the meta data currently used. This could include altering the case.

Specified by:
  `parameterNameToUse` in interface `CallMetaDataProvider`
Parameters:
  `parameterName` - name of the parameter of column

#### byPassReturnParameter

    public boolean byPassReturnParameter(String parameterName)

Description copied from interface: `CallMetaDataProvider`
Should we bypass the return parameter with the specified name. This allows the database specific implementation to skip the processing for specific results returned by the database call.

Specified by:
  `byPassReturnParameter` in interface `CallMetaDataProvider`

#### createDefaultOutParameter

    public SqlParameter createDefaultOutParameter(String parameterName,
                                         CallParameterMetaData meta)

Description copied from interface: `CallMetaDataProvider`
Create a default out parameter based on the provided meta data. This is used when no explicit parameter declaration has been made.

Specified by:
  `createDefaultOutParameter` in interface `CallMetaDataProvider`
Parameters:
  `parameterName` - the name of the parameter
  `meta` - meta data used for this call
Returns:
  the configured SqlOutParameter

#### createDefaultInOutParameter

    public SqlParameter createDefaultInOutParameter(String parameterName,
                                           CallParameterMetaData meta)

Description copied from interface: `CallMetaDataProvider`
Create a default inout parameter based on the provided meta data. This is used when no explicit parameter declaration has been made.

Specified by:
  `createDefaultInOutParameter` in interface `CallMetaDataProvider`
Parameters:
  `parameterName` - the name of the parameter
  `meta` - meta data used for this call
Returns:
  the configured SqlInOutParameter

#### createDefaultInParameter

    public SqlParameter createDefaultInParameter(String parameterName,
                                        CallParameterMetaData meta)

Description copied from interface: `CallMetaDataProvider`
Create a default in parameter based on the provided meta data. This is used when no explicit parameter declaration has been made.

Specified by:
  `createDefaultInParameter` in interface `CallMetaDataProvider`
Parameters:
  `parameterName` - the name of the parameter
  `meta` - meta data used for this call
Returns:
  the configured SqlParameter

#### getUserName

    public String getUserName()

Description copied from interface: `CallMetaDataProvider`
Get the name of the current user. Useful for meta data lookups etc.

Specified by:
  `getUserName` in interface `CallMetaDataProvider`
Returns:
  current user name from database connection

#### isReturnResultSetSupported

    public boolean isReturnResultSetSupported()

Description copied from interface: `CallMetaDataProvider`
Does this database support returning resultsets that should be retrieved with the JDBC call `Statement.getResultSet()`

Specified by:
  `isReturnResultSetSupported` in interface `CallMetaDataProvider`

#### isRefCursorSupported

    public boolean isRefCursorSupported()

Description copied from interface: `CallMetaDataProvider`
Does this database support returning resultsets as ref cursors to be retrieved with `CallableStatement.getObject(int)` for the specified column.

Specified by:
  `isRefCursorSupported` in interface `CallMetaDataProvider`

#### getRefCursorSqlType

    public int getRefCursorSqlType()

Description copied from interface: `CallMetaDataProvider`
Get the `Types` type for columns that return resultsets as ref cursors if this feature is supported.

Specified by:
  `getRefCursorSqlType` in interface `CallMetaDataProvider`

#### isProcedureColumnMetaDataUsed

    public boolean isProcedureColumnMetaDataUsed()

Description copied from interface: `CallMetaDataProvider`
Are we using the meta data for the procedure columns?

Specified by:
  `isProcedureColumnMetaDataUsed` in interface `CallMetaDataProvider`

#### setSupportsCatalogsInProcedureCalls

    protected void setSupportsCatalogsInProcedureCalls(boolean supportsCatalogsInProcedureCalls)

Specify whether the database supports the use of catalog name in procedure calls

#### isSupportsCatalogsInProcedureCalls

    public boolean isSupportsCatalogsInProcedureCalls()

Does the database support the use of catalog name in procedure calls

Specified by:
  `isSupportsCatalogsInProcedureCalls` in interface `CallMetaDataProvider`

#### setSupportsSchemasInProcedureCalls

    protected void setSupportsSchemasInProcedureCalls(boolean supportsSchemasInProcedureCalls)

Specify whether the database supports the use of schema name in procedure calls

#### isSupportsSchemasInProcedureCalls

    public boolean isSupportsSchemasInProcedureCalls()

Does the database support the use of schema name in procedure calls

Specified by:
  `isSupportsSchemasInProcedureCalls` in interface `CallMetaDataProvider`

#### setStoresUpperCaseIdentifiers

    protected void setStoresUpperCaseIdentifiers(boolean storesUpperCaseIdentifiers)

Specify whether the database uses upper case for identifiers

#### isStoresUpperCaseIdentifiers

    protected boolean isStoresUpperCaseIdentifiers()

Does the database use upper case for identifiers

#### setStoresLowerCaseIdentifiers

    protected void setStoresLowerCaseIdentifiers(boolean storesLowerCaseIdentifiers)

Specify whether the database uses lower case for identifiers

#### isStoresLowerCaseIdentifiers

    protected boolean isStoresLowerCaseIdentifiers()

Does the database use lower case for identifiers