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
    Modifier and Type | Field and Description
    --- | ---
    `protected static Log` | `logger` Logger available to subclasses

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `GenericCallMetaDataProvider(DatabaseMetaData databaseMetaData)` Constructor used to initialize with provided database meta data.

  - ### Method Summary

    Methods
    Modifier and Type | Method and 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 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 altering 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 altering 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 altering 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 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 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 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 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