[ http://issues.apache.org/jira/browse/DERBY-585?page=comments#action_12374545 ]
Knut Anders Hatlen commented on DERBY-585: ------------------------------------------ I ran the test on 10.1.2.1 and got the exception after about 32000 iterations. I don't see the exception on trunk, so I think it should be OK to close this issue, unless someone wants to port the fix to 10.1. > ResultSet overflows when rows are inserted. > ------------------------------------------- > > Key: DERBY-585 > URL: http://issues.apache.org/jira/browse/DERBY-585 > Project: Derby > Type: Bug > Components: JDBC, Network Client > Versions: 10.1.1.0 > Environment: Red Hat Enterprise Linux ES release 3 (Taroon Update 4), intel > Reporter: Thierry de Pretto > Assignee: Bryan Pendleton > > Derby jdbc driver doesn't seem to be able to find the end of a > ResultSet when rows are inserted while the ResultSet is walked. For > instance, the execution of the code > import java.sql.Connection; > import java.sql.Statement; > import java.sql.PreparedStatement; > import java.sql.SQLException; > import java.sql.ResultSet; > import java.sql.DriverManager; > public class Test > { > public static void main(String[] pArgs) throws Exception > { > Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); > String url = "jdbc:derby://localhost:1527/sample"; > // > Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); > // String url = "jdbc:derby:/tmp/sample;create=true"; > Connection conn = DriverManager.getConnection(url); > Statement s = conn.createStatement(); > try > { > s.execute("drop table q"); > } > catch (Exception e) > { > System.out.println(e.toString()); > } > try > { > s.execute("create table q(q integer)"); > } > catch (Exception e) > { > System.out.println(e.toString()); > } > PreparedStatement p = conn.prepareStatement("insert into q values > (1)"); > // for (int i = 0; i<=10; i++) { p.executeUpdate();} // it works for > small table. > for (int i = 0; i<=10000; i++) { p.executeUpdate();} // it never ends > for big table. > conn.commit(); > ResultSet rs = s.executeQuery("SELECT q FROM q"); > System.out.println("q, w"); > while (rs.next()) { > int q = rs.getInt("q"); > System.out.println(""+ q); > conn.createStatement().execute("insert into q values (2)"); > } > rs.close(); > s.close(); > } > } > ends with exception > Exception in thread "main" org.apache.derby.client.am.SqlException: Run out > of sections to use,sections limited to 32k currently > at org.apache.derby.client.am.SectionManager.getSection(Unknown Source) > at org.apache.derby.client.am.SectionManager.getDynamicSection(Unknown > Source) > at org.apache.derby.client.am.Statement.flowExecute(Unknown Source) > at org.apache.derby.client.am.Statement.executeX(Unknown Source) > at org.apache.derby.client.am.Statement.execute(Unknown Source) > at Test.main(Test.java:95) > if table q is big enough because ResultSet.next() seems to retrieve > the rows inserted after the select execution. Note that it also occurs > for join statement. -- 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
