Skip to content

SimpleJdbcCall does not throw an Exception for a missing stored procedure if the name does not contain "." [SPR-13669] #18244

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
spring-projects-issues opened this issue Nov 11, 2015 · 1 comment
Assignees
Labels
in: data Issues in data modules (jdbc, orm, oxm, tx) type: bug A general bug
Milestone

Comments

@spring-projects-issues
Copy link
Collaborator

spring-projects-issues commented Nov 11, 2015

Attila Király opened SPR-13669 and commented

Try these with an empty (for example in memory, derby) database:

new SimpleJdbcCall(jdbcTemplate).withProcedureName("bar").compile();
new SimpleJdbcCall(jdbcTemplate).withProcedureName("foo.bar").compile();

The first one passes but the second one throws an exception (below). I think both should throw an exception (as there are no stored procedures with those names in the database).

The issue seems to be in GenericCallMetaDataProvider.processProcedureColumns() (code is the same in 4.0.x and master branches). It throws an exception in case more than one sprocs are found and also in case no sproc was found and the name contains a "."
It seems it is missing an else branch to throw an exception for other not found sprocs as well.

org.springframework.dao.InvalidDataAccessApiUsageException: Unable to determine the correct call signature for FOO.BAR - package name should be specified separately using '.withCatalogName("FOO")'
	at org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider.processProcedureColumns(GenericCallMetaDataProvider.java:328)
	at org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider.initializeWithProcedureColumnMetaData(GenericCallMetaDataProvider.java:104)
	at org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory$1.processMetaData(CallMetaDataProviderFactory.java:128)
	at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:290)
	at org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory.createMetaDataProvider(CallMetaDataProviderFactory.java:71)
	at org.springframework.jdbc.core.metadata.CallMetaDataContext.initializeMetaData(CallMetaDataContext.java:269)
	at org.springframework.jdbc.core.simple.AbstractJdbcCall.compileInternal(AbstractJdbcCall.java:279)
	at org.springframework.jdbc.core.simple.AbstractJdbcCall.compile(AbstractJdbcCall.java:266)

The reason why it would be good to have an early exception is to catch missing stored procedures during application startup (when the SimpleJdbcCall is created and compiled) instead only when it is used (sproc is called).


Affects: 4.0.9, 4.2.2

Issue Links:

Referenced from: commits cc06183

@spring-projects-issues
Copy link
Collaborator Author

Juergen Hoeller commented

Good catch - we were indeed missing an else clause for that check there...

Juergen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
in: data Issues in data modules (jdbc, orm, oxm, tx) type: bug A general bug
Projects
None yet
Development

No branches or pull requests

2 participants