Update KeyHolder in JdbcClient when using positional parameters
Prior to this commit, DefaultJdbcClient updated the supplied KeyHolder when using named parameters but not for positional parameters. This commit refactors the creation of the PreparedStatementCreatorFactory so that the PreparedStatementCreator properly creates a PreparedStatement which returns generated keys. Closes gh-31297
This commit is contained in:
@@ -242,7 +242,7 @@ final class DefaultJdbcClient implements JdbcClient {
|
||||
public int update(KeyHolder generatedKeyHolder) {
|
||||
return (useNamedParams() ?
|
||||
namedParamOps.update(this.sql, this.namedParamSource, generatedKeyHolder) :
|
||||
classicOps.update(getPreparedStatementCreatorForIndexedParams(), generatedKeyHolder));
|
||||
classicOps.update(getPreparedStatementCreatorForIndexedParams(true), generatedKeyHolder));
|
||||
}
|
||||
|
||||
private boolean useNamedParams() {
|
||||
@@ -258,7 +258,13 @@ final class DefaultJdbcClient implements JdbcClient {
|
||||
}
|
||||
|
||||
private PreparedStatementCreator getPreparedStatementCreatorForIndexedParams() {
|
||||
return new PreparedStatementCreatorFactory(this.sql).newPreparedStatementCreator(this.indexedParams);
|
||||
return getPreparedStatementCreatorForIndexedParams(false);
|
||||
}
|
||||
|
||||
private PreparedStatementCreator getPreparedStatementCreatorForIndexedParams(boolean returnGeneratedKeys) {
|
||||
PreparedStatementCreatorFactory factory = new PreparedStatementCreatorFactory(this.sql);
|
||||
factory.setReturnGeneratedKeys(returnGeneratedKeys);
|
||||
return factory.newPreparedStatementCreator(this.indexedParams);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user