db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel John Debrunner (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-501) Client and embedded drivers differ on invoking a procedure that returns a single Dynamic resultSet using CallableStatement.executeQuery()
Date Fri, 26 May 2006 16:33:31 GMT
    [ http://issues.apache.org/jira/browse/DERBY-501?page=comments#action_12413493 ] 

Daniel John Debrunner commented on DERBY-501:
---------------------------------------------

The patch is not correct. It is obtaining the count of result sets directly from the raw data
using:

resultSet.getActivation().getDynamicResults()

The list of returned result sets may include result sets that will not be returned to the
application.
Thus the count in the new code could be three, whereas the actual return count to the application
would be one.

See EmbedStatement.processDynamicResults for the various reasons a result set may not be returned
to the application.

The rollback, I agree matches the previous behaviour, the case I was thinking of was a DML
statement executed within a procedure that returned multiple result sets and was executed
using executeQuery. In that case an exception is thrown and the results of the DML within
the procedure should be rolled back.

> Client and embedded drivers differ on invoking a procedure that returns a single Dynamic
resultSet using CallableStatement.executeQuery()
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>          Key: DERBY-501
>          URL: http://issues.apache.org/jira/browse/DERBY-501
>      Project: Derby
>         Type: Bug

>   Components: JDBC
>     Versions: 10.1.1.0, 10.0.2.1
>  Environment: All Platforms
>     Reporter: Satheesh Bandaram
>     Assignee: Knut Anders Hatlen
>  Attachments: Test.java, Test1.java, derby-501-v1.diff, derby-501-v1.stat
>
> It is possible to invoke a stored procedure that returns a single dynamic result using
CallableStatement.executeQuery using Derby Client. The embedded JDBC driver, however, throws
an exception like:
> Test starting ...url = jdbc:derby:tdb
> Exception in thread "main" ERROR X0Y78: Statement.executeQuery() cannot be called with
a statement that returns a row count.
>         at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:301)
>         at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:434)
>         at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1142)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1323)
>         at org.apache.derby.impl.jdbc.EmbedCallableStatement.executeStatement(EmbedCallableStatement.java:109)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeQuery(EmbedPreparedStatement.java:241)
>         at Test1.main(Test1.java:26)
> I think the embedded driver behavior is incorrect here, though I would double check that
the JDBC spec says. 
> To reproduce the problem,
> 1) Create a database called 'tdb' and a table called COMPANY as create table COMPANY(name
char(10));
> 2) Insert two rows as: insert into COMPANY values 'IBM', 'SUN';
> 3) register a procedure as:
> CREATE PROCEDURE GETALLCOMPANIES() PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA
DYNAMIC RESULT SETS 1 EXTERNAL NAME 'Test.getAllCompanies'
> 4) Set server classpath
> 5) Compile two attached java programs, Test and Test1
> 6) Execute 'java Test1 1' to run as a client program and 'java Test1 2' to run as an
embedded program.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message