Merge branch '5.1.x'
This commit is contained in:
commit
c41616e82d
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2018 the original author or authors.
|
* Copyright 2002-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -31,7 +31,6 @@ import java.sql.Statement;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -1150,12 +1149,12 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
logger.trace("CallableStatement.execute() returned '" + retVal + "'");
|
logger.trace("CallableStatement.execute() returned '" + retVal + "'");
|
||||||
logger.trace("CallableStatement.getUpdateCount() returned " + updateCount);
|
logger.trace("CallableStatement.getUpdateCount() returned " + updateCount);
|
||||||
}
|
}
|
||||||
Map<String, Object> returnedResults = createResultsMap();
|
Map<String, Object> results = createResultsMap();
|
||||||
if (retVal || updateCount != -1) {
|
if (retVal || updateCount != -1) {
|
||||||
returnedResults.putAll(extractReturnedResults(cs, updateCountParameters, resultSetParameters, updateCount));
|
results.putAll(extractReturnedResults(cs, updateCountParameters, resultSetParameters, updateCount));
|
||||||
}
|
}
|
||||||
returnedResults.putAll(extractOutputParameters(cs, callParameters));
|
results.putAll(extractOutputParameters(cs, callParameters));
|
||||||
return returnedResults;
|
return results;
|
||||||
});
|
});
|
||||||
|
|
||||||
Assert.state(result != null, "No result map");
|
Assert.state(result != null, "No result map");
|
||||||
|
@ -1173,7 +1172,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
@Nullable List<SqlParameter> updateCountParameters, @Nullable List<SqlParameter> resultSetParameters,
|
@Nullable List<SqlParameter> updateCountParameters, @Nullable List<SqlParameter> resultSetParameters,
|
||||||
int updateCount) throws SQLException {
|
int updateCount) throws SQLException {
|
||||||
|
|
||||||
Map<String, Object> returnedResults = new HashMap<>();
|
Map<String, Object> results = new LinkedHashMap<>(4);
|
||||||
int rsIndex = 0;
|
int rsIndex = 0;
|
||||||
int updateIndex = 0;
|
int updateIndex = 0;
|
||||||
boolean moreResults;
|
boolean moreResults;
|
||||||
|
@ -1182,7 +1181,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
if (updateCount == -1) {
|
if (updateCount == -1) {
|
||||||
if (resultSetParameters != null && resultSetParameters.size() > rsIndex) {
|
if (resultSetParameters != null && resultSetParameters.size() > rsIndex) {
|
||||||
SqlReturnResultSet declaredRsParam = (SqlReturnResultSet) resultSetParameters.get(rsIndex);
|
SqlReturnResultSet declaredRsParam = (SqlReturnResultSet) resultSetParameters.get(rsIndex);
|
||||||
returnedResults.putAll(processResultSet(cs.getResultSet(), declaredRsParam));
|
results.putAll(processResultSet(cs.getResultSet(), declaredRsParam));
|
||||||
rsIndex++;
|
rsIndex++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1192,7 +1191,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace("Added default SqlReturnResultSet parameter named '" + rsName + "'");
|
logger.trace("Added default SqlReturnResultSet parameter named '" + rsName + "'");
|
||||||
}
|
}
|
||||||
returnedResults.putAll(processResultSet(cs.getResultSet(), undeclaredRsParam));
|
results.putAll(processResultSet(cs.getResultSet(), undeclaredRsParam));
|
||||||
rsIndex++;
|
rsIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1201,7 +1200,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
if (updateCountParameters != null && updateCountParameters.size() > updateIndex) {
|
if (updateCountParameters != null && updateCountParameters.size() > updateIndex) {
|
||||||
SqlReturnUpdateCount ucParam = (SqlReturnUpdateCount) updateCountParameters.get(updateIndex);
|
SqlReturnUpdateCount ucParam = (SqlReturnUpdateCount) updateCountParameters.get(updateIndex);
|
||||||
String declaredUcName = ucParam.getName();
|
String declaredUcName = ucParam.getName();
|
||||||
returnedResults.put(declaredUcName, updateCount);
|
results.put(declaredUcName, updateCount);
|
||||||
updateIndex++;
|
updateIndex++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1210,7 +1209,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace("Added default SqlReturnUpdateCount parameter named '" + undeclaredName + "'");
|
logger.trace("Added default SqlReturnUpdateCount parameter named '" + undeclaredName + "'");
|
||||||
}
|
}
|
||||||
returnedResults.put(undeclaredName, updateCount);
|
results.put(undeclaredName, updateCount);
|
||||||
updateIndex++;
|
updateIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1223,7 +1222,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
}
|
}
|
||||||
while (moreResults || updateCount != -1);
|
while (moreResults || updateCount != -1);
|
||||||
}
|
}
|
||||||
return returnedResults;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1235,7 +1234,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
protected Map<String, Object> extractOutputParameters(CallableStatement cs, List<SqlParameter> parameters)
|
protected Map<String, Object> extractOutputParameters(CallableStatement cs, List<SqlParameter> parameters)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
|
|
||||||
Map<String, Object> returnedResults = new HashMap<>();
|
Map<String, Object> results = new LinkedHashMap<>(parameters.size());
|
||||||
int sqlColIndex = 1;
|
int sqlColIndex = 1;
|
||||||
for (SqlParameter param : parameters) {
|
for (SqlParameter param : parameters) {
|
||||||
if (param instanceof SqlOutParameter) {
|
if (param instanceof SqlOutParameter) {
|
||||||
|
@ -1244,25 +1243,25 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
SqlReturnType returnType = outParam.getSqlReturnType();
|
SqlReturnType returnType = outParam.getSqlReturnType();
|
||||||
if (returnType != null) {
|
if (returnType != null) {
|
||||||
Object out = returnType.getTypeValue(cs, sqlColIndex, outParam.getSqlType(), outParam.getTypeName());
|
Object out = returnType.getTypeValue(cs, sqlColIndex, outParam.getSqlType(), outParam.getTypeName());
|
||||||
returnedResults.put(outParam.getName(), out);
|
results.put(outParam.getName(), out);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Object out = cs.getObject(sqlColIndex);
|
Object out = cs.getObject(sqlColIndex);
|
||||||
if (out instanceof ResultSet) {
|
if (out instanceof ResultSet) {
|
||||||
if (outParam.isResultSetSupported()) {
|
if (outParam.isResultSetSupported()) {
|
||||||
returnedResults.putAll(processResultSet((ResultSet) out, outParam));
|
results.putAll(processResultSet((ResultSet) out, outParam));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
String rsName = outParam.getName();
|
String rsName = outParam.getName();
|
||||||
SqlReturnResultSet rsParam = new SqlReturnResultSet(rsName, getColumnMapRowMapper());
|
SqlReturnResultSet rsParam = new SqlReturnResultSet(rsName, getColumnMapRowMapper());
|
||||||
returnedResults.putAll(processResultSet((ResultSet) out, rsParam));
|
results.putAll(processResultSet((ResultSet) out, rsParam));
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace("Added default SqlReturnResultSet parameter named '" + rsName + "'");
|
logger.trace("Added default SqlReturnResultSet parameter named '" + rsName + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
returnedResults.put(outParam.getName(), out);
|
results.put(outParam.getName(), out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1270,7 +1269,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
sqlColIndex++;
|
sqlColIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return returnedResults;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1282,31 +1281,29 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
|
||||||
protected Map<String, Object> processResultSet(
|
protected Map<String, Object> processResultSet(
|
||||||
@Nullable ResultSet rs, ResultSetSupportingSqlParameter param) throws SQLException {
|
@Nullable ResultSet rs, ResultSetSupportingSqlParameter param) throws SQLException {
|
||||||
|
|
||||||
if (rs == null) {
|
if (rs != null) {
|
||||||
return Collections.emptyMap();
|
try {
|
||||||
}
|
if (param.getRowMapper() != null) {
|
||||||
|
RowMapper<?> rowMapper = param.getRowMapper();
|
||||||
Map<String, Object> returnedResults = new HashMap<>();
|
Object result = (new RowMapperResultSetExtractor<>(rowMapper)).extractData(rs);
|
||||||
try {
|
return Collections.singletonMap(param.getName(), result);
|
||||||
if (param.getRowMapper() != null) {
|
}
|
||||||
RowMapper<?> rowMapper = param.getRowMapper();
|
else if (param.getRowCallbackHandler() != null) {
|
||||||
Object result = (new RowMapperResultSetExtractor<>(rowMapper)).extractData(rs);
|
RowCallbackHandler rch = param.getRowCallbackHandler();
|
||||||
returnedResults.put(param.getName(), result);
|
(new RowCallbackHandlerResultSetExtractor(rch)).extractData(rs);
|
||||||
|
return Collections.singletonMap(param.getName(),
|
||||||
|
"ResultSet returned from stored procedure was processed");
|
||||||
|
}
|
||||||
|
else if (param.getResultSetExtractor() != null) {
|
||||||
|
Object result = param.getResultSetExtractor().extractData(rs);
|
||||||
|
return Collections.singletonMap(param.getName(), result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (param.getRowCallbackHandler() != null) {
|
finally {
|
||||||
RowCallbackHandler rch = param.getRowCallbackHandler();
|
JdbcUtils.closeResultSet(rs);
|
||||||
(new RowCallbackHandlerResultSetExtractor(rch)).extractData(rs);
|
|
||||||
returnedResults.put(param.getName(), "ResultSet returned from stored procedure was processed");
|
|
||||||
}
|
|
||||||
else if (param.getResultSetExtractor() != null) {
|
|
||||||
Object result = param.getResultSetExtractor().extractData(rs);
|
|
||||||
returnedResults.put(param.getName(), result);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
return Collections.emptyMap();
|
||||||
JdbcUtils.closeResultSet(rs);
|
|
||||||
}
|
|
||||||
return returnedResults;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue