I will get to it sometime within the next week. Have some higher priority items to address first
Best Lance On Dec 3, 2012, at 3:17 AM, Frank Ding wrote: > Hi Lance, > Thanks for your clarification. I created the test case you requested and > attached it in this email. Please review it. By the way, the new Oracle bug > (internal id 2376620) submitted by me several days ago seems not having been > reviewed. Could you also help me on this? > > Best regards, > Frank > > > On 11/30/2012 8:40 PM, Lance Andersen - Oracle wrote: >> Hi Frank, >> >> Thank you for the email. No we do not want tests that require database >> access in jtreg. >> >> What I was trying to say, albeit not probably as clear as it could have been >> is that it would be helpful to provide a complete example and to use Java DB >> as the database if it is a generic data access issue as while it is not a >> required part of the Java SE specification, we do provide it with the Oracle >> JDK so it makes it easier to test against for developers vs finding an >> instance of DB2, Sybase or even Oracle to test against. >> >> Best >> Lance >> On Nov 30, 2012, at 12:26 AM, Frank Ding wrote: >> >>> Hi Lance, >>> Sorry for late response and thanks for your comment. You mean I can write >>> a jtreg test case that connects to Java DB? I can do that. >>> >>> Best regards, >>> Frank >>> >>> On 11/13/2012 10:13 PM, Lance Andersen - Oracle wrote: >>>> Hi Frank, >>>> >>>> >>>> Thank you for the note >>>> If you could in the future, please provide a complete test program to >>>> repro the issue as it would save time with the reviews. Ideally if the >>>> issue is not database specific it would be good to leverage Java DB as it >>>> is included within Oracle JDK >>>> >>>> I will look at this sometime this week >>>> >>>> Best >>>> Lance >>>> On Nov 12, 2012, at 9:25 PM, Frank Ding wrote: >>>> >>>>> Hi Lance >>>>> Thanks for your quick response. Please find the bug info below. >>>>> >>>>> The problem: >>>>> When CachedRowSetImpl.acceptChanges() is called, incorrect number of >>>>> conflicts, if any, is reported. The number of conflicts is the actual >>>>> number of existing rows in database, which is the size of variable >>>>> 'status' defined in CachedRowSetWriter.writeData(). It's not the >>>>> conflict number that is supposed to be. >>>>> >>>>> Test case: >>>>> The bug can be easily manifested in all SQL server environment. Here >>>>> take PostgreSQL for example. >>>>> 1. The sql script to create a table >>>>> CREATE TABLE ressystem.roomdescription >>>>> ( >>>>> roomdescription_id serial NOT NULL, >>>>> roomdescription character varying NOT NULL, >>>>> CONSTRAINT roomdescription_pkey PRIMARY KEY (roomdescription_id) >>>>> ) >>>>> >>>>> 2. Manually insert 3 rows >>>>> (1, "Test 1") >>>>> (2, "Test 2") >>>>> (3, "Test 3") >>>>> >>>>> 3. Create a Java class that connects the established database and then >>>>> execute the following code snippet. >>>>> String query = "select roomdescription_id, roomdescription from >>>>> ressystem.roomdescription"; >>>>> Object[] values = {2, "Test2"}; >>>>> rs.setCommand(query); >>>>> rs.execute(conn); >>>>> rs.moveToInsertRow(); >>>>> for(int i=0; i<values.length; i++) { >>>>> rs.updateObject(i+1,values[i]); >>>>> } >>>>> rs.insertRow(); >>>>> rs.moveToCurrentRow(); >>>>> rs.acceptChanges(conn); >>>>> >>>>> 4. An exception occurs with following output. >>>>> javax.sql.rowset.spi.SyncProviderException: 4conflicts while synchronizing >>>>> at >>>>> com.sun.rowset.internal.CachedRowSetWriter.writeData(CachedRowSetWriter.java:412) >>>>> at >>>>> com.sun.rowset.CachedRowSetImpl.acceptChanges(CachedRowSetImpl.java:880) >>>>> >>>>> 5. In fact, there is only one conflicting row but 4 were reported. >>>>> >>>>> Best regards, >>>>> Frank >>>>> >>>>> On 11/9/2012 7:41 PM, Lance Andersen - Oracle wrote: >>>>>> Frank, >>>>>> >>>>>> If you can please post the bug info here, I will take a look at your >>>>>> patch >>>>>> >>>>>> Best >>>>>> Lance >>>>>> On Nov 8, 2012, at 10:01 PM, Frank Ding wrote: >>>>>> >>>>>>> Hi guys, >>>>>>> We discovered a bug in CachedRowSetWriter.writeData method where >>>>>>> incorrect number of conflicts is reported. I searched in Oracle bug >>>>>>> database and no similar record was found. So I submitted a new one >>>>>>> whose internal review ID is 2376620. A test case with code is >>>>>>> illustrated in the bug submission that leverages PostgreSQL server but >>>>>>> the issue is platform independent and easy to reproduce. >>>>>>> I provided a patch review, available @ >>>>>>> http://cr.openjdk.java.net/~dingxmin/2376620/webrev.01/ >>>>>>> Is there anybody who is interested in patch and can also review bug >>>>>>> 2376620? Your reply is appreciated. >>>>>>> >>>>>>> Best regards, >>>>>>> Frank >>>>>>> >>>>>>> >>>>>> Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 >>>>>> Oracle Java Engineering >>>>>> 1 Network Drive >>>>>> Burlington, MA 01803 >>>>>> lance.ander...@oracle.com >>>>>> >>>> >>>> Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 >>>> Oracle Java Engineering >>>> 1 Network Drive >>>> Burlington, MA 01803 >>>> lance.ander...@oracle.com >>>> >> >> >> Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 >> Oracle Java Engineering >> 1 Network Drive >> Burlington, MA 01803 >> lance.ander...@oracle.com >> >
/* * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * Portions Copyright (c) 2012 IBM Corporation */ import com.sun.rowset.CachedRowSetImpl; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import javax.sql.rowset.CachedRowSet; public class DerbyTest { private static String DERBY_DB_FILE = "derbydb"; private static Connection getConnection() throws Exception { String driver = "org.apache.derby.jdbc.EmbeddedDriver"; String url = "jdbc:derby:" + DERBY_DB_FILE + ";create=true"; Connection conn; try { Class.forName(driver); conn = DriverManager.getConnection(url); } catch (Exception e) { throw e; } return conn; } private static void createTable(Connection conn) throws SQLException { Statement statement = conn.createStatement(); try { statement.execute("DROP TABLE mytable"); } catch (SQLException ex) { // ignore exception when mytable doesn't exist } String createTableSQL = "CREATE TABLE mytable" + "(id INT NOT NULL PRIMARY KEY," + "description VARCHAR(30) NOT NULL)"; statement.executeUpdate(createTableSQL); statement.close(); } private static void prepareData(Connection conn) throws SQLException { Statement statement = conn.createStatement(); String insertTableData = "INSERT INTO mytable(id,description)" + "VALUES(1, 'r1')"; statement.executeUpdate(insertTableData); insertTableData = "INSERT INTO mytable(id,description)" + "VALUES(2, 'r2')"; statement.executeUpdate(insertTableData); statement.close(); } private static void createConflict(Connection conn) throws SQLException { CachedRowSet rs = new CachedRowSetImpl(); rs.setReadOnly(false); String querySql = "SELECT id, description FROM mytable"; rs.setCommand(querySql); rs.execute(conn); rs.moveToInsertRow(); rs.updateObject(1, 2); rs.updateObject(2, "new str"); rs.insertRow(); rs.moveToCurrentRow(); rs.acceptChanges(conn); } public static void main(String[] args) throws Exception { Connection conn = getConnection(); createTable(conn); prepareData(conn); try { createConflict(conn); } catch (SQLException ex) { String errMsg = ex.getMessage(); if (!errMsg.startsWith("1")) { System.out.println("The conflict number should be 1 but now " + "it is " + errMsg); throw ex; } } conn.close(); } }
>
Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 lance.ander...@oracle.com