[ https://issues.apache.org/jira/browse/DERBY-2462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12491683 ]
A B commented on DERBY-2462: ---------------------------- Thank you _very_ much for the detailed analysis, Dag. I feel better about the "safety" of your v3 changes after reading your previous comment. > Maybe a (even more) generally useful method could be: > > public boolean isHeldAfterCommit() throws StandardException > { > return (scan_state == SCAN_HOLD_INIT || > scan_state == SCAN_HOLD_INPROGRESS); > } > > that is, if this returns true, the scan can always be reopened > (although in the case at hand, only the second state tested for may > occur as shown above). > > What do you think? +1, I like this idea even better. Thank you for the suggestion and for your willingness to implement it. > I manually modified the test to verify that for all three variants (join, > distinct and cursor), > this happened. If you this it is still advisable, I can add those tests cases > to SpillHash. If it's not too much work I think this would be good. I'm sure there are tests elsewhere to check the general concept of cursor holdability across commits, but it might be nice to have a test case for the specific scenario of a spilled DiskHashtable. > If you agree, I will make a version of the patch with the new > isHeldAfterCommit outlined above. Sounds great. Thanks again for your continued work with this, and for your prompt consideration of my feedback. > org.apache.derby.impl.store.access.BackingStoreHashTableFromScan does not > honor ResultSet holdability > ----------------------------------------------------------------------------------------------------- > > Key: DERBY-2462 > URL: https://issues.apache.org/jira/browse/DERBY-2462 > Project: Derby > Issue Type: Bug > Components: Store > Affects Versions: 10.1.1.0, 10.1.2.1, 10.1.3.1, 10.2.1.6, 10.2.2.0 > Environment: Test under Windows Vista, Java 1.4.2_13 > Reporter: Jeff Clary > Assigned To: Dag H. Wanvik > Attachments: DERBY-2462-1.diff, DERBY-2462-1.stat, DERBY-2462-2.diff, > DERBY-2462-2.stat, DERBY-2462-3.diff, DERBY-2462-3.stat, > DerbyHoldabilityTest.java > > > After an unrelated statement on the same connection commits, and after some > number of successful calls to ResultSet.next(), a subsequent call to > ResultSet.next() throws an SQLException with a message like: The heap > container with container id Container(-1, 1173965368428) is closed. This > seems to be related to the hard-coded passing of false to the super in the > constructor of > org.apache.derby.impl.store.access.BackingStoreHashTableFromScan. > Steps to reproduce: > 1. Execute a statement on a connection that returns a result set. > 2. Execute a second statement on the same connection that modifies the > database and commits. > 3. Call next() on the first result set until the exception is thrown. > Note that the number of rows that can be successfully retrieved from the > result set seems to be related to the amount of data per row. Increasing the > number of columns in the result set or the length of the columns causes the > exception to be taken sooner. > The attached test program demonstrates the issue. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.