Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6266305

SyncResolver.nextConflict() didn't behave correctly when the cursor is at the last row.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 6
    • 5.0
    • core-libs
    • b95
    • generic
    • generic
    • Not verified

      If the conflicted row is the last row, the SyncResolver.nextConflict will return false.

      JDK : 1.5.0 (FCS) and 1.6.0
      VM : client/server/d64
      switch/Mode : default
      Platform[s] : Sol 10 (sparc) was tested.
      DataBase : ORCL was tested.
      Test owner :
      Failing Test :
        syncresolver.syncresolver1.SyncResolver1#testSyncResolverDelete

      TestBase Location:
      ==================

      /net/jsqalab/export/testsuites/JDBC/rowset2.0/test

      Test source location:
      =====================
      /net/jsqalab/export/testsuites/JDBC/rowset2.0/test/qcts/src/tests/rowsets/syncresolver/syncresolver1/*.java

      How to reproduce:
      ====================
        Modify the DB IP, Username, user passwd.

      Output 1
        1) javac syncresolver.java (java source below)
        2) java syncresolver

      Output 2
        1) comment out this line
            y.executeUpdate ("insert into test values(4,'dddd',40)");
        2) javac syncresolver.java
        3) java syncresolver

      Test output:
      =============
      Output 1
      --------
      current crs50
      delete 1
      current crs40
      current RS 50
      update row
      current RS 40
      Value of params1 : {0} 50
      Syn catched
      Syn resolver objectcom.sun.rowset.internal.SyncResolverImpl@12b3374
      In Conflict
      Sync catched syncRes.getStatus1

      Output 2
      --------
      current crs50
      delete 1
      current RS 50
      update row
      Value of params1 : {0} 50
      Syn catched
      Syn resolver objectcom.sun.rowset.internal.SyncResolverImpl@12b3374


      Specific Machine Info:
      =====================
      jtg-s130>uname -a
      SunOS jtg-s130 5.9 Generic_117171-07 sun4u sparc SUNW,Ultra-60
       

      Java Source
      ============

      import java.sql.*;
      import javax.sql.*;
      import com.sun.rowset.*;
      import javax.sql.rowset.*;
      import javax.sql.rowset.spi.*;

      public class syncresolver
      {
         public static void main(String args[])
         {
           Connection con = null;
           Connection con2 = null;

           try
           {

             String driver ="com.inet.ora.OraDriver";
             String url = "jdbc:inetora:192.0.0.1:1521:ORCL";
             
             Class.forName(driver).newInstance();
             Statement s, s2, y;

             con = DriverManager.getConnection(url, "user1", "user1");
             y = con.createStatement();
             y.executeUpdate("DROP TABLE test");
             y.executeUpdate("CREATE TABLE test (age INT, name VARCHAR(50), sal number(10))");
            // y.executeUpdate ("insert into test values(1,'aaaa',10)");
            // y.executeUpdate ("insert into test values(2,'bbbb',20)");
            // y.executeUpdate ("insert into test values(3,'cccc',30)");
             y.executeUpdate ("insert into test values(5,'eeee',50)");
             y.executeUpdate ("insert into test values(4,'dddd',40)");
             y.close();

             con = DriverManager.getConnection(url, "wing", "wing");
             con2 = DriverManager.getConnection(url, "wing", "wing");
             
             s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

             ResultSet rs1 = s.executeQuery("SELECT * from test");
          

             CachedRowSet crs;
             int keyCols[] = {3};
             crs = new CachedRowSetImpl();

             crs.setTableName("test");
             crs.setKeyColumns(keyCols);
             crs.setCommand("SELECT * from test");
             crs.populate(rs1);
             int row = 0;
             while (crs.next())
             {
               ++row;
               System.out.println("current crs" + crs.getInt(3));
               if(crs.getInt(3) == 50)
               { crs.deleteRow(); System.out.println("delete " + row);
               }

             }

             s2 = con2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
             ResultSet rs2 = s2.executeQuery("Select * from test");

             rs2.beforeFirst();
             row = 0;
             while (rs2.next())
             {
               ++row;
               System.out.println("current RS " + rs2.getInt(3));
               if (rs2.getInt(3) == 50)
               {
                   rs2.updateString(2,"test");
                   rs2.updateInt(1,10);
                   rs2.updateRow();
                   System.out.println("update row");
                }
             }


            try {
              crs.acceptChanges(con);
             }catch (SyncProviderException spe)
             { try{
                System.out.println("Syn catched");
               
                SyncResolver syncRes = spe.getSyncResolver();
                System.out.println("Syn resolver object" + syncRes);
                while (syncRes.nextConflict())
                {
                  System.out.println("In Conflict");
                  System.out.println("Sync catched syncRes.getStatus" + syncRes.getStatus());

                }
                } catch (Exception e)
                { e.printStackTrace();
                   System.out.println ("In StackTrace");
                 }
             }


           }
           catch (Exception e)
          { System.out.println("Main");
            e.printStackTrace();
          }
         }
      }

      ###@###.### 2005-05-06 01:03:41 GMT

            ssharmasunw Sushmita Sharma (Inactive)
            tacheung Tak Wing Cheung (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: