Skip to content

Commit 6fb1098

Browse files
committed
Fixed extractOutputParameters to properly extract ResultSet in all cases
Issue: SPR-11076 (cherry picked from commit 3ff3805)
1 parent d48b9b1 commit 6fb1098

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,45 +1092,48 @@ public Map<String, Object> doInCallableStatement(CallableStatement cs) throws SQ
10921092
* @param resultSetParameters Parameter list of declared resultSet parameters for the stored procedure
10931093
* @return Map that contains returned results
10941094
*/
1095-
@SuppressWarnings("rawtypes")
1096-
protected Map<String, Object> extractReturnedResults(
1097-
CallableStatement cs, List updateCountParameters, List resultSetParameters, int updateCount)
1095+
protected Map<String, Object> extractReturnedResults(CallableStatement cs,
1096+
List<SqlParameter> updateCountParameters, List<SqlParameter> resultSetParameters, int updateCount)
10981097
throws SQLException {
10991098

11001099
Map<String, Object> returnedResults = new HashMap<String, Object>();
11011100
int rsIndex = 0;
11021101
int updateIndex = 0;
11031102
boolean moreResults;
1104-
if (!skipResultsProcessing) {
1103+
if (!this.skipResultsProcessing) {
11051104
do {
11061105
if (updateCount == -1) {
11071106
if (resultSetParameters != null && resultSetParameters.size() > rsIndex) {
1108-
SqlReturnResultSet declaredRsParam = (SqlReturnResultSet)resultSetParameters.get(rsIndex);
1107+
SqlReturnResultSet declaredRsParam = (SqlReturnResultSet) resultSetParameters.get(rsIndex);
11091108
returnedResults.putAll(processResultSet(cs.getResultSet(), declaredRsParam));
11101109
rsIndex++;
11111110
}
11121111
else {
1113-
if (!skipUndeclaredResults) {
1112+
if (!this.skipUndeclaredResults) {
11141113
String rsName = RETURN_RESULT_SET_PREFIX + (rsIndex + 1);
11151114
SqlReturnResultSet undeclaredRsParam = new SqlReturnResultSet(rsName, new ColumnMapRowMapper());
1116-
logger.info("Added default SqlReturnResultSet parameter named " + rsName);
1115+
if (logger.isDebugEnabled()) {
1116+
logger.debug("Added default SqlReturnResultSet parameter named '" + rsName + "'");
1117+
}
11171118
returnedResults.putAll(processResultSet(cs.getResultSet(), undeclaredRsParam));
11181119
rsIndex++;
11191120
}
11201121
}
11211122
}
11221123
else {
11231124
if (updateCountParameters != null && updateCountParameters.size() > updateIndex) {
1124-
SqlReturnUpdateCount ucParam = (SqlReturnUpdateCount)updateCountParameters.get(updateIndex);
1125+
SqlReturnUpdateCount ucParam = (SqlReturnUpdateCount) updateCountParameters.get(updateIndex);
11251126
String declaredUcName = ucParam.getName();
11261127
returnedResults.put(declaredUcName, updateCount);
11271128
updateIndex++;
11281129
}
11291130
else {
1130-
if (!skipUndeclaredResults) {
1131-
String undeclaredUcName = RETURN_UPDATE_COUNT_PREFIX + (updateIndex + 1);
1132-
logger.info("Added default SqlReturnUpdateCount parameter named " + undeclaredUcName);
1133-
returnedResults.put(undeclaredUcName, updateCount);
1131+
if (!this.skipUndeclaredResults) {
1132+
String undeclaredName = RETURN_UPDATE_COUNT_PREFIX + (updateIndex + 1);
1133+
if (logger.isDebugEnabled()) {
1134+
logger.debug("Added default SqlReturnUpdateCount parameter named '" + undeclaredName + "'");
1135+
}
1136+
returnedResults.put(undeclaredName, updateCount);
11341137
updateIndex++;
11351138
}
11361139
}
@@ -1174,8 +1177,10 @@ protected Map<String, Object> extractOutputParameters(CallableStatement cs, List
11741177
else {
11751178
String rsName = outParam.getName();
11761179
SqlReturnResultSet rsParam = new SqlReturnResultSet(rsName, new ColumnMapRowMapper());
1177-
returnedResults.putAll(processResultSet(cs.getResultSet(), rsParam));
1178-
logger.info("Added default SqlReturnResultSet parameter named " + rsName);
1180+
returnedResults.putAll(processResultSet((ResultSet) out, rsParam));
1181+
if (logger.isDebugEnabled()) {
1182+
logger.debug("Added default SqlReturnResultSet parameter named '" + rsName + "'");
1183+
}
11791184
}
11801185
}
11811186
else {

spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProvider.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424

2525
/**
2626
* Interface specifying the API to be implemented by a class providing call metadata.
27-
* This is intended for internal use by Spring's
27+
*
28+
* <p>This is intended for internal use by Spring's
2829
* {@link org.springframework.jdbc.core.simple.SimpleJdbcCall}.
2930
*
3031
* @author Thomas Risberg
@@ -74,15 +75,15 @@ void initializeWithProcedureColumnMetaData(
7475

7576
/**
7677
* Provide any modification of the catalog name passed in to match the meta data currently used.
77-
* The returned value will be used for meta data lookups. This could include altering the case used
78-
* or providing a base catalog if none is provided.
78+
* The returned value will be used for meta data lookups. This could include altering the case
79+
* used or providing a base catalog if none is provided.
7980
*/
8081
String metaDataCatalogNameToUse(String catalogName) ;
8182

8283
/**
8384
* Provide any modification of the schema name passed in to match the meta data currently used.
84-
* The returned value will be used for meta data lookups. This could include altering the case used
85-
* or providing a base schema if none is provided.
85+
* The returned value will be used for meta data lookups. This could include altering the case
86+
* used or providing a base schema if none is provided.
8687
*/
8788
String metaDataSchemaNameToUse(String schemaName) ;
8889

@@ -94,53 +95,53 @@ void initializeWithProcedureColumnMetaData(
9495
String parameterNameToUse(String parameterName);
9596

9697
/**
97-
* Create a default out parameter based on the provided meta data. This is used when no
98-
* explicit parameter declaration has been made.
98+
* Create a default out parameter based on the provided meta data.
99+
* This is used when no explicit parameter declaration has been made.
99100
* @param parameterName the name of the parameter
100101
* @param meta meta data used for this call
101102
* @return the configured SqlOutParameter
102103
*/
103104
SqlParameter createDefaultOutParameter(String parameterName, CallParameterMetaData meta);
104105

105106
/**
106-
* Create a default inout parameter based on the provided meta data. This is used when no
107-
* explicit parameter declaration has been made.
107+
* Create a default inout parameter based on the provided meta data.
108+
* This is used when no explicit parameter declaration has been made.
108109
* @param parameterName the name of the parameter
109110
* @param meta meta data used for this call
110111
* @return the configured SqlInOutParameter
111112
*/
112113
SqlParameter createDefaultInOutParameter(String parameterName, CallParameterMetaData meta);
113114

114115
/**
115-
* Create a default in parameter based on the provided meta data. This is used when no
116-
* explicit parameter declaration has been made.
116+
* Create a default in parameter based on the provided meta data.
117+
* This is used when no explicit parameter declaration has been made.
117118
* @param parameterName the name of the parameter
118119
* @param meta meta data used for this call
119120
* @return the configured SqlParameter
120121
*/
121122
SqlParameter createDefaultInParameter(String parameterName, CallParameterMetaData meta);
122123

123124
/**
124-
* Get the name of the current user. Useful for meta data lookups etc.
125+
* Get the name of the current user. Useful for meta data lookups etc.
125126
* @return current user name from database connection
126127
*/
127128
String getUserName();
128129

129130
/**
130-
* Does this database support returning resultsets that should be retrieved with the JDBC call
131+
* Does this database support returning ResultSets that should be retrieved with the JDBC call.
131132
* {@link java.sql.Statement#getResultSet()}
132133
*/
133134
boolean isReturnResultSetSupported();
134135

135136
/**
136-
* Does this database support returning resultsets as ref cursors to be retrieved with
137+
* Does this database support returning ResultSets as ref cursors to be retrieved with
137138
* {@link java.sql.CallableStatement#getObject(int)} for the specified column.
138139
*/
139140
boolean isRefCursorSupported();
140141

141142
/**
142-
* Get the {@link java.sql.Types} type for columns that return resultsets as ref cursors if this feature
143-
* is supported.
143+
* Get the {@link java.sql.Types} type for columns that return ResultSets as ref cursors
144+
* if this feature is supported.
144145
*/
145146
int getRefCursorSqlType();
146147

0 commit comments

Comments
 (0)