Fix Sybase SimpleJdbcCall named parameter binding
This commit is contained in:
parent
b3a3b79b44
commit
748dd94dab
|
@ -676,7 +676,9 @@ public class CallMetaDataContext {
|
|||
* @since 4.2
|
||||
*/
|
||||
protected String createParameterBinding(SqlParameter parameter) {
|
||||
return (isNamedBinding() ? parameter.getName() + " => ?" : "?");
|
||||
Assert.state(this.metaDataProvider != null, "No CallMetaDataProvider available");
|
||||
|
||||
return (isNamedBinding() ? this.metaDataProvider.namedParamBindingToUse(parameter.getName()) : "?");
|
||||
}
|
||||
|
||||
private static String lowerCase(@Nullable String paramName) {
|
||||
|
|
|
@ -180,4 +180,11 @@ public interface CallMetaDataProvider {
|
|||
*/
|
||||
boolean isSupportsSchemasInProcedureCalls();
|
||||
|
||||
/**
|
||||
* Returns the name of the named parameter to use for binding the given parameter name.
|
||||
* @param paramName the name of the parameter to bind
|
||||
* @return the name of the named parameter to use for binding the given parameter name,
|
||||
*/
|
||||
String namedParamBindingToUse(@Nullable String paramName);
|
||||
|
||||
}
|
||||
|
|
|
@ -246,6 +246,16 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider {
|
|||
return this.supportsSchemasInProcedureCalls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the named parameter to use for binding the given parameter name.
|
||||
* @param paramName the name of the parameter to bind
|
||||
* @return the name of the named parameter to use for binding the given parameter name,
|
||||
*/
|
||||
@Override
|
||||
public String namedParamBindingToUse(@Nullable String paramName) {
|
||||
return paramName + " => ?";
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify whether the database uses upper case for identifiers.
|
||||
*/
|
||||
|
|
|
@ -60,4 +60,9 @@ public class SybaseCallMetaDataProvider extends GenericCallMetaDataProvider {
|
|||
RETURN_VALUE_NAME.equals(parameterNameToUse(parameterName)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String namedParamBindingToUse(@Nullable String paramName) {
|
||||
return paramName + " = ?";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -349,4 +349,17 @@ class SimpleJdbcCallTests {
|
|||
verify(procedureColumnsResultSet).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
void correctSybaseFunctionStatementNamed() throws Exception {
|
||||
given(databaseMetaData.getDatabaseProductName()).willReturn("Sybase");
|
||||
SimpleJdbcCall adder = new SimpleJdbcCall(dataSource)
|
||||
.withoutProcedureColumnMetaDataAccess()
|
||||
.withNamedBinding()
|
||||
.withProcedureName("ADD_INVOICE")
|
||||
.declareParameters(new SqlParameter("@AMOUNT", Types.NUMERIC))
|
||||
.declareParameters(new SqlParameter("@CUSTID", Types.NUMERIC));
|
||||
adder.compile();
|
||||
verifyStatement(adder, "{call ADD_INVOICE(@AMOUNT = ?, @CUSTID = ?)}");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue