Issue Details (XML | Word | Printable)

Key: DERBY-585
Type: Bug Bug
Status: Closed Closed
Resolution: Duplicate
Priority: Major Major
Assignee: Bryan Pendleton
Reporter: Thierry de Pretto
Votes: 2
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Derby

ResultSet overflows when rows are inserted.

Created: 23/Sep/05 08:39 PM   Updated: 13/Dec/07 09:04 AM
Return to search
Component/s: JDBC, Network Client
Affects Version/s: 10.1.1.0
Fix Version/s: 10.2.1.6

Time Tracking:
Not Specified

Environment: Red Hat Enterprise Linux ES release 3 (Taroon Update 4), intel

Resolution Date: 15/Apr/06 09:54 AM


 Description  « Hide
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.


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
No work has yet been logged on this issue.