Class GenericCallMetaDataProvider
- java.lang.Object
- org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider
- All Implemented Interfaces:
CallMetaDataProvider
- Direct Known Subclasses:
Db2CallMetaDataProvider
,DerbyCallMetaDataProvider
,HanaCallMetaDataProvider
,OracleCallMetaDataProvider
,PostgresCallMetaDataProvider
,SqlServerCallMetaDataProvider
,SybaseCallMetaDataProvider
public class GenericCallMetaDataProvider extends Object implements CallMetaDataProvider
A generic implementation of theCallMetaDataProvider
interface. This class can be extended to provide database specific behavior.- Since:
- 2.5
- Author:
- Thomas Risberg, Juergen Hoeller
Constructor Summary
Constructors Modifier Constructor Description protected
GenericCallMetaDataProvider(DatabaseMetaData databaseMetaData)
Constructor used to initialize with provided database meta-data.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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 meta-data that is currently used.int
getRefCursorSqlType()
Get theTypes
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 withCallableStatement.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.
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 interfaceCallMetaDataProvider
- 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 initialization can be turned off by specifying that column meta-data should not be used.- Specified by:
initializeWithProcedureColumnMetaData
in interfaceCallMetaDataProvider
- Parameters:
databaseMetaData
- used to retrieve database specific informationcatalogName
- name of catalog to use (ornull
if none)schemaName
- name of schema name to use (ornull
if none)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 meta-data that is currently used.- Specified by:
getCallParameterMetaData
in interfaceCallMetaDataProvider
- 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 altering the case.- Specified by:
procedureNameToUse
in interfaceCallMetaDataProvider
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 altering the case.- Specified by:
catalogNameToUse
in interfaceCallMetaDataProvider
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 altering the case.- Specified by:
schemaNameToUse
in interfaceCallMetaDataProvider
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 returned value will be used for meta-data lookups. This could include altering the case used or providing a base catalog if none is provided.- Specified by:
metaDataCatalogNameToUse
in interfaceCallMetaDataProvider
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 returned value will be used for meta-data lookups. This could include altering the case used or providing a base schema if none is provided.- Specified by:
metaDataSchemaNameToUse
in interfaceCallMetaDataProvider
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 interfaceCallMetaDataProvider
- 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 interfaceCallMetaDataProvider
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 interfaceCallMetaDataProvider
- Parameters:
parameterName
- the name of the parametermeta
- 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 interfaceCallMetaDataProvider
- Parameters:
parameterName
- the name of the parametermeta
- 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 interfaceCallMetaDataProvider
- Parameters:
parameterName
- the name of the parametermeta
- 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 interfaceCallMetaDataProvider
- 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 interfaceCallMetaDataProvider
isRefCursorSupported
public boolean isRefCursorSupported()
Description copied from interface:CallMetaDataProvider
Does this database support returning ResultSets as ref cursors to be retrieved withCallableStatement.getObject(int)
for the specified column.- Specified by:
isRefCursorSupported
in interfaceCallMetaDataProvider
getRefCursorSqlType
public int getRefCursorSqlType()
Description copied from interface:CallMetaDataProvider
Get theTypes
type for columns that return ResultSets as ref cursors if this feature is supported.- Specified by:
getRefCursorSqlType
in interfaceCallMetaDataProvider
isProcedureColumnMetaDataUsed
public boolean isProcedureColumnMetaDataUsed()
Description copied from interface:CallMetaDataProvider
Are we using the meta-data for the procedure columns?- Specified by:
isProcedureColumnMetaDataUsed
in interfaceCallMetaDataProvider
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 interfaceCallMetaDataProvider
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 interfaceCallMetaDataProvider
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?