@@ -219,18 +219,21 @@ public boolean isAccessCallParameterMetaData() {
219
219
220
220
/**
221
221
* Specify whether parameters should be bound by name.
222
+ * @since 4.2
222
223
*/
223
224
public void setNamedBinding (boolean namedBinding ) {
224
225
this .namedBinding = namedBinding ;
225
226
}
226
227
227
228
/**
228
229
* Check whether parameters should be bound by name.
230
+ * @since 4.2
229
231
*/
230
232
public boolean isNamedBinding () {
231
- return namedBinding ;
233
+ return this . namedBinding ;
232
234
}
233
235
236
+
234
237
/**
235
238
* Create a ReturnResultSetParameter/SqlOutParameter depending on the support provided
236
239
* by the JDBC driver used for the database in use.
@@ -297,88 +300,94 @@ public void processParameters(List<SqlParameter> parameters) {
297
300
* Reconcile the provided parameters with available metadata and add new ones where appropriate.
298
301
*/
299
302
protected List <SqlParameter > reconcileParameters (List <SqlParameter > parameters ) {
300
- final List <SqlParameter > declaredReturnParameters = new ArrayList <SqlParameter >();
301
- final Map <String , SqlParameter > declaredParameters = new LinkedHashMap <String , SqlParameter >();
303
+ final List <SqlParameter > declaredReturnParams = new ArrayList <SqlParameter >();
304
+ final Map <String , SqlParameter > declaredParams = new LinkedHashMap <String , SqlParameter >();
302
305
boolean returnDeclared = false ;
303
- List <String > outParameterNames = new ArrayList <String >();
304
- List <String > metaDataParameterNames = new ArrayList <String >();
306
+ List <String > outParamNames = new ArrayList <String >();
307
+ List <String > metaDataParamNames = new ArrayList <String >();
305
308
306
309
// Get the names of the meta data parameters
307
310
for (CallParameterMetaData meta : this .metaDataProvider .getCallParameterMetaData ()) {
308
311
if (meta .getParameterType () != DatabaseMetaData .procedureColumnReturn ) {
309
- metaDataParameterNames .add (meta .getParameterName ().toLowerCase ());
312
+ metaDataParamNames .add (meta .getParameterName ().toLowerCase ());
310
313
}
311
314
}
312
315
313
316
// Separate implicit return parameters from explicit parameters...
314
- for (SqlParameter parameter : parameters ) {
315
- if (parameter .isResultsParameter ()) {
316
- declaredReturnParameters .add (parameter );
317
+ for (SqlParameter param : parameters ) {
318
+ if (param .isResultsParameter ()) {
319
+ declaredReturnParams .add (param );
317
320
}
318
321
else {
319
- String parameterNameToMatch = this .metaDataProvider .parameterNameToUse (parameter .getName ()).toLowerCase ();
320
- declaredParameters .put (parameterNameToMatch , parameter );
321
- if (parameter instanceof SqlOutParameter ) {
322
- outParameterNames .add (parameter .getName ());
323
- if (isFunction () && !metaDataParameterNames .contains (parameterNameToMatch )) {
322
+ String paramName = param .getName ();
323
+ if (paramName == null ) {
324
+ throw new IllegalArgumentException ("Anonymous parameters not supported for calls - " +
325
+ "please specify a name for the parameter of SQL type " + param .getSqlType ());
326
+ }
327
+ String paramNameToMatch = this .metaDataProvider .parameterNameToUse (paramName ).toLowerCase ();
328
+ declaredParams .put (paramNameToMatch , param );
329
+ if (param instanceof SqlOutParameter ) {
330
+ outParamNames .add (paramName );
331
+ if (isFunction () && !metaDataParamNames .contains (paramNameToMatch )) {
324
332
if (!returnDeclared ) {
325
333
if (logger .isDebugEnabled ()) {
326
- logger .debug ("Using declared out parameter '" + parameter .getName () + "' for function return value" );
334
+ logger .debug ("Using declared out parameter '" + paramName +
335
+ "' for function return value" );
327
336
}
328
- setFunctionReturnName (parameter . getName () );
337
+ setFunctionReturnName (paramName );
329
338
returnDeclared = true ;
330
339
}
331
340
}
332
341
}
333
342
}
334
343
}
335
- setOutParameterNames (outParameterNames );
344
+ setOutParameterNames (outParamNames );
336
345
337
- List <SqlParameter > workParameters = new ArrayList <SqlParameter >();
338
- workParameters .addAll (declaredReturnParameters );
346
+ List <SqlParameter > workParams = new ArrayList <SqlParameter >();
347
+ workParams .addAll (declaredReturnParams );
339
348
340
349
if (!this .metaDataProvider .isProcedureColumnMetaDataUsed ()) {
341
- workParameters .addAll (declaredParameters .values ());
342
- return workParameters ;
350
+ workParams .addAll (declaredParams .values ());
351
+ return workParams ;
343
352
}
344
353
345
354
Map <String , String > limitedInParamNamesMap = new HashMap <String , String >(this .limitedInParameterNames .size ());
346
- for (String limitedParameterName : this .limitedInParameterNames ) {
355
+ for (String limitedParamName : this .limitedInParameterNames ) {
347
356
limitedInParamNamesMap .put (
348
- this .metaDataProvider .parameterNameToUse (limitedParameterName ).toLowerCase (), limitedParameterName );
357
+ this .metaDataProvider .parameterNameToUse (limitedParamName ).toLowerCase (), limitedParamName );
349
358
}
350
359
351
360
for (CallParameterMetaData meta : this .metaDataProvider .getCallParameterMetaData ()) {
352
- String parNameToCheck = null ;
361
+ String paramNameToCheck = null ;
353
362
if (meta .getParameterName () != null ) {
354
- parNameToCheck = this .metaDataProvider .parameterNameToUse (meta .getParameterName ()).toLowerCase ();
363
+ paramNameToCheck = this .metaDataProvider .parameterNameToUse (meta .getParameterName ()).toLowerCase ();
355
364
}
356
- String parNameToUse = this .metaDataProvider .parameterNameToUse (meta .getParameterName ());
357
- if (declaredParameters .containsKey (parNameToCheck ) ||
365
+ String paramNameToUse = this .metaDataProvider .parameterNameToUse (meta .getParameterName ());
366
+ if (declaredParams .containsKey (paramNameToCheck ) ||
358
367
(meta .getParameterType () == DatabaseMetaData .procedureColumnReturn && returnDeclared )) {
359
- SqlParameter parameter ;
368
+ SqlParameter param ;
360
369
if (meta .getParameterType () == DatabaseMetaData .procedureColumnReturn ) {
361
- parameter = declaredParameters .get (getFunctionReturnName ());
362
- if (parameter == null && getOutParameterNames ().size () > 0 ) {
363
- parameter = declaredParameters .get (getOutParameterNames ().get (0 ).toLowerCase ());
370
+ param = declaredParams .get (getFunctionReturnName ());
371
+ if (param == null && getOutParameterNames ().size () > 0 ) {
372
+ param = declaredParams .get (getOutParameterNames ().get (0 ).toLowerCase ());
364
373
}
365
- if (parameter == null ) {
374
+ if (param == null ) {
366
375
throw new InvalidDataAccessApiUsageException (
367
376
"Unable to locate declared parameter for function return value - " +
368
- " add a SqlOutParameter with name \" " + getFunctionReturnName () +" \" " );
377
+ " add a SqlOutParameter with name '" + getFunctionReturnName () + "' " );
369
378
}
370
379
else {
371
- setFunctionReturnName (parameter .getName ());
380
+ setFunctionReturnName (param .getName ());
372
381
}
373
382
}
374
383
else {
375
- parameter = declaredParameters .get (parNameToCheck );
384
+ param = declaredParams .get (paramNameToCheck );
376
385
}
377
- if (parameter != null ) {
378
- workParameters .add (parameter );
386
+ if (param != null ) {
387
+ workParams .add (param );
379
388
if (logger .isDebugEnabled ()) {
380
- logger .debug ("Using declared parameter for: " +
381
- (parNameToUse == null ? getFunctionReturnName () : parNameToUse ) );
389
+ logger .debug ("Using declared parameter for ' " +
390
+ (paramNameToUse != null ? paramNameToUse : getFunctionReturnName ()) + "'" );
382
391
}
383
392
}
384
393
}
@@ -387,57 +396,57 @@ protected List<SqlParameter> reconcileParameters(List<SqlParameter> parameters)
387
396
if (!isFunction () && !isReturnValueRequired () &&
388
397
this .metaDataProvider .byPassReturnParameter (meta .getParameterName ())) {
389
398
if (logger .isDebugEnabled ()) {
390
- logger .debug ("Bypassing metadata return parameter for: " + meta .getParameterName ());
399
+ logger .debug ("Bypassing metadata return parameter for ' " + meta .getParameterName () + "'" );
391
400
}
392
401
}
393
402
else {
394
403
String returnNameToUse =(StringUtils .hasLength (meta .getParameterName ()) ?
395
- parNameToUse : getFunctionReturnName ());
396
- workParameters .add (this .metaDataProvider .createDefaultOutParameter (returnNameToUse , meta ));
404
+ paramNameToUse : getFunctionReturnName ());
405
+ workParams .add (this .metaDataProvider .createDefaultOutParameter (returnNameToUse , meta ));
397
406
if (isFunction ()) {
398
407
setFunctionReturnName (returnNameToUse );
399
- outParameterNames .add (returnNameToUse );
408
+ outParamNames .add (returnNameToUse );
400
409
}
401
410
if (logger .isDebugEnabled ()) {
402
- logger .debug ("Added metadata return parameter for: " + returnNameToUse );
411
+ logger .debug ("Added metadata return parameter for ' " + returnNameToUse + "'" );
403
412
}
404
413
}
405
414
}
406
415
else {
407
416
if (meta .getParameterType () == DatabaseMetaData .procedureColumnOut ) {
408
- workParameters .add (this .metaDataProvider .createDefaultOutParameter (parNameToUse , meta ));
409
- outParameterNames .add (parNameToUse );
417
+ workParams .add (this .metaDataProvider .createDefaultOutParameter (paramNameToUse , meta ));
418
+ outParamNames .add (paramNameToUse );
410
419
if (logger .isDebugEnabled ()) {
411
- logger .debug ("Added metadata out parameter for: " + parNameToUse );
420
+ logger .debug ("Added metadata out parameter for ' " + paramNameToUse + "'" );
412
421
}
413
422
}
414
423
else if (meta .getParameterType () == DatabaseMetaData .procedureColumnInOut ) {
415
- workParameters .add (this .metaDataProvider .createDefaultInOutParameter (parNameToUse , meta ));
416
- outParameterNames .add (parNameToUse );
424
+ workParams .add (this .metaDataProvider .createDefaultInOutParameter (paramNameToUse , meta ));
425
+ outParamNames .add (paramNameToUse );
417
426
if (logger .isDebugEnabled ()) {
418
- logger .debug ("Added metadata in out parameter for: " + parNameToUse );
427
+ logger .debug ("Added metadata in out parameter for ' " + paramNameToUse + "'" );
419
428
}
420
429
}
421
430
else {
422
431
if (this .limitedInParameterNames .isEmpty () ||
423
- limitedInParamNamesMap .containsKey (parNameToUse .toLowerCase ())) {
424
- workParameters .add (this .metaDataProvider .createDefaultInParameter (parNameToUse , meta ));
432
+ limitedInParamNamesMap .containsKey (paramNameToUse .toLowerCase ())) {
433
+ workParams .add (this .metaDataProvider .createDefaultInParameter (paramNameToUse , meta ));
425
434
if (logger .isDebugEnabled ()) {
426
- logger .debug ("Added metadata in parameter for: " + parNameToUse );
435
+ logger .debug ("Added metadata in parameter for ' " + paramNameToUse + "'" );
427
436
}
428
437
}
429
438
else {
430
439
if (logger .isDebugEnabled ()) {
431
440
logger .debug ("Limited set of parameters " + limitedInParamNamesMap .keySet () +
432
- " skipped parameter for: " + parNameToUse );
441
+ " skipped parameter for ' " + paramNameToUse + "'" );
433
442
}
434
443
}
435
444
}
436
445
}
437
446
}
438
447
}
439
448
440
- return workParameters ;
449
+ return workParams ;
441
450
}
442
451
443
452
/**
@@ -626,11 +635,13 @@ public String createCallString() {
626
635
* Build the parameter binding fragment.
627
636
* @param parameter call parameter
628
637
* @return parameter binding fragment
638
+ * @since 4.2
629
639
*/
630
640
protected String createParameterBinding (SqlParameter parameter ) {
631
641
if (isNamedBinding ()) {
632
642
return parameter .getName () + " => ?" ;
633
- } else {
643
+ }
644
+ else {
634
645
return "?" ;
635
646
}
636
647
}
0 commit comments