[ http://issues.apache.org/jira/browse/DERBY-1087?page=all ]
Fernanda Pizzorno updated DERBY-1087: ------------------------------------- Attachment: derby-1087v2.diff derby-1087v2.stat Patch derby-1087v2.diff addresses the review comments. 1. I changed java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java to use a call to cursorTargetTable() method instead of using the cursorTargetTable attribute directly. I chose not to use forUpdate() as suggested because it is too generic. 2. Removed the test from derbynetclientmats. 3. Made 4 tests methods and added javadoc to the 4 of them. _______________________ Andreas wrote: Review: The patch looks good, here are some minor comments: 1. In java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java, consider using a call to forUpdate() method instead of using the cursorTargetTable attribute directly. 2. Testing: I do not think the testcase should be added to derbynetclientmats, since it is already added to jdbcapi (it is not really a network client change) 3. Testing: Consider making 4 test methods instead of testing all variants in the same testmethod. Now, the test fails at the first case, and I do not get to see the results of the other variants. Also please add javadoc to all testcase methods. _______________________ > Updatable result sets behave different depending on the type of query used to > generate the result set > ----------------------------------------------------------------------------------------------------- > > Key: DERBY-1087 > URL: http://issues.apache.org/jira/browse/DERBY-1087 > Project: Derby > Type: Bug > Components: JDBC, SQL > Reporter: Fernanda Pizzorno > Assignee: Fernanda Pizzorno > Attachments: derby-1087.diff, derby-1087.stat, derby-1087v2.diff, > derby-1087v2.stat > > Running the following code with different queries in the first statement > produces different results. > Where t1 has two columns: "a" of type int is the primary key, and "b" of type > varchar(50); and contains 10 rows of data. > Statement st1 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, > ResultSet.CONCUR_UPDATABLE); > Statement st2 = conn.createStatement(); > > ResultSet rs = st1.executeQuery("SELECT a, b FROM t1"); > rs.next(); > rs.next(); > st2.executeUpdate("UPDATE t1 SET a = a + 20 WHERE a = " + > rs.getInt(1)); > try { > rs.updateInt(1, rs.getInt(1) + 30); > rs.updateRow(); > } catch (SQLException se) { > System.out.println(se.getMessage()); > } > rs.close(); > > rs = st2.executeQuery("SELECT a FROM t1"); > while(rs.next()) { > System.out.println("A = " + rs.getInt(1)); > } > rs.close(); > > st2.close(); > st1.close(); > If the first query is "select a, b from t1", the output will be: > A = 1 > A = 3 > A = 4 > A = 5 > A = 6 > A = 7 > A = 8 > A = 9 > A = 10 > A = 32 > If the first query is "SELECT a, b FROM t1 WHERE a <= 5", the output will be: > Cursor 'SQLCUR0' is not on a row. > A = 1 > A = 3 > A = 4 > A = 5 > A = 6 > A = 7 > A = 8 > A = 9 > A = 10 > A = 22 > If the first query is "SELECT a FROM t1", the output will be: > Cursor 'SQLCUR0' is not on a row. > A = 1 > A = 3 > A = 4 > A = 5 > A = 6 > A = 7 > A = 8 > A = 9 > A = 10 > A = 22 -- 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