db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] [Closed] (DERBY-5425) Updateable holdable ResultSet terminates early after 65638 updates
Date Tue, 18 Sep 2012 12:35:07 GMT

     [ https://issues.apache.org/jira/browse/DERBY-5425?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Knut Anders Hatlen closed DERBY-5425.
-------------------------------------

          Resolution: Fixed
       Fix Version/s: 10.9.1.1
                      10.8.2.3
    Issue & fix info: Repro attached  (was: Newcomer,Repro attached)

The compatibility tests failed the first two times I ran it on the 10.8 branch. It varied
which combinations failed, and I couldn't see what caused it, only that some of the test cases
failed with "database not found" errors. However, I've now re-run the compatibility tests
many times without seeing the error again, so I'm assuming it was just a temporary environment
problem and/or one of the instabilities in the tests' sub-process handling that we've cleaned
up on trunk.

Merged to 10.9 with revision 1387111.
Merged to 10.8 with revision 1387112.
                
> Updateable holdable ResultSet terminates early after 65638 updates
> ------------------------------------------------------------------
>
>                 Key: DERBY-5425
>                 URL: https://issues.apache.org/jira/browse/DERBY-5425
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>         Environment: ------------------ Java Information ------------------
> Java Version:    1.6.0_26
> Java Vendor:     Sun Microsystems Inc.
> Java home:       D:\Program Files (x86)\Java\jre6
> Java classpath:  .;..\derby.jar
> OS name:         Windows 7
> OS architecture: x86
> OS version:      6.1
> Java user name:  Andrew
> Java user home:  D:\Users\Andrew
> Java user dir:   E:\workspace\DerbyBug\bin
> java.specification.name: Java Platform API Specification
> java.specification.version: 1.6
> java.runtime.version: 1.6.0_26-b03
> --------- Derby Information --------
> JRE - JDBC: Java SE 6 - JDBC 4.0
> [E:\workspace\DerbyBug\derby.jar] 10.7.1.1 - (1040133)
> ------------------------------------------------------
> ----------------- Locale Information -----------------
> ------------------------------------------------------
>            Reporter: Andrew Johnson
>            Assignee: Knut Anders Hatlen
>              Labels: derby_triage10_9
>             Fix For: 10.8.2.3, 10.9.1.1, 10.10.0.0
>
>         Attachments: d5425-1a.diff.txt, DerbyBug.java, holdable-row-holders.diff.txt
>
>
> After at least 65638 updates to an indexed column have been done via an updateable holdable
resultset and the transaction is committed ResultSet.next() returns false even if more rows
exist to be returned.
> The following program should output "Total: 100000" but instead outputs "Total: 65638".
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
> public class DerbyBug {
> 	public static void main(String[] args) throws ClassNotFoundException, SQLException {
> 		Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
> 		Connection conn = DriverManager.getConnection("jdbc:derby:TestDB;create=true");
> 		conn.setAutoCommit(false);
> 		
> 		Statement createStmt = conn.createStatement();
> 		createStmt.executeUpdate("CREATE TABLE test (a INT)");
> 		createStmt.executeUpdate("CREATE INDEX idxa ON test(a)");
> 		createStmt.close();
> 		
> 		PreparedStatement insertStmt = conn.prepareStatement("INSERT INTO test(a) VALUES (?)");
> 		
> 		for (int i = 0; i < 100000; ++i) {
> 			insertStmt.setInt(1, i);
> 			insertStmt.executeUpdate();
> 		}
> 		insertStmt.close();
> 		
> 		conn.commit();
> 		
> 		Statement selectStmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
> 		ResultSet rs = selectStmt.executeQuery("SELECT a FROM test FOR UPDATE");
> 		
> 		int count = 0;
> 		while (rs.next()) {
> 			rs.updateInt(1, count);
> 			rs.updateRow();
> 			count++;
> 			
> 			conn.commit();
> 		}
> 		
> 		rs.close();
> 		selectStmt.close();
> 		conn.commit();
> 		conn.close();
> 		System.out.println("Total: " + count);
> 		
> 		try {
> 			DriverManager.getConnection("jdbc:derby:;shutdown=true");
> 		} catch (SQLException e) {
> 			if (!e.getSQLState().equals("XJ015")) {
> 				throw e;
> 			}
> 		}
> 	}
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message