[
https://issues.apache.org/jira/browse/DERBY-5425?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13456885#comment-13456885
]
Knut Anders Hatlen commented on DERBY-5425:
-------------------------------------------
The patch merged cleanly to 10.9 and 10.8. However, I'm seeing failures in the
compatibility test on the 10.8 branch. I won't backport until I understand why
it's failing.
> 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.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