Hello,

As I am sure most of you are aware Kathy and I have been working on DERBY-213 (http://issues.apache.org/jira/browse/DERBY-213) for while now. We have recently put the finishing touches on a promising patch when I ran into a little snag. Somehow while looking over the code I managed to overlook this comment until recently:

/*
* From Connection.setAutoCommit() javadoc:
* The commit occurs when the statement completes or the next execute occurs, whichever comes first. * In the case of statements returning a ResultSet object, *the statement completes when the * last row of the ResultSet object has been retrieved* or the ResultSet object has been closed.
*/

This may or may not be a problem. The nature of our change to the client side code is to make sure the closeX() method is only called on errors or explicit close requests, a closed server side ResultSet or exceptions rather then the first time the .next() method returns false. However at the moment all of the autocommit logic is in the closeX() method, so by altering when the closeX() function is called we are altering the autocommit logic. This comment would seem to indicate that we must by necessity commit any changes to the ResultSet when the last row of the ResultSet is retrieved but I'm not sure what there is to commit. I believe all of the .getXXX() calls to the ResultSet are readOnly, .updateXXX() calls must be finalized with the UpdateRow() method before the .next() method is called or the updates will be discarded and insert functionality is not supported by the Client Driver.

So are we doing any harm by releasing this patch or is this the fix we are looking for? The proposed changes do not seem to cause any problems in the derbyall suite but this may be a lapse in the test suite rather then good design decisions on our part.

Philip

Reply via email to