package org.springframework.jdbc.core.metadata; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.ColumnMapRowMapper; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.sql.Types; /** * Oracle specific implementation for the {@link org.springframework.jdbc.core.metadata.CallMetaDataProvider} interface. * This class is intended for internal use by the Simple JDBC classes. * * @author Thomas Risberg * @since 2.5 */ public class PostgresCallMetaDataProvider extends GenericCallMetaDataProvider { private static final String RETURN_VALUE_NAME = "returnValue"; public PostgresCallMetaDataProvider(DatabaseMetaData databaseMetaData) throws SQLException { super(databaseMetaData); } @Override public boolean isReturnResultSetSupported() { return false; } @Override public boolean isRefCursorSupported() { return true; } @Override public int getRefCursorSqlType() { return Types.OTHER; } @Override public String metaDataSchemaNameToUse(String schemaName) { // Use public schema if no schema specified return schemaName == null ? "public" : super.metaDataSchemaNameToUse(schemaName); } @Override public SqlParameter createDefaultOutParameter(String parameterName, CallParameterMetaData meta) { if (meta.getSqlType() == Types.OTHER && "refcursor".equals(meta.getTypeName())) { return new SqlOutParameter(parameterName, getRefCursorSqlType(), new ColumnMapRowMapper()); } else { return super.createDefaultOutParameter(parameterName, meta); } } @Override public boolean byPassReturnParameter(String parameterName) { return (RETURN_VALUE_NAME.equals(parameterName) || super.byPassReturnParameter(parameterName)); } }