|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2014 the original author or authors. |
|
|
|
* Copyright 2002-2015 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. |
|
|
|
@ -75,7 +75,7 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
} |
|
|
|
} |
|
|
|
catch (SQLException ex) { |
|
|
|
catch (SQLException ex) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.supportsCatalogsInProcedureCalls' - " + ex.getMessage()); |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.supportsCatalogsInProcedureCalls': " + ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
try { |
|
|
|
try { |
|
|
|
@ -83,7 +83,7 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
} |
|
|
|
} |
|
|
|
catch (SQLException ex) { |
|
|
|
catch (SQLException ex) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.supportsSchemasInProcedureCalls' - " + ex.getMessage()); |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.supportsSchemasInProcedureCalls': " + ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
try { |
|
|
|
try { |
|
|
|
@ -91,7 +91,7 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
} |
|
|
|
} |
|
|
|
catch (SQLException ex) { |
|
|
|
catch (SQLException ex) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.storesUpperCaseIdentifiers' - " + ex.getMessage()); |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.storesUpperCaseIdentifiers': " + ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
try { |
|
|
|
try { |
|
|
|
@ -99,7 +99,7 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
} |
|
|
|
} |
|
|
|
catch (SQLException ex) { |
|
|
|
catch (SQLException ex) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
if (logger.isWarnEnabled()) { |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.storesLowerCaseIdentifiers' - " + ex.getMessage()); |
|
|
|
logger.warn("Error retrieving 'DatabaseMetaData.storesLowerCaseIdentifiers': " + ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -309,8 +309,9 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
/** |
|
|
|
/** |
|
|
|
* Process the procedure column metadata |
|
|
|
* Process the procedure column metadata |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private void processProcedureColumns(DatabaseMetaData databaseMetaData, String catalogName, String schemaName, String procedureName) { |
|
|
|
private void processProcedureColumns( |
|
|
|
ResultSet procs = null; |
|
|
|
DatabaseMetaData databaseMetaData, String catalogName, String schemaName, String procedureName) { |
|
|
|
|
|
|
|
|
|
|
|
String metaDataCatalogName = metaDataCatalogNameToUse(catalogName); |
|
|
|
String metaDataCatalogName = metaDataCatalogNameToUse(catalogName); |
|
|
|
String metaDataSchemaName = metaDataSchemaNameToUse(schemaName); |
|
|
|
String metaDataSchemaName = metaDataSchemaNameToUse(schemaName); |
|
|
|
String metaDataProcedureName = procedureNameToUse(procedureName); |
|
|
|
String metaDataProcedureName = procedureNameToUse(procedureName); |
|
|
|
@ -318,6 +319,8 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
logger.debug("Retrieving metadata for " + metaDataCatalogName + "/" + |
|
|
|
logger.debug("Retrieving metadata for " + metaDataCatalogName + "/" + |
|
|
|
metaDataSchemaName + "/" + metaDataProcedureName); |
|
|
|
metaDataSchemaName + "/" + metaDataProcedureName); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ResultSet procs = null; |
|
|
|
try { |
|
|
|
try { |
|
|
|
procs = databaseMetaData.getProcedures(metaDataCatalogName, metaDataSchemaName, metaDataProcedureName); |
|
|
|
procs = databaseMetaData.getProcedures(metaDataCatalogName, metaDataSchemaName, metaDataProcedureName); |
|
|
|
List<String> found = new ArrayList<String>(); |
|
|
|
List<String> found = new ArrayList<String>(); |
|
|
|
@ -326,16 +329,24 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { |
|
|
|
"." + procs.getString("PROCEDURE_NAME")); |
|
|
|
"." + procs.getString("PROCEDURE_NAME")); |
|
|
|
} |
|
|
|
} |
|
|
|
procs.close(); |
|
|
|
procs.close(); |
|
|
|
|
|
|
|
|
|
|
|
if (found.size() > 1) { |
|
|
|
if (found.size() > 1) { |
|
|
|
throw new InvalidDataAccessApiUsageException("Unable to determine the correct call signature - " + |
|
|
|
throw new InvalidDataAccessApiUsageException( |
|
|
|
"multiple procedures/functions/signatures for " + metaDataProcedureName + " found " + found); |
|
|
|
"Unable to determine the correct call signature - multiple " + |
|
|
|
|
|
|
|
"procedures/functions/signatures for '" + metaDataProcedureName + "': found " + found); |
|
|
|
} |
|
|
|
} |
|
|
|
if (found.size() < 1) { |
|
|
|
else if (found.isEmpty()) { |
|
|
|
if (metaDataProcedureName.contains(".") && !StringUtils.hasText(metaDataCatalogName)) { |
|
|
|
if (metaDataProcedureName.contains(".") && !StringUtils.hasText(metaDataCatalogName)) { |
|
|
|
String packageName = metaDataProcedureName.substring(0, metaDataProcedureName.indexOf(".")); |
|
|
|
String packageName = metaDataProcedureName.substring(0, metaDataProcedureName.indexOf(".")); |
|
|
|
throw new InvalidDataAccessApiUsageException("Unable to determine the correct call signature for " + |
|
|
|
throw new InvalidDataAccessApiUsageException( |
|
|
|
metaDataProcedureName + " - package name should be specified separately using " + |
|
|
|
"Unable to determine the correct call signature for '" + metaDataProcedureName + |
|
|
|
"'.withCatalogName(\"" + packageName + "\")'"); |
|
|
|
"' - package name should be specified separately using '.withCatalogName(\"" + |
|
|
|
|
|
|
|
packageName + "\")'"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
throw new InvalidDataAccessApiUsageException( |
|
|
|
|
|
|
|
"Unable to determine the correct call signature - no " + |
|
|
|
|
|
|
|
"procedure/function/signature for '" + metaDataProcedureName + "'"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|