You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by Mamta Satoor <ms...@gmail.com> on 2005/05/19 11:46:19 UTC

[PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Hi,
 Sometime back, I submitted patches for update and delete on forward only 
updatable resultsets using JDBC apis for Embedded Derby. With this mail, I 
would like to submit similar support for Network Server using Derby Net 
Client. 
 The functionality for Network Server is similar to what Embedded Derby 
supports, with the exception of following differences
1)DNC requires that the first column in the select list be from the target 
table.
eg select 1, c11 from t1 for update of c11 will fail in Network Server 
because driver looks at first column to determine the target table for 
update/delete. This is not required by embedded driver. There are tests for 
this in the attached patch(Positive Test2 in updatableResultSet.java).
2)Embedded driver allows Statement name change when there is an open 
resultset on that statement object. DNC driver does not supported that. 
(Positive Test8a and Test8b in updatableResultSet.java)
3)(Positive Test20) Embedded driver allows updateString on SMALLINT, 
INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR 
datatypes. DNC doesn't
Embedded driver support updateTime on TIMESTAMP datatypes. DNC doesn't
Embedded driver supports updateObject with null value. DNC doesn't
DNC does not support updateClob and updateBlob
 Following files are changed by this patch
**************svn stat************
M 
java\testing\org\apache\derbyTesting\functionTests\tests\lang\updatableResultSet.java
M 
java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\updatableResultSet.out
M 
java\testing\org\apache\derbyTesting\functionTests\master\updatableResultSet.out
M 
java\testing\org\apache\derbyTesting\functionTests\master\jdk14\updatableResultSet.out
M java\testing\org\apache\derbyTesting\functionTests\suites\DerbyNet.exclude
M java\client\org\apache\derby\client\am\ResultSet.java
**********************************
 Following is a brief description of the actual changes that are going into 
the patch
1)After updateRow(provided updateXXX were issued on the row before 
updateRow) and deleteRow, position the resultset to right before the next 
row. This matches the embedded driver behavior.
2)If ResultSet is not positioned on a row and user issues updateRow (w/o 
prior updateXXX), then throw an exception that it is not a valid operation. 
This matches the embedded driver behavior.
3)Made changes to DNC so that it does not require all the updatable columns 
in the sql to be modified with updateXXX prior to updateRow. This matches 
the embedded driver behavior.
4)To preserve case sensitivity and spaces in the names, put quotes around 
database object names like table name, column name, cursor name etc. Similar 
to embedded driver.(Positive Test31a, Test31b)
5)For a select sql like, select 2, c11 from t1, Derby has null for table 
name and schema name for column 2. DNC needs to check for these nulls to 
avoid null pointer exception. 
 As always, please review the patch and let me know of any comments,
Mamta

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by David Van Couvering <Da...@Sun.COM>.
OK, thanks.

David

Mamta Satoor wrote:
> Hi David,
>  
> I have not yet entered JIRA bugs for these differences. Once the patch
> is committed, I can go ahead and make JIRA entries. Also, yes, I hope
> that these differences can be listed in maybe Server and Admin Guide's
> existing section "Differences between running Derby in embedded mode and
> using the network server".
>  
> Mamta
> 
>  
> On 5/19/05, *David Van Couvering* <david@vancouvering.com
> <ma...@vancouvering.com>> wrote:
> 
>     Hi Mamta.  These are some pretty significant incompatibilities between
>     DNC and Embedded drivers.  Are all these logged as JIRA bugs?  Are
>     they/will they be called out in the documentation?
> 
>     Thanks,
> 
>     David
> 
>     Mamta Satoor wrote:
> 
>     > Hi,
>     >
>     > Sometime back, I submitted patches for update and delete on
>     forward only
>     > updatable resultsets using JDBC apis for Embedded Derby. With this
>     mail,
>     > I would like to submit similar support for Network Server using Derby
>     > Net Client.
>     >
>     > The functionality for Network Server is similar to what Embedded Derby
>     > supports, with the exception of following differences
>     > 1)DNC requires that the first column in the select list be from the
>     > target table.
>     > eg select 1, c11 from t1 for update of c11 will fail in Network Server
>     > because driver looks at first column to determine the target table
>     for
>     > update/delete. This is not required by embedded driver. There are
>     tests
>     > for this in the attached patch(Positive Test2 in
>     updatableResultSet.java).
>     > 2)Embedded driver allows Statement name change when there is an open
>     > resultset on that statement object. DNC driver does not supported
>     that.
>     > (Positive Test8a and Test8b in updatableResultSet.java )
>     > 3)(Positive Test20) Embedded driver allows updateString on SMALLINT,
>     > INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
>     > Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR
>     > datatypes. DNC doesn't
>     > Embedded driver support updateTime on TIMESTAMP datatypes. DNC
>     doesn't
>     > Embedded driver supports updateObject with null value. DNC doesn't
>     > DNC does not support updateClob and updateBlob
>     >
>     > Following files are changed by this patch
>     > **************svn stat************
>     > M
>     >
>     java\testing\org\apache\derbyTesting\functionTests\tests\lang\updatableResultSet.java
>     > M
>     >
>     java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\updatableResultSet.out
>     >
>     > M
>     >
>     java\testing\org\apache\derbyTesting\functionTests\master\updatableResultSet.out
>     > M
>     >
>     java\testing\org\apache\derbyTesting\functionTests\master\jdk14\updatableResultSet.out
>     > M
>     >
>     java\testing\org\apache\derbyTesting\functionTests\suites\DerbyNet.exclude
>     > M      java\client\org\apache\derby\client\am\ResultSet.java
>     > **********************************
>     >
>     > Following is a brief description of the actual changes that are going
>     > into the patch
>     > 1)After updateRow(provided updateXXX were issued on the row before
>     > updateRow) and deleteRow, position the resultset to right before the
>     > next row. This matches the embedded driver behavior.
>     > 2)If ResultSet is not positioned on a row and user issues
>     updateRow (w/o
>     > prior updateXXX), then throw an exception that it is not a valid
>     > operation. This matches the embedded driver behavior.
>     > 3)Made changes to DNC so that it does not require all the updatable
>     > columns in the sql to be modified with updateXXX prior to updateRow.
>     > This matches the embedded driver behavior.
>     > 4)To preserve case sensitivity and spaces in the names, put quotes
>     > around database object names like table name, column name, cursor
>     name
>     > etc. Similar to embedded driver.(Positive Test31a, Test31b)
>     > 5)For a select sql like, select 2, c11 from t1, Derby has null for
>     table
>     > name and schema name for column 2. DNC needs to check for these
>     nulls to
>     > avoid null pointer exception.
>     >
>     > As always, please review the patch and let me know of any comments,
>     > Mamta
>     >
>     >
>     >
>     >
>     ------------------------------------------------------------------------
> 
>     >
>     > Index:
>     java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java
>     > ===================================================================
>     > ---
>     java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java    
>     (revision 170535)
>     > +++
>     java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java    
>     (working copy)
>     > @@ -253,13 +253,7 @@
>     >                       System.out.println("Negative Testl - request
>     for scroll insensitive updatable resultset will give a read only
>     scroll insensitive resultset");
>     >                       conn.clearWarnings();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
>     ResultSet.CONCUR_UPDATABLE);
>     > -                     warnings = conn.getWarnings ();
>     > -                     while (warnings != null)
>     > -                     {
>     > -                            
>     JDBCDisplayUtil.ShowWarnings(System.out, warnings);
>     > -                             warnings = warnings.getNextWarning();
>     > -                     }
>     > -                     conn.clearWarnings();
>     > +                     JDBCDisplayUtil.ShowWarnings(System.out, conn);
>     >                       System.out.println ("requested
>     TYPE_SCROLL_INSENSITIVE, CONCUR_UPDATABLE but that is not supported");
>     >                       System.out.println("Make sure that we got
>     TYPE_SCROLL_INSENSITIVE? " +  (stmt.getResultSetType () ==
>     ResultSet.TYPE_SCROLL_INSENSITIVE));
>     >                       System.out.println("Make sure that we got
>     CONCUR_READ_ONLY? " +  (stmt.getResultSetConcurrency() ==
>     ResultSet.CONCUR_READ_ONLY));
>     > @@ -292,12 +286,7 @@
>     >
>     >                       System.out.println("Negative Test2 - request
>     for scroll sensitive updatable resultset will give a read only
>     scroll insensitive resultset");
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
>     ResultSet.CONCUR_UPDATABLE);
>     > -                     while (warnings != null)
>     > -                     {
>     > -                             System.out.println ("warnings on
>     connection = " + warnings);
>     > -                             warnings = warnings.getNextWarning();
>     > -                     }
>     > -                     conn.clearWarnings();
>     > +                     JDBCDisplayUtil.ShowWarnings(System.out, conn);
>     >        System.out.println("requested TYPE_SCROLL_SENSITIVE,
>     CONCUR_UPDATABLE but that is not supported");
>     >                       System.out.println("Jira issue Derby-154 :
>     When client connects to Network Server using JCC, it incorrectly
>     shows support for scroll sensitive updatable resultsets");
>     >        System.out.println("Make sure that we got
>     TYPE_SCROLL_INSENSITIVE? " +  (stmt.getResultSetType() ==
>     ResultSet.TYPE_SCROLL_INSENSITIVE));
>     > @@ -377,20 +366,13 @@
>     >                       //have to close the resultset because by
>     default, resultsets are held open over commit
>     >                       rs.close();
>     >
>     > -
>     >                       System.out.println("Negative Test5 - request
>     updatable resultset for sql with no FOR UPDATE clause");
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     >                       rs = stmt.executeQuery("select * from
>     t1");//notice that we forgot to give mandatory FOR UPDATE clause for
>     updatable resultset
>     >                       System.out.println("Make sure that we got
>     CONCUR_READ_ONLY? " + (rs.getConcurrency() ==
>     ResultSet.CONCUR_READ_ONLY));
>     >                       System.out.println("Jira issue Derby-159 :
>     Warnings raised by Derby are not getting passed to the Client in
>     Network Server Mode");
>     >                       System.out.println("Will see the warnings in
>     embedded mode only");
>     > -                     warnings = rs.getWarnings();
>     > -                     while (warnings != null)
>     > -                     {
>     > -                             System.out.println("Expected
>     warnings on resultset = " + warnings);
>     > -                             warnings = warnings.getNextWarning ();
>     > -                     }
>     > -                     rs.clearWarnings();
>     > +                     JDBCDisplayUtil.ShowWarnings(System.out, rs);
>     >                       rs.next();
>     >        System.out.println ("Now attempting to send a delete on a
>     sql with no FOR UPDATE clause.");
>     >                       try {
>     > @@ -410,7 +392,6 @@
>     >                               System.out.println("SQL State : " +
>     e.getSQLState());
>     >                               System.out.println("Got expected
>     exception " + e.getMessage());
>     >                       }
>     > -
>     >                       //have to close the resultset because by
>     default, resultsets are held open over commit
>     >                       rs.close();
>     >
>     > @@ -420,13 +401,7 @@
>     >                       System.out.println("Make sure that we got
>     CONCUR_READ_ONLY? " + (rs.getConcurrency() ==
>     ResultSet.CONCUR_READ_ONLY ));
>     >                       System.out.println("Jira issue Derby-159 :
>     Warnings raised by Derby are not getting passed to the Client in
>     Network Server Mode");
>     >                       System.out.println ("Will see the warnings
>     in embedded mode only");
>     > -                     warnings = rs.getWarnings();
>     > -                     while (warnings != null)
>     > -                     {
>     > -                             System.out.println("Expected
>     warnings on resultset = " + warnings);
>     > -                             warnings = warnings.getNextWarning();
>     > -                     }
>     > -                     rs.clearWarnings ();
>     > +                     JDBCDisplayUtil.ShowWarnings(System.out, rs);
>     >                       rs.next();
>     >        System.out.println("Now attempting to send a delete on a
>     sql with FOR READ ONLY clause.");
>     >                       try {
>     > @@ -463,14 +438,12 @@
>     >                               System.out.println("Got expected
>     exception " + e.getMessage());
>     >                       }
>     >         System.out.println("Now attempt a updateRow without first
>     doing next on the resultset.");
>     > -                     System.out.println("In embedded mode,
>     updateRow will check if it is on a row or not even though no changes
>     have been made to the row using updateXXX");
>     > -                     System.out.println("In Network Server mode,
>     if no updateXXX were issued before updateRow, then updateRow is a
>     no-op and doesn't check if it is on a row or not");
>     > +                     System.out.println("updateRow will check if
>     it is on a row or not even " +
>     > +                             "though no changes have been made to
>     the row using updateXXX");
>     >                       try {
>     >                               rs.updateRow();
>     > -                             if (TestUtil.isEmbeddedFramework())
>     > -                                     System.out.println("FAIL!!!
>     In embedded mode, this updateRow should have failed because
>     resultset is not on a row");
>     > -                             else
>     > -                                     System.out.println("PASS!!!
>     In Network Server mode, this updateRow is a no-op because no
>     updateXXX were issued before the updateRow");
>     > +                             System.out.println("FAIL!!!
>     updateRow should have failed because " +
>     > +                                             "resultset is not on
>     a row");
>     >                       }
>     >                       catch (SQLException e) {
>     >                               System.out.println("SQL State : " +
>     e.getSQLState());
>     > @@ -664,12 +637,7 @@
>     >
>     >                       System.out.println("Positive Test1a -
>     request updatable resultset for forward only type resultset");
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE );
>     > -                     warnings = conn.getWarnings();
>     > -                     while (warnings != null)
>     > -                     {
>     > -                             System.out.println("Unexpected
>     warnings = " + warnings);
>     > -                             warnings = warnings.getNextWarning();
>     > -                     }
>     > +                     JDBCDisplayUtil.ShowWarnings(System.out, conn);
>     >        System.out.println("requested TYPE_FORWARD_ONLY,
>     CONCUR_UPDATABLE");
>     >        System.out.println("got TYPE_FORWARD_ONLY? "
>     +  (stmt.getResultSetType() == ResultSet.TYPE_FORWARD_ONLY));
>     >        System.out.println("got CONCUR_UPDATABLE? "
>     +  (stmt.getResultSetConcurrency () == ResultSet.CONCUR_UPDATABLE));
>     > @@ -679,17 +647,15 @@
>     >        System.out.println("column 1 on this row before deleteRow
>     is " + rs.getInt(1));
>     >        System.out.println("column 2 on this row before deleteRow
>     is " + rs.getString(2));
>     >                       rs.deleteRow();
>     > -      System.out.println("Since after deleteRow(), in embedded
>     mode, ResultSet is positioned before the next row, getXXX will fail");
>     > -       System.out.println("In Network Server mode, the ResultSet
>     stays on the deleted row after deleteRow and hence no error for
>     getXXX");
>     > +      System.out.println("Since after deleteRow(), in embedded
>     mode and Network "+
>     > +                             "Server mode using Derby Net Client,
>     ResultSet is positioned before " +
>     > +                             "the next row, getXXX will fail");
>     >                       try {
>     >                               System.out.println("column 1 on this
>     deleted row is " + rs.getInt(1));
>     >                       }
>     >                       catch (SQLException e) {
>     > -                             if ( TestUtil.isEmbeddedFramework()) {
>     > -                                     System.out.println("SQL
>     State : " + e.getSQLState());
>     > -                                     System.out.println("Got
>     expected exception " + e.getMessage());
>     > -                             } else
>     > -                                     System.out.println("Got
>     unexpected exception " + e.getMessage());
>     > +                             System.out.println("SQL State : " +
>     e.getSQLState());
>     > +                             System.out.println("Got expected
>     exception " + e.getMessage());
>     >                       }
>     >         System.out.println("calling deleteRow again w/o first
>     positioning the ResultSet on the next row will fail");
>     >                       try {
>     > @@ -707,16 +673,10 @@
>     >                       //have to close the resultset because by
>     default, resultsets are held open over commit
>     >                       rs.close();
>     >
>     > -                     if (TestUtil.isEmbeddedFramework()) {
>     >                       System.out.println("Positive Test1b -
>     request updatable resultset for forward only type resultset");
>     >                       reloadData();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     > -                     warnings = conn.getWarnings();
>     > -                     while (warnings != null)
>     > -                     {
>     > -                             System.out.println("Unexpected
>     warnings = " + warnings);
>     > -                             warnings = warnings.getNextWarning();
>     > -                     }
>     > +                     JDBCDisplayUtil.ShowWarnings(System.out, conn);
>     >                       rs = stmt.executeQuery("SELECT * FROM t1 FOR
>     UPDATE");
>     >                       rs.next();
>     >                       System.out.println("column 1 on this row
>     before updateInt is " + rs.getInt(1));
>     > @@ -725,8 +685,9 @@
>     >                       System.out.println ("column 2 on this row
>     before updateString is " + rs.getString(2));
>     >                       System.out.println("now updateRow on the row");
>     >                       rs.updateRow();
>     > -                     System.out.println("Since after updateRow(),
>     in embedded mode, ResultSet is positioned before the next row,
>     getXXX will fail");
>     > -      System.out.println("In Network Server mode, the ResultSet
>     stays on the updated row after updateRow and hence no error for
>     getXXX");
>     > +      System.out.println("Since after updateRow(), in embedded
>     mode and Network "+
>     > +                             "Server mode using Derby Net Client,
>     ResultSet is positioned before " +
>     > +                             "the next row, getXXX will fail");
>     >                       try {
>     >                               System.out.println("column 1 on this
>     updateRow row is " + rs.getInt(1));
>     >                       }
>     > @@ -751,14 +712,33 @@
>     >                       //have to close the resultset because by
>     default, resultsets are held open over commit
>     >                       rs.close();
>     >
>     > -                     System.out.println("Positive Test2 - even if
>     no columns from table specified in the column list, we should be
>     able to get updatable resultset");
>     > +                     System.out.println("Positive Test2 - even if
>     no columns from table " +
>     > +                             "specified in the column list, we
>     should be able to get updatable " +
>     > +                             "resultset");
>     >        reloadData();
>     > +                     System.out.println("Will work in embedded
>     mode because target table is "+
>     > +                             "not derived from the first column
>     in the select list");
>     > +                     System.out.println("Will not work in network
>     server mode because it " +
>     > +                             "derives the target tabke from the
>     first column in the select list");
>     >        System.out.println("total number of rows in T1 ");
>     >        dumpRS(stmt.executeQuery("select count(*) from t1"));
>     >        rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
>     >                       rs.next();
>     >        System.out.println("column 1 on this row is " + rs.getInt(1));
>     > -                     rs.deleteRow();
>     > +                     try {
>     > +                             rs.deleteRow();
>     > +                             if (TestUtil.isNetFramework())
>     > +                                     System.out.println("FAIL!!!
>     should have failed in network server");
>     > +                             else
>     > +                                     System.out.println("PASS!!!
>     passed in embedded mode");
>     > +                     }
>     > +                     catch (SQLException e) {
>     > +                             if ( TestUtil.isNetFramework()) {
>     > +                                     System.out.println("SQL
>     State : " + e.getSQLState());
>     > +                                     System.out.println("Got
>     expected exception " + e.getMessage());
>     > +                             } else
>     > +                                     System.out.println("Got
>     unexpected exception " + e.getMessage());
>     > +                     }
>     >                       //have to close the resultset because by
>     default, resultsets are held open over commit
>     >                       rs.close();
>     >        System.out.println("total number of rows in T1 after one
>     deleteRow is ");
>     > @@ -908,7 +888,7 @@
>     >        System.out.println("deletesAreDetected(
>     ResultSet.TYPE_FORWARD_ONLY)? " +
>     dbmt.deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY));
>     >        reloadData();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE );
>     > -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
>     > +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>     >                       rs.next();
>     >        System.out.println("The JDBC program should look at
>     rowDeleted only if deletesAreDetected returns true");
>     >        System.out.println("Since Derby returns false for
>     detlesAreDetected for FORWARD_ONLY updatable resultset,the program
>     should not rely on rs.rowDeleted() for FORWARD_ONLY updatable
>     resultsets");
>     > @@ -971,21 +951,46 @@
>     >                       rs.close();
>     >                       stmt.executeUpdate("DROP TABLE SESSION.t3");
>     >
>     > -                     System.out.println("Positive Test8a - change
>     the name of the resultset and see if deleteRow still works");
>     > +                     System.out.println("Positive Test8a - change
>     the name of the statement " +
>     > +                             "when the resultset is open and see
>     if deleteRow still works");
>     > +                     System.out.println("This test works in
>     embedded mode since Derby can " +
>     > +                             "handle the change in the name of
>     the statement with an open resultset");
>     > +                     System.out.println("But it fails under
>     Network Server mode because JCC " +
>     > +                             "and Derby Net Client do not allow
>     statement name change when there " +
>     > +                             "an open resultset against it");
>     >        reloadData();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     >        System.out.println("change the cursor name(case sensitive
>     name) with setCursorName and then try to deleteRow");
>     >                      
>     stmt.setCursorName("CURSORNOUPDATe");//notice this name is case
>     sensitive
>     > -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
>     > +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>     >                       rs.next();
>     >                       rs.deleteRow();
>     >        System.out.println("change the cursor name one more time
>     with setCursorName and then try to deleteRow");
>     > -                     stmt.setCursorName("CURSORNOUPDATE1");
>     > -                     rs.next();
>     > -                     rs.deleteRow();
>     > +                     try {
>     > +                             stmt.setCursorName("CURSORNOUPDATE1");
>     > +                             rs.next();
>     > +                             rs.deleteRow();
>     > +                             if (TestUtil.isNetFramework())
>     > +                                     System.out.println("FAIL!!!
>     should have failed in network server");
>     > +                             else
>     > +                                     System.out.println ("PASS!!!
>     passed in embedded mode");
>     > +                     }
>     > +                     catch (SQLException e) {
>     > +                             if (TestUtil.isNetFramework()) {
>     > +                                     System.out.println("SQL
>     State : " + e.getSQLState());
>     > +                                     System.out.println("Got
>     expected exception " + e.getMessage());
>     > +                             } else
>     > +                                     System.out.println("Got
>     unexpected exception " + e.getMessage());
>     > +                     }
>     >                       rs.close();
>     >
>     > -                     System.out.println("Positive Test8b - change
>     the name of the resultset and see if updateRow still works");
>     > +                     System.out.println("Positive Test8b - change
>     the name of the statement " +
>     > +                             "when the resultset is open and see
>     if updateRow still works");
>     > +                     System.out.println("This test works in
>     embedded mode since Derby can " +
>     > +                             "handle the change in the name of
>     the statement with an open resultset");
>     > +                     System.out.println("But it fails under
>     Network Server mode because JCC " +
>     > +                             "and Derby Net Client do not allow
>     statement name change when there " +
>     > +                             "an open resultset against it");
>     >        reloadData();
>     >                       System.out.println("change the cursor name
>     one more time with setCursorName and then try to updateRow");
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY ,
>     ResultSet.CONCUR_UPDATABLE);
>     > @@ -994,21 +999,53 @@
>     >                       rs = stmt.executeQuery("SELECT * FROM t1 FOR
>     UPDATE of c1");
>     >                       rs.next();
>     >                       rs.updateLong(1,123);
>     > -                     stmt.setCursorName("CURSORNOUPDATE1");
>     > -                     rs.updateRow();
>     > +                     try {
>     > +                             stmt.setCursorName("CURSORNOUPDATE1");
>     > +                             rs.updateRow();
>     > +                             if (TestUtil.isNetFramework())
>     > +                                     System.out.println ("FAIL!!!
>     should have failed in network server");
>     > +                             else
>     > +                                     System.out.println("PASS!!!
>     passed in embedded mode");
>     > +                     }
>     > +                     catch (SQLException e) {
>     > +                             if (TestUtil.isNetFramework()) {
>     > +                                     System.out.println("SQL
>     State : " + e.getSQLState ());
>     > +                                     System.out.println("Got
>     expected exception " + e.getMessage());
>     > +                             } else
>     > +                                     System.out.println ("Got
>     unexpected exception " + e.getMessage());
>     > +                     }
>     >                       rs.close();
>     >
>     > -                     System.out.println("Positive Test9a - using
>     correlation name for the table in the select sql is not a problem");
>     > +                     System.out.println("Positive Test9a - using
>     correlation name for the " +
>     > +                             "table in the select sql works in
>     embedded mode and Network Server " +
>     > +                             "using Derby Net Client driver");
>     > +                     System.out.println("Correlation name for
>     table does not work in Network "+
>     > +                             "Server mode (using JCC) because the
>     drivers construct the delete sql "+
>     > +                             "with the correlation name rather
>     than the base table name");
>     >                       reloadData();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY ,
>     ResultSet.CONCUR_UPDATABLE);
>     > -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 abcde FOR
>     UPDATE of c1");
>     > +      rs = stmt.executeQuery("SELECT * FROM t1 abcde FOR UPDATE
>     of c1");
>     >                       rs.next();
>     >        System.out.println("column 1 on this row is " + rs.getInt(1));
>     >        System.out.println("now try to deleteRow");
>     > -                     rs.deleteRow();
>     > +                     try {
>     > +                             rs.deleteRow();
>     > +                             if (TestUtil.isJCCFramework())
>     > +                                     System.out.println("FAIL!!!
>     should have failed in network server");
>     > +                             else
>     > +                                     System.out.println("PASS!!!
>     passed in embedded mode");
>     > +                     }
>     > +                     catch (SQLException e) {
>     > +                             if (TestUtil.isJCCFramework()) {
>     > +                                     System.out.println ("SQL
>     State : " + e.getSQLState());
>     > +                                     System.out.println("Got
>     expected exception " + e.getMessage());
>     > +                             } else
>     > +                                     System.out.println("Got
>     unexpected exception " + e.getMessage());
>     > +                     }
>     >                       rs.close();
>     > -
>     > -                     System.out.println("Positive Test9b - using
>     correlation name for updatable column name is not allowed");
>     > +
>     > +                     System.out.println("Positive Test9b - using
>     correlation name for " +
>     > +                             "updatable columns is not allowed.");
>     >                       reloadData();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     >                       System.out.println("Table t1 has following
>     rows");
>     > @@ -1055,22 +1092,6 @@
>     >                       System.out.println("Table t1 after updateRow
>     has following rows");
>     >                       dumpRS(stmt.executeQuery("select * from t1"));
>     >
>     > -                     System.out.println("Positive Test9c - try to
>     updateXXX on a readonly column. Should get error");
>     > -                     reloadData();
>     > -                     rs = stmt.executeQuery("SELECT c1, c2 FROM
>     t1 abcde FOR UPDATE of c1");
>     > -                     rs.next();
>     > -                     try {
>     > -                             rs.updateString(2,"bbbb");
>     > -                             System.out.println("FAIL!!!
>     updateString on readonly column should have failed");
>     > -                     }
>     > -                     catch (SQLException e) {
>     > -                             System.out.println("SQL State : " +
>     e.getSQLState());
>     > -                             System.out.println("Got expected
>     exception " + e.getMessage());
>     > -                     }
>     > -                     rs.close();
>     > -                     System.out.println("Table t1 has following
>     rows");
>     > -                     dumpRS(stmt.executeQuery("select * from t1"));
>     > -
>     >                       System.out.println("Positive Test9d - try to
>     updateXXX on a readonly column with correlation name. Should get
>     error");
>     >                       reloadData();
>     >                       rs = stmt.executeQuery("SELECT c1, c2 as
>     col2 FROM t1 abcde FOR UPDATE of c1");
>     > @@ -1092,9 +1113,9 @@
>     >        reloadData();
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     >                       stmt1 =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE );
>     > -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
>     > +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
>     >                       rs.next();
>     > -                     rs1 = stmt1.executeQuery("SELECT 1, 2 FROM
>     t1 FOR UPDATE");
>     > +                     rs1 = stmt1.executeQuery("SELECT * FROM t1
>     FOR UPDATE");
>     >                       rs1.next();
>     >                       System.out.println("delete using first
>     resultset");
>     >                       rs.deleteRow();
>     > @@ -1119,7 +1140,7 @@
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY ,
>     ResultSet.CONCUR_UPDATABLE);
>     >                       stmt.executeUpdate("call
>     SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
>     >                       stmt.setFetchSize(200);
>     > -      rs = stmt.executeQuery ("SELECT 1, 2 FROM t1 FOR UPDATE of
>     c1");
>     > +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>     >                       System.out.println("Notice the Fetch Size in
>     run time statistics output.");
>     >        showScanStatistics(rs, conn);
>     >                       System.out.println("statement's fetch size
>     is " + stmt.getFetchSize());
>     > @@ -1205,6 +1226,7 @@
>     >                       dumpRS( stmt.executeQuery("select * from
>     table2WithTriggers"));
>     >                       //have to close the resultset because by
>     default, resultsets are held open over commit
>     >                       rs.close ();
>     > +                     conn.rollback();
>     >
>     >                       System.out.println("Positive Test14a - make
>     sure self referential delete cascade works when deleteRow is issued");
>     >                       dumpRS( stmt.executeQuery("select * from
>     selfReferencingT1"));
>     > @@ -1252,7 +1274,7 @@
>     >        reloadData();
>     >        conn.setAutoCommit(false);
>     >                       stmt = conn.createStatement
>     (ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>     > -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
>     > +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
>     >                       rs.next();
>     >                       System.out.println("Opened an updatable
>     resultset. Now trying to drop that table through another Statement");
>     >                       stmt1 = conn.createStatement();
>     > @@ -1503,13 +1525,15 @@
>     >                                       }
>     >                               }
>     >                       }
>     > +                     conn.rollback();
>     >                       conn.setAutoCommit(true);
>     >
>     >                       System.out.println("Positive Test21 - Test
>     all updateXXX(excluding updateObject) methods on all the supported
>     sql datatypes");
>     >                       conn.setAutoCommit(false);
>     > -                     stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     > -                     stmt1 = conn.createStatement ();
>     > +                     PreparedStatement pstmt =
>     conn.prepareStatement("SELECT * FROM AllDataTypesForTestingTable FOR
>     UPDATE", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>     > +                     PreparedStatement pstmt1 =
>     conn.prepareStatement("SELECT * FROM AllDataTypesNewValuesData");
>     >                       for (int sqlType = 1, checkAgainstColumn =
>     1; sqlType <= allSQLTypes.length; sqlType++ ) {
>     > +                             conn.rollback();
>     >                               System.out.println("Next datatype to
>     test is " + allSQLTypes[sqlType-1]);
>     >                               for (int updateXXXName =
>     1;  updateXXXName <= allUpdateXXXNames.length; updateXXXName++) {
>     >                                       checkAgainstColumn =
>     updateXXXName;
>     > @@ -1519,9 +1543,9 @@
>     >                                                      
>     System.out.println ("    Using column position as first parameter to
>     " + allUpdateXXXNames[updateXXXName-1]);
>     >                                               else
>     >                                                      
>     System.out.println("    Using column name as first parameter to " +
>     allUpdateXXXNames[updateXXXName-1]);
>     > -                                             rs =
>     stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable FOR
>     UPDATE");
>     > +                                             rs =
>     pstmt.executeQuery();
>     >                                               rs.next();
>     > -                                             rs1 =
>     stmt1.executeQuery ("SELECT * FROM AllDataTypesNewValuesData");
>     > +                                             rs1 =
>     pstmt1.executeQuery();
>     >                                               rs1.next();
>     >                                               try {
>     >                                                       if
>     (updateXXXName == 1) {//update column with updateShort methods
>     > @@ -1642,7 +1666,8 @@
>     >                                                                      
>     rs.updateRef(ColumnNames[sqlType-1], null);
>     >                }
>     >                                                       rs.updateRow();
>     > -                                                     if
>     (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
>     {
>     > +                                                     if
>     ((TestUtil.isNetFramework() &&
>     updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR"))
>     ||
>     > +                                                             (
>     TestUtil.isEmbeddedFramework() &&
>     updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
>     {
>     >                                                              
>     System.out.println("FAILURE : We shouldn't reach here. The test
>     should have failed earlier on updateXXX or updateRow call");
>     >                                                               return;
>     >                                                       }
>     > @@ -1652,7 +1677,8 @@
>     >                                                               return;
>     >                                                       }
>     >                                               } catch (Throwable e) {
>     > -                                                     if
>     (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
> 
>     > +                                                     if
>     ((TestUtil.isNetFramework() &&
>     updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR"))
>     ||
>     > +                                                             (
>     TestUtil.isEmbeddedFramework() &&
>     updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
>     >                                                              
>     System.out.println("      Got expected exception : " + e.getMessage());
>     >                                                       else {
>     >                                                               if
>     ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are
>     dealing with DATE/TIME/TIMESTAMP column types
>     > @@ -1669,14 +1695,14 @@
>     >                                       rs1.close();
>     >                               }
>     >                       }
>     > +                     conn.rollback();
>     >                       conn.setAutoCommit(true);
>     >
>     >                       System.out.println("Positive Test22 - Test
>     updateObject method");
>     >                       conn.setAutoCommit(false);
>     > -                     stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     > -                     stmt1 = conn.createStatement();
>     >                       String displayString;
>     >                       for (int sqlType = 1; sqlType <=
>     allSQLTypes.length; sqlType++ ) {
>     > +                             conn.rollback();
>     >                               System.out.println("Next datatype to
>     test is " + allSQLTypes[sqlType-1]);
>     >                               for (int updateXXXName =
>     1;  updateXXXName <= allUpdateXXXNames.length; updateXXXName++) {
>     >                                       for (int indexOrName = 1;
>     indexOrName <= 2; indexOrName++) {
>     > @@ -1684,9 +1710,9 @@
>     >                                                      
>     displayString = "  updateObject with column position &";
>     >                                               else
>     >                                                      
>     displayString = "  updateObject with column name &";
>     > -                                             rs =
>     stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable FOR
>     UPDATE");
>     > +                                             rs =
>     pstmt.executeQuery();
>     >                                               rs.next ();
>     > -                                             rs1 =
>     stmt1.executeQuery("SELECT * FROM AllDataTypesNewValuesData");
>     > +                                             rs1 =
>     pstmt1.executeQuery();
>     >                                               rs1.next();
>     >                                               try {
>     >                                                       if
>     (updateXXXName == 1){ //updateObject using Short object
>     > @@ -1787,15 +1813,34 @@
>     >                                                                      
>     rs.updateObject(ColumnNames[sqlType-1], new Boolean(rs1.getBoolean(1)));
>     >                                                       } else if
>     (updateXXXName == 19){ //update column with updateNull methods
>     >                                                              
>     System.out.println(displayString + " null as parameters");
>     > +                                                             try {
>     >                                                               if
>     (indexOrName == 1) //test by passing column position
>     >                                                                      
>     rs.updateObject(sqlType, null);
>     >                                                               else
>     //test by passing column name
>     >                                                                      
>     rs.updateObject(ColumnNames[sqlType-1], null);
>     > +                                                             }
>     catch (Throwable e) {
>     > +                                                             if
>     (TestUtil.isNetFramework ()) {
>     >
>     +                                                                    
>     System.out.println("   Got expected exception:" + e.getMessage());
>     >
>     +                                                                    
>     continue;
>     > +                                                             } else {
>     >
>     +                                                                    
>     System.out.println("   Got UNexpected exception:" + e.getMessage ());
>     >
>     +                                                                    
>     return;
>     > +                                                             }
>     > +                                                             }
>     >                                                       } else if
>     (updateXXXName == 20 || updateXXXName == 21) //since Derby does not
>     support Array, Ref datatype, this is a no-op
>     >                                                                      
>     continue;
>     >
>     >                                                              
>     rs.updateRow();
>     > -                                                             if
>     (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
>     {
>     > +                                                             if
>     (TestUtil.isNetFramework() && updateXXXName == 13 &&
>     >
>     +                                                                    
>     (sqlType==7 || sqlType==8 || sqlType==9 || sqlType==13))
>     > +                                                            
>     //updateObject with clob allowed on char, varchar, longvarchar & clob
>     >
>     +                                                                    
>     System.out.print("");
>     > +                                                             else
>     if (TestUtil.isNetFramework() && updateXXXName == 17 &&
>     >
>     +                                                                    
>     (sqlType==12 || sqlType==17))
>     > +                                                            
>     //updateObject with blob allowed on longvarchar for bit & blob
>     >
>     +                                                                    
>     System.out.print ("");
>     > +                                                             else
>     if ((TestUtil.isNetFramework() &&
>     updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR"))
>     ||
>     >
>     +                                                                    
>     (TestUtil.isEmbeddedFramework() &&
>     updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
>     {
>     >                                                                      
>     System.out.println("FAILURE : We shouldn't reach here. The test
>     should have failed earlier on updateXXX or updateRow call");
>     >                                                                      
>     return;
>     >                                                               }
>     > @@ -1805,7 +1850,8 @@
>     >                                                                      
>     return;
>     >                                                               }
>     >                                               } catch (Throwable e) {
>     > -                                                             if
>     (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
> 
>     > +                                                     if
>     ((TestUtil.isNetFramework() &&
>     updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR"))
>     ||
>     > +                                                             (
>     TestUtil.isEmbeddedFramework() &&
>     updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
>     >                                                                      
>     System.out.println ("    Got expected exception : " + e.getMessage());
>     >                                                               else {
>     >                                                                      
>     if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are
>     dealing with DATE/TIME/TIMESTAMP column types
>     > @@ -1821,6 +1867,7 @@
>     >                                       }
>     >                               }
>     >                       }
>     > +                     conn.rollback();
>     >                       conn.setAutoCommit(true);
>     >
>     >                       System.out.println("Positive Test23 - Test
>     cancelRowUpdates after updateXXX methods on all the supported sql
>     datatypes");
>     > @@ -1866,7 +1913,7 @@
>     >                      
>     if(rs.getBigDecimal(4).compareTo(rs1.getBigDecimal(4)) != 0)
>     >                               return;
>     >                       rs.cancelRowUpdates();
>     > -                     if( rs.getBigDecimal(4) != bd)
>     > +                     if(rs.getBigDecimal(4).compareTo(bd) != 0)
>     >                               return;
>     >
>     >                       System.out.println("  updateFloat and then
>     cancelRowUpdates");
>     > @@ -1968,7 +2015,9 @@
>     >                      
>     if(!rs.getTimestamp(16).toString().equals(timeStamp.toString()))
>     >                               return;
>     >
>     > -                     if (JVMInfo.JDK_ID != 2){ //Don't test this
>     method when running JDK1.3 because jdk1.3 does not support the method
>     > +                     //Don't test this when running JDK1.3/in
>     Network Server because they both
>     > +                     //do not support updateClob and updateBlob
>     > +                     if (JVMInfo.JDK_ID != 2 &&
>     TestUtil.isEmbeddedFramework()){
>     >                               System.out.println("  updateClob and
>     then cancelRowUpdates");
>     >                               String clb1 = rs.getString(13);
>     >                               rs.updateClob(13,rs1.getClob(13));
>     > @@ -2121,9 +2170,9 @@
>     >                       System.out.println("Positive Test30 - call
>     updateXXX methods on only columns that correspond to a column in the
>     table");
>     >                       dumpRS(stmt.executeQuery("select * from t1"));
>     >                       stmt =
>     conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
>     ResultSet.CONCUR_UPDATABLE);
>     > -                     rs = stmt.executeQuery("SELECT 1, 2, c1, c2
>     FROM t1 FOR UPDATE");
>     > +                     rs = stmt.executeQuery("SELECT c2, 1, 2, c1
>     FROM t1 FOR UPDATE");
>     >                       rs.next();
>     > -                     rs.updateInt(3,22);
>     > +                     rs.updateInt(4,22);
>     >                       rs.updateRow();
>     >                       rs.close();
>     >                       System.out.println ("  Make sure that
>     changes made it to the database correctly");
>     > @@ -2166,12 +2215,25 @@
>     >                       rs.next();
>     >                       try {
>     >                               rs.updateInt(2,22);
>     > -                             System.out.println("FAIL!!!
>     updateInt should have failed because c12 is not the FOR UPDATE
>     columns list.");
>     > +                             if (TestUtil.isEmbeddedFramework ())
>     > +                             System.out.println("PASS!!! Embedded
>     throws exception for updateRow");
>     > +                             else
>     > +                             System.out.println ("FAIL!!! Network
>     Server should throw exception for updateXXX");
>     >                       }
>     >                       catch (SQLException e) {
>     >                               System.out.println("SQL State : " +
>     e.getSQLState());
>     >                               System.out.println("Got expected
>     exception " + e.getMessage());
>     >                       }
>     > +                     try {
>     > +                             rs.updateRow();
>     > +                             System.out.println("updateRow passed");
>     > +                     }
>     > +                     catch (SQLException e) {
>     > +                             if ( TestUtil.isNetFramework())
>     > +                             System.out.println("FAIL!!!
>     updateRow w/o updateXXX is no-op in Network Server");
>     > +                             else
>     > +                             System.out.println("FAIL!!!
>     exception is " + e.getMessage());
>     > +                     }
>     >                       rs.close();
>     >                       System.out.println("  Make sure the contents
>     of table are unchanged");
>     >                       dumpRS(stmt.executeQuery("select * from t1"));
>     > @@ -2201,7 +2263,6 @@
>     >                       dumpRS(stmt.executeQuery("select * from
>     s2.t1"));
>     >
>     >                       teardown();
>     > -                     }
>     >
>     >                       conn.close();
>     >
>     > @@ -2214,11 +2275,11 @@
>     >       }
>     >
>     >       static boolean verifyData(int sqlType, int updateXXXName,
>     String checkAgainstTheTable) throws SQLException {
>     > -             Statement stmt1 = conn.createStatement();
>     > -             ResultSet rs1 = stmt1.executeQuery("select * from "
>     + checkAgainstTheTable);
>     > +             PreparedStatement pstmt1 =
>     conn.prepareStatement("select * from " + checkAgainstTheTable);
>     > +             ResultSet rs1 = pstmt1.executeQuery();
>     >               rs1.next();
>     > -             Statement stmt = conn.createStatement ();
>     > -             ResultSet rs = stmt.executeQuery("select * from
>     AllDataTypesForTestingTable");
>     > +             PreparedStatement pstmt =
>     conn.prepareStatement("select * from AllDataTypesForTestingTable");
>     > +             ResultSet rs = pstmt.executeQuery();
>     >               rs.next();
>     >
>     >               if (updateXXXName == 18){ //verifying updateBoolean
>     > @@ -2235,13 +2296,13 @@
>     >                               return(false);
>     >               }
>     >
>     > -             if (sqlType == 1) //verify update made to SMALLINT
>     column with updateXXX methods
>     > +             if (sqlType == 1) {//verify update made to SMALLINT
>     column with updateXXX methods
>     >                       if(rs.getShort(sqlType) !=
>     rs1.getShort(updateXXXName)) {
>     >                               return(false); }
>     > -             else if (sqlType == 2)  //verify update made to
>     INTEGER column with updateXXX methods
>     > +             } else if (sqlType == 2) {  //verify update made to
>     INTEGER column with updateXXX methods
>     >                       if(rs.getInt(sqlType) !=
>     rs1.getInt(updateXXXName)) {
>     >                               return(false); }
>     > -             else if (sqlType ==  3)  //verify update made to
>     BIGINT column with updateXXX methods
>     > +             } else if (sqlType ==  3)  //verify update made to
>     BIGINT column with updateXXX methods
>     >                       if(rs.getLong(sqlType) !=
>     rs1.getLong(updateXXXName)) {
>     >                               return(false); }
>     >               else if (sqlType == 4)  //verify update made to
>     DECIMAL column with updateXXX methods
>     > @@ -2265,16 +2326,22 @@
>     >               else if (sqlType == 14)  //verify update made to
>     DATE column with updateXXX methods
>     >                       if(rs.getDate(sqlType) !=
>     rs1.getDate(updateXXXName)) {
>     >                               return(false); }
>     > -             else if (sqlType == 15)  //verify update made to
>     TIME column with updateXXX methods
>     > +             else if (sqlType == 15) { //verify update made to
>     TIME column with updateXXX methods
>     >                       if(rs.getTime(sqlType) !=
>     rs1.getTime(updateXXXName)) {
>     >                               return(false); }
>     > -             else if (sqlType == 16)  //verify update made to
>     TIMESTAMP column with updateXXX methods
>     > -                     if(rs.getTimestamp(sqlType) !=
>     rs1.getTimestamp(updateXXXName)) {
>     > +             } else if (sqlType == 16) { //verify update made to
>     TIMESTAMP column with updateXXX methods
>     > +//                   if( rs.getTimestamp(sqlType) !=
>     rs1.getTimestamp(updateXXXName)) {
>     > +                    
>     if(!rs.getTimestamp(sqlType).equals(rs1.getTimestamp(updateXXXName))) {
>     >                               return(false); }
>     > -             else if (sqlType == 17 && JVMInfo.JDK_ID !=
>     2)  //verify update made to BLOB column with updateXXX methods
>     > +             } else if (sqlType == 17 && JVMInfo.JDK_ID !=
>     2)  //verify update made to BLOB column with updateXXX methods
>     >                       if(rs.getBlob(sqlType).getBytes(1,4) !=
>     rs1.getBlob(updateXXXName).getBytes(1,4)) {
>     >                               return(false); }
>     >
>     > +             rs.close();
>     > +             rs1.close();
>     > +             pstmt.close();
>     > +             pstmt1.close();
>     > +             Statement stmt = conn.createStatement();
>     >               stmt.executeUpdate("delete from
>     AllDataTypesForTestingTable");
>     >               StringBuffer insertSQL = new StringBuffer("insert
>     into AllDataTypesForTestingTable values(");
>     >               for (int type = 0; type < allSQLTypes.length - 1;
>     type++)
>     > Index:
>     java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out
> 
>     > ===================================================================
>     > ---
>     java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out  
>     (revision 170535)
>     > +++
>     java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out  
>     (working copy)
>     > @@ -13,6 +13,8 @@
>     >  SQL State : null
>     >  Got expected exception This method cannot be invoked while the
>     cursor is on the insert row or if the concurrency of this ResultSet
>     object is CONCUR_READ_ONLY.
>     >  Negative Test2 - request for scroll sensitive updatable resultset
>     will give a read only scroll insensitive resultset
>     > +WARNING (no SQLState): Scroll sensitive result sets are not
>     supported by server; remapping to forward-only cursor
>     > +WARNING (no SQLState): Insensitive updatable result sets are not
>     supported by server; remapping to insensitive read-only cursor
>     >  requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE but that is not
>     supported
>     >  Jira issue Derby-154 : When client connects to Network Server
>     using JCC, it incorrectly shows support for scroll sensitive
>     updatable resultsets
>     >  Make sure that we got TYPE_SCROLL_INSENSITIVE? true
>     > @@ -64,9 +66,9 @@
>     >  SQL State : XCL08
>     >  Got expected exception Cursor 'SQL_CURLH000C8' is not on a row.
>     >  Now attempt a updateRow without first doing next on the resultset.
>     > -In embedded mode, updateRow will check if it is on a row or not
>     even though no changes have been made to the row using updateXXX
>     > -In Network Server mode, if no updateXXX were issued before
>     updateRow, then updateRow is a no-op and doesn't check if it is on a
>     row or not
>     > -PASS!!! In Network Server mode, this updateRow is a no-op because
>     no updateXXX were issued before the updateRow
>     > +updateRow will check if it is on a row or not even though no
>     changes have been made to the row using updateXXX
>     > +SQL State : null
>     > +Got expected exception Invalid operation to update at current
>     cursor position
>     >  ResultSet is positioned after the last row. attempt to deleteRow
>     at this point should fail!
>     >  SQL State : null
>     >  Got expected exception Invalid operation: result set closed
>     > @@ -123,12 +125,3020 @@
>     >  JDBC 2.0 updatable resultset apis on this ResultSet object will
>     pass because this is an updatable resultset
>     >  column 1 on this row before deleteRow is 1
>     >  column 2 on this row before deleteRow is aa
>     > -Since after deleteRow(), in embedded mode, ResultSet is
>     positioned before the next row, getXXX will fail
>     > -In Network Server mode, the ResultSet stays on the deleted row
>     after deleteRow and hence no error for getXXX
>     > -column 1 on this deleted row is 0
>     > +Since after deleteRow(), in embedded mode and Network Server mode
>     using Derby Net Client, ResultSet is positioned before the next row,
>     getXXX will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to read at current
>     cursor position.
>     >  calling deleteRow again w/o first positioning the ResultSet on
>     the next row will fail
>     >  SQL State : 24000
>     >  Got expected exception Invalid cursor state - no current row.
>     >  Position the ResultSet with next()
>     >  Should be able to deletRow() on the current row now
>     > +Positive Test1b - request updatable resultset for forward only
>     type resultset
>     > +column 1 on this row before updateInt is 1
>     > +column 1 on this row after updateInt is 234
>     > +column 2 on this row before updateString is aa
>     > +now updateRow on the row
>     > +Since after updateRow(), in embedded mode and Network Server mode
>     using Derby Net Client, ResultSet is positioned before the next row,
>     getXXX will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to read at current
>     cursor position.
>     > +calling updateRow again w/o first positioning the ResultSet on
>     the next row will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to update at current
>     cursor position
>     > +Position the ResultSet with next()
>     > +Should be able to updateRow() on the current row now
>     > +Positive Test2 - even if no columns from table specified in the
>     column list, we should be able to get updatable resultset
>     > +Will work in embedded mode because target table is not derived
>     from the first column in the select list
>     > +Will not work in network server mode because it derives the
>     target tabke from the first column in the select list
>     > +total number of rows in T1
>     > +      1
>     > +      -
>     > +     {3}
>     > +column 1 on this row is 1
>     > +SQL State : 42X01
>     > +Got expected exception Syntax error: Encountered "WHERE" at line
>     1, column 14.
>     > +total number of rows in T1 after one deleteRow is
>     > +      1
>     > +      -
>     > +     {3}
>     > +Positive Test3a - use prepared statement with concur updatable
>     status to test deleteRow
>     > +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
>     > +got TYPE_FORWARD_ONLY? true
>     > +got CONCUR_UPDATABLE? true
>     > +column 1 on this row is 1
>     > +Since after deleteRow(), ResultSet is positioned before the next
>     row, getXXX will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to read at current
>     cursor position.
>     > +calling deleteRow again w/o first positioning the ResultSet on
>     the next row will fail
>     > +SQL State : 24000
>     > +Got expected exception Invalid cursor state - no current row.
>     > +Position the ResultSet with next()
>     > +Should be able to deletRow() on the current row now
>     > +Positive Test3b - use prepared statement with concur updatable
>     status to test updateXXX
>     > +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
>     > +got TYPE_FORWARD_ONLY? true
>     > +got CONCUR_UPDATABLE? true
>     > +column 1 on this row is 1
>     > +column 1 on this row after updateInt is 5
>     > +Since after updateRow(), ResultSet is positioned before the next
>     row, getXXX will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to read at current
>     cursor position.
>     > +calling updateRow/updateXXX again w/o first positioning the
>     ResultSet on the next row will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to update at current
>     cursor position
>     > +SQL State : null
>     > +Got expected exception Invalid operation to update at current
>     cursor position
>     > +SQL State : null
>     > +Got expected exception Invalid operation at current cursor position.
>     > +Position the ResultSet with next()
>     > +Should be able to cancelRowUpdates() on the current row now
>     > +Positive Test4 - use callable statement with concur updatable status
>     > +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
>     > +got TYPE_FORWARD_ONLY? true
>     > +got CONCUR_UPDATABLE? true
>     > +column 1 on this row is 1
>     > +Since after deleteRow(), ResultSet is positioned before the next
>     row, getXXX will fail
>     > +SQL State : null
>     > +Got expected exception Invalid operation to read at current
>     cursor position.
>     > +calling deleteRow again w/o first positioning the ResultSet on
>     the next row will fail
>     > +SQL State : 24000
>     > +Got expected exception Invalid cursor state - no current row.
>     > +Position the ResultSet with next()
>     > +Should be able to deletRow() on the current row now
>     > +Positive Test5 - donot have to select primary key to get an
>     updatable resultset
>     > +column 1 on this row is 1
>     > +now try to delete row when primary key is not selected for that row
>     > +Positive Test6a - For Forward Only resultsets, DatabaseMetaData
>     will return false for ownDeletesAreVisible and deletesAreDetected
>     > +This is because, after deleteRow, we position the ResultSet
>     before the next row. We don't make a hole for the deleted row and
>     then stay on that deleted hole
>     > +ownDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY )? false
>     > +othersDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? true
>     > +deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? false
>     > +The JDBC program should look at rowDeleted only if
>     deletesAreDetected returns true
>     > +Since Derby returns false for detlesAreDetected for FORWARD_ONLY
>     updatable resultset,the program should not rely on rs.rowDeleted()
>     for FORWARD_ONLY updatable resultsets
>     > +Have this call to rs.rowDeleted() just to make sure the method
>     does always return false? false
>     > +Have this call to rs.rowDeleted() just to make sure the method
>     does always return false? false
>     > +Positive Test6b - For Forward Only resultsets, DatabaseMetaData
>     will return false for ownUpdatesAreVisible and updatesAreDetected
>     > +This is because, after updateRow, we position the ResultSet
>     before the next row
>     > +ownUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? false
>     > +othersUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? true
>     > +updatesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? false
>     > +The JDBC program should look at rowUpdated only if
>     updatesAreDetected returns true
>     > +Since Derby returns false for updatesAreDetected for FORWARD_ONLY
>     updatable resultset,the program should not rely on rs.rowUpdated()
>     for FORWARD_ONLY updatable resultsets
>     > +Have this call to rs.rowUpdated() just to make sure the method
>     does always return false? false
>     > +Have this call to rs.rowUpdated() just to make sure the method
>     does always return false? false
>     > +Positive Test7a - delete using updatable resultset api from a
>     temporary table
>     > +following rows in temp table before deleteRow
>     > +      C21,C22
>     > +      --- ---
>     > +     {21,1}
>     > +     {22,1}
>     > +As expected, no rows in temp table after deleteRow
>     > +      C21,C22
>     > +      --- ---
>     > +Positive Test7b - update using updatable resultset api from a
>     temporary table
>     > +following rows in temp table before deleteRow
>     > +      C31,C32
>     > +      --- ---
>     > +     {21,1}
>     > +     {22,1}
>     > +As expected, updated rows in temp table after updateRow
>     > +      C31,C32
>     > +      --- ---
>     > +     {123,1}
>     > +     {123,1}
>     > +Positive Test8a - change the name of the statement when the
>     resultset is open and see if deleteRow still works
>     > +This test works in embedded mode since Derby can handle the
>     change in the name of the statement with an open resultset
>     > +But it fails under Network Server mode because JCC and Derby Net
>     Client do not allow statement name change when there an open
>     resultset against it
>     > +change the cursor name(case sensitive name) with setCursorName
>     and then try to deleteRow
>     > +change the cursor name one more time with setCursorName and then
>     try to deleteRow
>     > +SQL State : null
>     > +Got expected exception Invalid operation: setCursorName() called
>     when there are open ResultSet's on the Statement.
>     > +Positive Test8b - change the name of the statement when the
>     resultset is open and see if updateRow still works
>     > +This test works in embedded mode since Derby can handle the
>     change in the name of the statement with an open resultset
>     > +But it fails under Network Server mode because JCC and Derby Net
>     Client do not allow statement name change when there an open
>     resultset against it
>     > +change the cursor name one more time with setCursorName and then
>     try to updateRow
>     > +change the cursor name(case sensitive name) with setCursorName
>     and then try to updateRow
>     > +SQL State : null
>     > +Got expected exception Invalid operation: setCursorName() called
>     when there are open ResultSet's on the Statement.
>     > +Positive Test9a - using correlation name for the table in the
>     select sql works in embedded mode and Network Server using Derby Net
>     Client driver
>     > +Correlation name for table does not work in Network Server mode
>     (using JCC) because the drivers construct the delete sql with the
>     correlation name rather than the base table name
>     > +column 1 on this row is 1
>     > +now try to deleteRow
>     > +PASS!!! passed in embedded mode
>     > +Positive Test9b - using correlation name for updatable columns is
>     not allowed.
>     > +Table t1 has following rows
>     > +      C1,C2
>     > +      -- --
>     > +     {1,aa                  }
>     > +     {2,bb                  }
>     > +     {3,cc                  }
>     > +attempt to get an updatable resultset using correlation name for
>     an updatable column
>     > +The sql is SELECT c1 as col1, c2 as col2 FROM t1 abcde FOR UPDATE
>     of c1
>     > +SQL State : 42X42
>     > +Got expected exception Correlation name not allowed for column
>     'C1' because it is part of the FOR UPDATE list.
>     > +attempt to get an updatable resultset using correlation name for
>     an readonly column. It should work
>     > +The sql is SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
>     > +Table t1 after updateRow has following rows
>     > +      C1,C2
>     > +      -- --
>     > +     {11,aa                  }
>     > +     {2,bb                  }
>     > +     {3,cc                  }
>     > +Positive Test9c - try to updateXXX on a readonly column. Should
>     get error
>     > +SQL State : null
>     > +Got expected exception Column not updatable
>     > +attempt to get an updatable resultset using correlation name for
>     an readonly column. It should work
>     > +The sql is SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
>     > +Table t1 after updateRow has following rows
>     > +      C1,C2
>     > +      -- --
>     > +     {11,aa                  }
>     > +     {2,bb                  }
>     > +     {3,cc                  }
>     > +Positive Test9d - try to updateXXX on a readonly column with
>     correlation name. Should get error
>     > +SQL State : null
>     > +Got expected exception Column not updatable
>     > +Table t1 has following rows
>     > +      C1,C2
>     > +      -- --
>     > +     {1,aa                  }
>     > +     {2,bb                  }
>     > +     {3,cc                  }
>     > +Positive Test10 - 2 updatable resultsets going against the same
>     table, will they conflict?
>     > +delete using first resultset
>     > +attempt to send deleteRow on the same row through a different
>     resultset should throw an exception
>     > +SQL State : XCL08
>     > +Got expected exception Cursor 'SQL_CURLH000C51' is not on a row.
>     > +Move to next row in the 2nd resultset and then delete using the
>     second resultset
>     > +Positive Test11 - setting the fetch size to > 1 will be ignored
>     by updatable resultset. Same as updatable cursors
>     > +Notice the Fetch Size in run time statistics output.
>     > +1
> 
>     > +-----
>     > +Statement Name:
>     > +     SQL_CURLH000C54
>     > +Statement Text:
>     > +     SELECT * FROM t1 FOR UPDATE of c1
>     > +Parse Time: 0
>     > +Bind Time: 0
>     > +Optimize Time: 0
>     > +Generate Time: 0
>     > +Compile Time: 0
>     > +Execute Time: 0
>     > +Begin Compilation Timestamp : null
>     > +End Compilation Timestamp : null
>     > +Begin Execution Timestamp : null
>     > +End Execution Timestamp : null
>     > +Statement Execution Plan Text:
>     > +Table Scan ResultSet for T1 at read committed isolation level
>     using exclusive row locking chosen by the optimizer
>     > +Number of opens = 1
>     > +Rows seen = 0
>     > +Rows filtered = 0
>     > +Fetch Size = 1
>     > +     constructor time (milliseconds) = 0
>     > +     open time (milliseconds) = 0
>     > +     next time (milliseconds) = 0
>     > +     close time (milliseconds) = 0
>     > +scan information:
>     > +     Bit set of columns fetched=All
>     > +     Number of columns fetched=2
>     > +     Number of pages visited=0
>     > +     Number of rows qualified=0
>     > +     Number of rows visited=0
>     > +     Scan type=heap
>     > +     start position:
>     > +null stop position:
>     > +null qualifiers:
>     > +None
>     > +statement's fetch size is 200
>     > +Positive Test12a - make sure delete trigger gets fired when
>     deleteRow is issued
>     > +Verify that before delete trigger got fired, row count is 0 in
>     deleteTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {0}
>     > +column 1 on this row is 1
>     > +now try to delete row and make sure that trigger got fired
>     > +Verify that delete trigger got fired by verifying the row count
>     to be 1 in deleteTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {1}
>     > +Positive Test12b - make sure update trigger gets fired when
>     updateRow is issued
>     > +Verify that before update trigger got fired, row count is 0 in
>     updateTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {0}
>     > +column 1 on this row is 1
>     > +now try to update row and make sure that trigger got fired
>     > +Verify that update trigger got fired by verifying the row count
>     to be 1 in updateTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {1}
>     > +Positive Test13a - Another test case for delete trigger
>     > +column 1 on this row is 1
>     > +this delete row will fire the delete trigger which will delete
>     all the rows from the table and from the resultset
>     > +SQL State : null
>     > +Got expected exception Invalid operation: result set closed
>     > +Verify that delete trigger got fired by verifying the row count
>     to be 0 in table1WithTriggers
>     > +      1
>     > +      -
>     > +     {0}
>     > +Positive Test13b - Another test case for update trigger
>     > +Look at the current contents of table2WithTriggers
>     > +      C1,C2
>     > +      -- --
>     > +     {1,1}
>     > +     {2,2}
>     > +     {3,3}
>     > +     {4,4}
>     > +column 1 on this row is 2
>     > +this update row will fire the update trigger which will update
>     all the rows in the table to have c1=1 and hence no more rows will
>     qualify for the resultset
>     > +SQL State : null
>     > +Got expected exception Invalid operation: result set closed
>     > +Verify that update trigger got fired by verifying that all column
>     c1s have value 1 in table2WithTriggers
>     > +      C1,C2
>     > +      -- --
>     > +     {1,1}
>     > +     {1,2}
>     > +     {1,3}
>     > +     {1,4}
>     > +Positive Test14a - make sure self referential delete cascade
>     works when deleteRow is issued
>     > +      C1,C2
>     > +      -- --
>     > +     {e1,null}
>     > +     {e2,e1}
>     > +     {e3,e2}
>     > +     {e4,e3}
>     > +column 1 on this row is e1
>     > +this delete row will cause the delete cascade constraint to
>     delete all the rows from the table and from the resultset
>     > +SQL State : null
>     > +Got expected exception Invalid operation: result set closed
>     > +Verify that delete trigger got fired by verifying the row count
>     to be 0 in selfReferencingT1
>     > +      1
>     > +      -
>     > +     {0}
>     > +Positive Test14b - make sure self referential update restrict
>     works when updateRow is issued
>     > +      C1,C2
>     > +      -- --
>     > +     {e1,null}
>     > +     {e2,e1}
>     > +     {e3,e2}
>     > +     {e4,e3}
>     > +column 1 on this row is e1
>     > +update row should fail because cascade constraint is update restrict
>     > +SQL State : 23503
>     > +Got expected exception UPDATE on table 'SELFREFERENCINGT2' caused
>     a violation of foreign key constraint 'MANAGES2' for key (e1).  The
>     statement has been rolled back.
>     > +Positive Test15 - With autocommit off, attempt to drop a table
>     when there is an open updatable resultset on it
>     > +Opened an updatable resultset. Now trying to drop that table
>     through another Statement
>     > +SQL State : X0X95
>     > +Got expected exception Operation 'DROP TABLE' cannot be performed
>     on object 'T1' because there is an open ResultSet dependent on that
>     object.
>     > +Since autocommit is off, the drop table exception will NOT result
>     in a runtime rollback and hence updatable resultset object is still
>     open
>     > +Positive Test16a - Do deleteRow within a transaction and then
>     rollback the transaction
>     > +Verify that before delete trigger got fired, row count is 0 in
>     deleteTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {0}
>     > +Verify that before deleteRow, row count is 4 in table0WithTriggers
>     > +      1
>     > +      -
>     > +     {4}
>     > +column 1 on this row is 1
>     > +now try to delete row and make sure that trigger got fired
>     > +Verify that delete trigger got fired by verifying the row count
>     to be 1 in deleteTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {1}
>     > +Verify that deleteRow in transaction, row count is 3 in
>     table0WithTriggers
>     > +      1
>     > +      -
>     > +     {3}
>     > +Verify that after rollback, row count is back to 0 in
>     deleteTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {0}
>     > +Verify that after rollback, row count is back to 4 in
>     table0WithTriggers
>     > +      1
>     > +      -
>     > +     {4}
>     > +Positive Test16b - Do updateRow within a transaction and then
>     rollback the transaction
>     > +Verify that before update trigger got fired, row count is 0 in
>     updateTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {0}
>     > +Look at the data in table0WithTriggers before trigger gets fired
>     > +      C1,C2
>     > +      -- --
>     > +     {1,1}
>     > +     {2,2}
>     > +     {3,3}
>     > +     {4,4}
>     > +column 1 on this row is 1
>     > +now try to update row and make sure that trigger got fired
>     > +Verify that update trigger got fired by verifying the row count
>     to be 1 in updateTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {1}
>     > +Verify that new data in table0WithTriggers
>     > +      C1,C2
>     > +      -- --
>     > +     {123,1}
>     > +     {2,2}
>     > +     {3,3}
>     > +     {4,4}
>     > +Verify that after rollback, row count is back to 0 in
>     updateTriggerInsertIntoThisTable
>     > +      1
>     > +      -
>     > +     {0}
>     > +Verify that after rollback, table0WithTriggers is back to its
>     original contents
>     > +      C1,C2
>     > +      -- --
>     > +     {1,1}
>     > +     {2,2}
>     > +     {3,3}
>     > +     {4,4}
>     > +Positive Test17 - After deleteRow, resultset is positioned before
>     the next row
>     > +getXXX right after deleteRow will fail because resultset is not
>     positioned on a row, instead it is right before the next row
>     > +SQL State : null
>     > +Got expected exception Invalid operation to read at current
>     cursor position.
>     > +Positive Test18 - Test cancelRowUpdates method as the first
>     updatable ResultSet api on a read-only resultset
>     > +SQL State : null
>     > +Got expected exception This method cannot be invoked while the
>     cursor is on the insert row or if this ResultSet object has a
>     concurrency of CONCUR_READ_ONLY.
>     > +Positive Test19 - Test updateRow method as the first updatable
>     ResultSet api on a read-only resultset
>     > +  Got expected exception : This method cannot be invoked while
>     the cursor is on the insert row or if the concurrency of this
>     ResultSet object is CONCUR_READ_ONLY.
>     > +Positive Test20 - Test updateXXX methods as the first updatable
>     ResultSet api on a read-only resultset
>     > +  Test updateShort on a readonly resultset
>     > +  Using column position as first parameter to updateShort
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateShort
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateInt on a readonly resultset
>     > +  Using column position as first parameter to updateInt
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateInt
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateLong on a readonly resultset
>     > +  Using column position as first parameter to updateLong
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateLong
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateBigDecimal on a readonly resultset
>     > +  Using column position as first parameter to updateBigDecimal
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateBigDecimal
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateFloat on a readonly resultset
>     > +  Using column position as first parameter to updateFloat
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateFloat
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateDouble on a readonly resultset
>     > +  Using column position as first parameter to updateDouble
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateDouble
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateString on a readonly resultset
>     > +  Using column position as first parameter to updateString
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateString
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateAsciiStream on a readonly resultset
>     > +  Using column position as first parameter to updateAsciiStream
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateAsciiStream
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateCharacterStream on a readonly resultset
>     > +  Using column position as first parameter to updateCharacterStream
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateCharacterStream
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateByte on a readonly resultset
>     > +  Using column position as first parameter to updateByte
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateByte
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateBytes on a readonly resultset
>     > +  Using column position as first parameter to updateBytes
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateBytes
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateBinaryStream on a readonly resultset
>     > +  Using column position as first parameter to updateBinaryStream
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateBinaryStream
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateClob on a readonly resultset
>     > +  Using column position as first parameter to updateClob
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Using column name as first parameter to updateClob
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Test updateDate on a readonly resultset
>     > +  Using column position as first parameter to updateDate
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateDate
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateTime on a readonly resultset
>     > +  Using column position as first parameter to updateTime
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateTime
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateTimestamp on a readonly resultset
>     > +  Using column position as first parameter to updateTimestamp
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateTimestamp
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateBlob on a readonly resultset
>     > +  Using column position as first parameter to updateBlob
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Using column name as first parameter to updateBlob
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Test updateBoolean on a readonly resultset
>     > +  Using column position as first parameter to updateBoolean
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateBoolean
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateNull on a readonly resultset
>     > +  Using column position as first parameter to updateNull
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Using column name as first parameter to updateNull
>     > +  Got expected exception : ResultSet is not updatable.
>     > +  Test updateArray on a readonly resultset
>     > +  Using column position as first parameter to updateArray
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Using column name as first parameter to updateArray
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Test updateRef on a readonly resultset
>     > +  Using column position as first parameter to updateRef
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +  Using column name as first parameter to updateRef
>     > +  Got expected exception : JDBC 3 method called - not yet supported
>     > +Positive Test21 - Test all updateXXX(excluding updateObject)
>     methods on all the supported sql datatypes
>     > +Next datatype to test is SMALLINT
>     > +  Testing updateShort on SQL type SMALLINT
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type SMALLINT
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type SMALLINT
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type SMALLINT
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type SMALLINT
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type SMALLINT
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type SMALLINT
>     > +    Using column position as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +    Using column name as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +  Testing updateAsciiStream on SQL type SMALLINT
>     > +    Using column position as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateCharacterStream on SQL type SMALLINT
>     > +    Using column position as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateByte on SQL type SMALLINT
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type SMALLINT
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type SMALLINT
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type SMALLINT
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type SMALLINT
>     > +    Using column position as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTime on SQL type SMALLINT
>     > +    Using column position as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTimestamp on SQL type SMALLINT
>     > +    Using column position as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBlob on SQL type SMALLINT
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type SMALLINT
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type SMALLINT
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type SMALLINT
>     > +    Using column position as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateRef on SQL type SMALLINT
>     > +    Using column position as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +Next datatype to test is INTEGER
>     > +  Testing updateShort on SQL type INTEGER
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type INTEGER
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type INTEGER
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type INTEGER
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type INTEGER
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type INTEGER
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type INTEGER
>     > +    Using column position as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +    Using column name as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +  Testing updateAsciiStream on SQL type INTEGER
>     > +    Using column position as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateCharacterStream on SQL type INTEGER
>     > +    Using column position as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateByte on SQL type INTEGER
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type INTEGER
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type INTEGER
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type INTEGER
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type INTEGER
>     > +    Using column position as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTime on SQL type INTEGER
>     > +    Using column position as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTimestamp on SQL type INTEGER
>     > +    Using column position as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBlob on SQL type INTEGER
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type INTEGER
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type INTEGER
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type INTEGER
>     > +    Using column position as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateRef on SQL type INTEGER
>     > +    Using column position as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +Next datatype to test is BIGINT
>     > +  Testing updateShort on SQL type BIGINT
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type BIGINT
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type BIGINT
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type BIGINT
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type BIGINT
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type BIGINT
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type BIGINT
>     > +    Using column position as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +    Using column name as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +  Testing updateAsciiStream on SQL type BIGINT
>     > +    Using column position as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateCharacterStream on SQL type BIGINT
>     > +    Using column position as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateByte on SQL type BIGINT
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type BIGINT
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type BIGINT
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type BIGINT
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type BIGINT
>     > +    Using column position as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTime on SQL type BIGINT
>     > +    Using column position as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTimestamp on SQL type BIGINT
>     > +    Using column position as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBlob on SQL type BIGINT
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type BIGINT
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type BIGINT
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type BIGINT
>     > +    Using column position as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateRef on SQL type BIGINT
>     > +    Using column position as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +Next datatype to test is DECIMAL(10,5)
>     > +  Testing updateShort on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +    Using column name as first parameter to updateString
>     > +      Got expected exception : Invalid data conversion: Parameter
>     instance
>     1992                                                         is
>     invalid for requested conversion.
>     > +  Testing updateAsciiStream on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateCharacterStream on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateByte on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTime on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTimestamp on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBlob on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateRef on SQL type DECIMAL(10,5)
>     > +    Using column position as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +Next datatype to test is REAL
>     > +  Testing updateShort on SQL type REAL
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type REAL
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type REAL
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type REAL
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type REAL
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type REAL
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type REAL
>     > +    Using column position as first parameter to updateString
>     > +    Using column name as first parameter to updateString
>     > +  Testing updateAsciiStream on SQL type REAL
>     > +    Using column position as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateCharacterStream on SQL type REAL
>     > +    Using column position as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateByte on SQL type REAL
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type REAL
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type REAL
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type REAL
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type REAL
>     > +    Using column position as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTime on SQL type REAL
>     > +    Using column position as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTimestamp on SQL type REAL
>     > +    Using column position as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBlob on SQL type REAL
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type REAL
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type REAL
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type REAL
>     > +    Using column position as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateRef on SQL type REAL
>     > +    Using column position as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +Next datatype to test is DOUBLE
>     > +  Testing updateShort on SQL type DOUBLE
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type DOUBLE
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type DOUBLE
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type DOUBLE
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type DOUBLE
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type DOUBLE
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type DOUBLE
>     > +    Using column position as first parameter to updateString
>     > +    Using column name as first parameter to updateString
>     > +  Testing updateAsciiStream on SQL type DOUBLE
>     > +    Using column position as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateAsciiStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateCharacterStream on SQL type DOUBLE
>     > +    Using column position as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateCharacterStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateByte on SQL type DOUBLE
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type DOUBLE
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type DOUBLE
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type DOUBLE
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type DOUBLE
>     > +    Using column position as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateDate
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTime on SQL type DOUBLE
>     > +    Using column position as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTime
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateTimestamp on SQL type DOUBLE
>     > +    Using column position as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateTimestamp
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBlob on SQL type DOUBLE
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type DOUBLE
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type DOUBLE
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type DOUBLE
>     > +    Using column position as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateArray
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateRef on SQL type DOUBLE
>     > +    Using column position as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateRef
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +Next datatype to test is CHAR(60)
>     > +  Testing updateShort on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateShort
>     > +    Using column name as first parameter to updateShort
>     > +  Testing updateInt on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateInt
>     > +    Using column name as first parameter to updateInt
>     > +  Testing updateLong on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateLong
>     > +    Using column name as first parameter to updateLong
>     > +  Testing updateBigDecimal on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateBigDecimal
>     > +    Using column name as first parameter to updateBigDecimal
>     > +  Testing updateFloat on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateFloat
>     > +    Using column name as first parameter to updateFloat
>     > +  Testing updateDouble on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateDouble
>     > +    Using column name as first parameter to updateDouble
>     > +  Testing updateString on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateString
>     > +    Using column name as first parameter to updateString
>     > +  Testing updateAsciiStream on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateAsciiStream
>     > +    Using column name as first parameter to updateAsciiStream
>     > +  Testing updateCharacterStream on SQL type CHAR(60)
>     > +    Using column position as first parameter to
>     updateCharacterStream
>     > +    Using column name as first parameter to updateCharacterStream
>     > +  Testing updateByte on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateByte
>     > +    Using column name as first parameter to updateByte
>     > +  Testing updateBytes on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBytes
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateBinaryStream on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +    Using column name as first parameter to updateBinaryStream
>     > +      Got expected exception : Illegal Conversion
>     > +  Testing updateClob on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateClob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateDate on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateDate
>     > +    Using column name as first parameter to updateDate
>     > +  Testing updateTime on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateTime
>     > +    Using column name as first parameter to updateTime
>     > +  Testing updateTimestamp on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateTimestamp
>     > +    Using column name as first parameter to updateTimestamp
>     > +  Testing updateBlob on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +    Using column name as first parameter to updateBlob
>     > +      Got expected exception : JDBC 3 method called - not yet
>     supported
>     > +  Testing updateBoolean on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateBoolean
>     > +    Using column name as first parameter to updateBoolean
>     > +  Testing updateNull on SQL type CHAR(60)
>     > +    Using column position as first parameter to updateNull
>     > +    Using column name as first parameter to updateNull
>     > +  Testing updateArray on SQL type CHAR(60)
>     > +    Using col...
> 
>     [Message clipped]
> 
> 


Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Mamta Satoor <ms...@gmail.com>.
Hi,
 Can someone please commit this minor patch?
 thanks,
Mamta

 On 6/4/05, Mamta Satoor <ms...@gmail.com> wrote: 
> 
> Hi Satheesh,
>  I have a very small patch to address your review comments on UpdatableResultset support for Network Server using Derby Net Client.
>  svn stat 
> M java\client\org\apache\derby\client\am\ResultSet.java
>  Please commit it if there are no issues.
>  thanks,
> Mamta
> 
>  On 5/23/05, Satheesh Bandaram <sa...@sourcery.org> wrote: 
> > 
> > Some minor comments... Use them if they apply....
> > 
> > 
> >    1. Not sure if resultSetMetaData_.sqlxRdbnam_[baseTableColumn] is 
> >    ever set, so no need to check for that. 
> >    2. Use sqlxBasename_ instead of sqlxSchema_ when looking for a 
> >    valid base table. While both may work, it may be more readable. 
> > 
> > Satheesh
> > 
> >  
>

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Andrew McIntyre <mc...@gmail.com>.
On Jun 8, 2005, at 11:56 PM, Mamta Satoor wrote:

> I did sync on couple of my clients and for some reason,  
> ResultSet.java still shows the following deleted lines(these were  
> deleted as part of the commit 189486. Do you or anyone else see  
> these lines in your client?
> -        if (resultSetMetaData_.sqlxRdbnam_[baseTableColumn] !=  
> null &&
> -                !resultSetMetaData_.sqlxRdbnam_ 
> [baseTableColumn].equals(""))      // catalog
> -        {
> -            tableName += "\"" + resultSetMetaData_.sqlxRdbnam_ 
> [baseTableColumn] + "\".";
> -        }

Hi Mamta,

I also just did an svn up and these lines are still in my java\client 
\org\apache\derby\client\am\ ResultSet.java, at lines 3145-3149.

andrew

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Mamta Satoor <ms...@gmail.com>.
Hi Satheesh,
 I did sync on couple of my clients and for some reason,
ResultSet.javastill shows the following deleted lines(these were
deleted as part of the
commit 189486. Do you or anyone else see these lines in your client?
- if (resultSetMetaData_.sqlxRdbnam_[baseTableColumn] != null &&
- !resultSetMetaData_.sqlxRdbnam_[baseTableColumn].equals("")) // catalog
- {
- tableName += "\"" + resultSetMetaData_.sqlxRdbnam_[baseTableColumn] + 
"\".";
- }
 thanks,
Mamta
 On 6/7/05, Satheesh Bandaram <sa...@sourcery.org> wrote: 
> 
> Committed.
> 
> Sending java\client\org\apache\derby\client\am\ResultSet.java
> Transmitting file data .
> Committed revision 189486.
> [bandaram:satheesh]
> 
> Satheesh
> 
> Mamta Satoor wrote:
> 
>  Hi Satheesh,
>  I have a very small patch to address your review comments on Updatable 
> Resultset support for Network Server using Derby Net Client.
>  svn stat 
> M java\client\org\apache\derby\client\am\ResultSet.java
>  Please commit it if there are no issues.
>  thanks,
> Mamta
> 
>  On 5/23/05, Satheesh Bandaram <sa...@sourcery.org> wrote: 
> > 
> > Some minor comments... Use them if they apply....
> > 
> > 
> >    1. Not sure if resultSetMetaData_.sqlxRdbnam_[baseTableColumn] is 
> >    ever set, so no need to check for that. 
> >    2. Use sqlxBasename_ instead of sqlxSchema_ when looking for a 
> >    valid base table. While both may work, it may be more readable. 
> > 
> > Satheesh
> > 
> >  ------------------------------
> 
> Index: java/client/org/apache/derby/client/am/ResultSet.java ===================================================================
> --- java/client/org/apache/derby/client/am/ResultSet.java (revision 179793) +++ java/client/org/apache/derby/client/am/ResultSet.java (working copy) @@ -3134,7 +3134,7 @@ int baseTableColumn = 0; int totalColumns = resultSetMetaData_.getColumnCount();
>          for (; baseTableColumn < totalColumns; baseTableColumn++) {
> -            if (resultSetMetaData_.sqlxSchema_[baseTableColumn] != null)
> +            if (resultSetMetaData_.sqlxBasename_[baseTableColumn] != null)
>                  break;
>          }
>  
> @@ -3142,11 +3142,6 @@
>          if (baseTableColumn == totalColumns)
>              baseTableColumn = 0;
>  
> -        if (resultSetMetaData_.sqlxRdbnam_[baseTableColumn] != null &&
> -                !resultSetMetaData_.sqlxRdbnam_[baseTableColumn].equals(""))      // catalog
> -        {
> -            tableName += "\"" + resultSetMetaData_.sqlxRdbnam_[baseTableColumn] + "\".";
> -        }
>          //dervied column like select 2 from t1, has null schema and table name
>          if (resultSetMetaData_.sqlxSchema_[baseTableColumn] != null && !resultSetMetaData_.sqlxSchema_[baseTableColumn].equals("")) {
>              tableName += "\"" + resultSetMetaData_.sqlxSchema_[baseTableColumn] + "\".";
>   
> 
>

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Mamta Satoor <ms...@gmail.com>.
Hi Satheesh,
 I have a very small patch to address your review comments on Updatable 
Resultset support for Network Server using Derby Net Client.
 svn stat 
M java\client\org\apache\derby\client\am\ResultSet.java
 Please commit it if there are no issues.
 thanks,
Mamta

 On 5/23/05, Satheesh Bandaram <sa...@sourcery.org> wrote: 
> 
> Some minor comments... Use them if they apply....
> 
> 
>    1. Not sure if resultSetMetaData_.sqlxRdbnam_[baseTableColumn] is 
>    ever set, so no need to check for that. 
>    2. Use sqlxBasename_ instead of sqlxSchema_ when looking for a valid 
>    base table. While both may work, it may be more readable. 
> 
> Satheesh
> 
>

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Mamta Satoor <ms...@gmail.com>.
Hi,
 Please find attached another patch for updatable resultset support under 
Network Server. What changed in this patch compared to the first patch is 
Derby Net Client while constructing update/delete sql goes through all the 
columns(rather than just the first column) in the select list to determine 
the target table. There is still a problem when the select list does not 
include any base table columns at all. Embedded Derby does not face the 
problem because it does not rely on the select column's metadata to 
determine the target table, rather it looks at the language layer's 
activation directly. 
 So, the functionality for Network Server is similar to what Embedded Derby 
supports, with the exception of following updated list of differences
1)DNC requires that there be at least one column in the select list from the 
target table.
eg select 1, 2 from t1 for update of c11 will fail in Network Server because 
driver looks at both the columns in the select list and it can't determine 
the target table for update/delete looking at those columns' metadata. This 
is not required by embedded driver. There is test for this in the attached 
patch(Positive Test2 in updatableResultSet.java).
2)Embedded driver allows Statement name change when there is an open 
resultset on that statement object. DNC driver does not supported that. 
(Positive Test8a and Test8b in updatableResultSet.java )
3)(Positive Test20) Embedded driver allows updateString on SMALLINT, 
INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR 
datatypes. DNC doesn't
Embedded driver support updateTime on TIMESTAMP datatypes. DNC doesn't 
Embedded driver supports updateObject with null value. DNC doesn't
DNC does not support updateClob and updateBlob
 Also, I am running the derbyall suite to confirm nothing has broken. The 
updatable resultset test runs fine.
 thanks,
Mamta
 On 5/20/05, Mamta Satoor <ms...@gmail.com> wrote: 
> 
> Hi,
>  For the first difference (related to updatable resultset) that I 
> mentioned earlier between embedded and network server(copied below for easy 
> reference)
> 1)DNC requires that the first column in the select list be from the target 
> table.
> eg select 1, c11 from t1 for update of c11 will fail in Network Server 
> because driver looks at first column to determine the target table for 
> update/delete. This is not required by embedded driver. There are tests for 
> this in the attached patch(Positive Test2 in updatableResultSet.java).
>  I am thinking of changing the Derby Net Client driver to see if it can 
> look at the subsequent columns to determine the target table for 
> update/delete rather than give up after trying to get that information from 
> the first column in the select list. Unless somone has objection to this 
> approach, I will look into implementing that so we can bring down the 
> differences between embedded and network server behavior. 
>  Mamta
> 
>  On 5/20/05, Mamta Satoor <ms...@gmail.com> wrote: 
> 
> >  Hi David,
> >  I have not yet entered JIRA bugs for these differences. Once the patch 
> > is committed, I can go ahead and make JIRA entries. Also, yes, I hope that 
> > these differences can be listed in maybe Server and Admin Guide's existing 
> > section "Differences between running Derby in embedded mode and using the 
> > network server". 
> >  Mamta
> > 
> >   On 5/19/05, David Van Couvering < david@vancouvering.com> wrote: 
> > 
> > >  Hi Mamta. These are some pretty significant incompatibilities between
> > > DNC and Embedded drivers. Are all these logged as JIRA bugs? Are 
> > > they/will they be called out in the documentation? 
> > > 
> > > Thanks,
> > > 
> > > David
> > > 
> > > Mamta Satoor wrote:
> > > 
> > > > Hi,
> > > >
> > > > Sometime back, I submitted patches for update and delete on forward 
> > > only
> > > > updatable resultsets using JDBC apis for Embedded Derby. With this 
> > > mail, 
> > > > I would like to submit similar support for Network Server using 
> > > Derby
> > > > Net Client.
> > > >
> > > > The functionality for Network Server is similar to what Embedded 
> > > Derby
> > > > supports, with the exception of following differences 
> > > > 1)DNC requires that the first column in the select list be from the
> > > > target table.
> > > > eg select 1, c11 from t1 for update of c11 will fail in Network 
> > > Server
> > > > because driver looks at first column to determine the target table 
> > > for 
> > > > update/delete. This is not required by embedded driver. There are 
> > > tests
> > > > for this in the attached patch(Positive Test2 in 
> > > updatableResultSet.java).
> > > > 2)Embedded driver allows Statement name change when there is an open 
> > > 
> > > > resultset on that statement object. DNC driver does not supported 
> > > that.
> > > > (Positive Test8a and Test8b in updatableResultSet.java )
> > > > 3)(Positive Test20) Embedded driver allows updateString on SMALLINT, 
> > > 
> > > > INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
> > > > Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR
> > > > datatypes. DNC doesn't
> > > > Embedded driver support updateTime on TIMESTAMP datatypes. DNC 
> > > doesn't 
> > > > Embedded driver supports updateObject with null value. DNC doesn't
> > > > DNC does not support updateClob and updateBlob
> > > >
> > > > Following files are changed by this patch
> > > > **************svn stat************ 
> > > > M
> > > > 
> > > java\testing\org\apache\derbyTesting\functionTests\tests\lang\updatableResultSet.java
> > > > M
> > > > 
> > > java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\updatableResultSet.out
> > > >
> > > > M
> > > > 
> > > java\testing\org\apache\derbyTesting\functionTests\master\updatableResultSet.out
> > > > M
> > > > 
> > > java\testing\org\apache\derbyTesting\functionTests\master\jdk14\updatableResultSet.out
> > > > M
> > > > 
> > > java\testing\org\apache\derbyTesting\functionTests\suites\DerbyNet.exclude
> > > > M java\client\org\apache\derby\client\am\ResultSet.java
> > > > **********************************
> > > >
> > > > Following is a brief description of the actual changes that are 
> > > going 
> > > > into the patch
> > > > 1)After updateRow(provided updateXXX were issued on the row before
> > > > updateRow) and deleteRow, position the resultset to right before the
> > > > next row. This matches the embedded driver behavior. 
> > > > 2)If ResultSet is not positioned on a row and user issues updateRow 
> > > (w/o
> > > > prior updateXXX), then throw an exception that it is not a valid
> > > > operation. This matches the embedded driver behavior.
> > > > 3)Made changes to DNC so that it does not require all the updatable 
> > > > columns in the sql to be modified with updateXXX prior to updateRow.
> > > > This matches the embedded driver behavior.
> > > > 4)To preserve case sensitivity and spaces in the names, put quotes
> > > > around database object names like table name, column name, cursor 
> > > name 
> > > > etc. Similar to embedded driver.(Positive Test31a, Test31b)
> > > > 5)For a select sql like, select 2, c11 from t1, Derby has null for 
> > > table
> > > > name and schema name for column 2. DNC needs to check for these 
> > > nulls to 
> > > > avoid null pointer exception.
> > > >
> > > > As always, please review the patch and let me know of any comments,
> > > > Mamta
> > > >
> > > >
> > > >
> > > > 
> > > ------------------------------------------------------------------------ 
> > > >
> > > > Index: 
> > > java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java
> > > > ===================================================================
> > > > --- 
> > > java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java 
> > > (revision 170535) 
> > > > +++ 
> > > java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java 
> > > (working copy)
> > > > @@ -253,13 +253,7 @@
> > > > System.out.println("Negative Testl - request for scroll insensitive 
> > > updatable resultset will give a read only scroll insensitive resultset"); 
> > > > conn.clearWarnings();
> > > > stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - warnings = conn.getWarnings ();
> > > > - while (warnings != null)
> > > > - {
> > > > - JDBCDisplayUtil.ShowWarnings(System.out, warnings);
> > > > - warnings = warnings.getNextWarning();
> > > > - }
> > > > - conn.clearWarnings();
> > > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > > System.out.println ("requested TYPE_SCROLL_INSENSITIVE, 
> > > CONCUR_UPDATABLE but that is not supported");
> > > > System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " 
> > > + (stmt.getResultSetType () == ResultSet.TYPE_SCROLL_INSENSITIVE));
> > > > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> > > stmt.getResultSetConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > > > @@ -292,12 +286,7 @@ 
> > > >
> > > > System.out.println("Negative Test2 - request for scroll sensitive 
> > > updatable resultset will give a read only scroll insensitive resultset");
> > > > stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - while (warnings != null)
> > > > - {
> > > > - System.out.println ("warnings on connection = " + warnings);
> > > > - warnings = warnings.getNextWarning();
> > > > - }
> > > > - conn.clearWarnings();
> > > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > > System.out.println("requested TYPE_SCROLL_SENSITIVE, 
> > > CONCUR_UPDATABLE but that is not supported");
> > > > System.out.println("Jira issue Derby-154 : When client connects to 
> > > Network Server using JCC, it incorrectly shows support for scroll sensitive 
> > > updatable resultsets"); 
> > > > System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " 
> > > + (stmt.getResultSetType() == ResultSet.TYPE_SCROLL_INSENSITIVE));
> > > > @@ -377,20 +366,13 @@
> > > > //have to close the resultset because by default, resultsets are 
> > > held open over commit 
> > > > rs.close();
> > > >
> > > > -
> > > > System.out.println("Negative Test5 - request updatable resultset for 
> > > sql with no FOR UPDATE clause");
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > rs = stmt.executeQuery("select * from t1");//notice that we forgot 
> > > to give mandatory FOR UPDATE clause for updatable resultset 
> > > > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> > > rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > > > System.out.println("Jira issue Derby-159 : Warnings raised by Derby 
> > > are not getting passed to the Client in Network Server Mode"); 
> > > > System.out.println("Will see the warnings in embedded mode only");
> > > > - warnings = rs.getWarnings();
> > > > - while (warnings != null) 
> > > > - {
> > > > - System.out.println("Expected warnings on resultset = " + 
> > > warnings);
> > > > - warnings = warnings.getNextWarning ();
> > > > - }
> > > > - rs.clearWarnings();
> > > > + JDBCDisplayUtil.ShowWarnings(System.out, rs);
> > > > rs.next();
> > > > System.out.println ("Now attempting to send a delete on a sql with 
> > > no FOR UPDATE clause.");
> > > > try {
> > > > @@ -410,7 +392,6 @@
> > > > System.out.println("SQL State : " + e.getSQLState());
> > > > System.out.println("Got expected exception " + e.getMessage());
> > > > }
> > > > -
> > > > //have to close the resultset because by default, resultsets are 
> > > held open over commit 
> > > > rs.close();
> > > >
> > > > @@ -420,13 +401,7 @@
> > > > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> > > rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY ));
> > > > System.out.println("Jira issue Derby-159 : Warnings raised by Derby 
> > > are not getting passed to the Client in Network Server Mode");
> > > > System.out.println ("Will see the warnings in embedded mode only");
> > > > - warnings = rs.getWarnings();
> > > > - while (warnings != null)
> > > > - {
> > > > - System.out.println("Expected warnings on resultset = " + 
> > > warnings);
> > > > - warnings = warnings.getNextWarning();
> > > > - }
> > > > - rs.clearWarnings ();
> > > > + JDBCDisplayUtil.ShowWarnings(System.out, rs);
> > > > rs.next();
> > > > System.out.println("Now attempting to send a delete on a sql with 
> > > FOR READ ONLY clause."); 
> > > > try {
> > > > @@ -463,14 +438,12 @@
> > > > System.out.println("Got expected exception " + e.getMessage());
> > > > }
> > > > System.out.println("Now attempt a updateRow without first doing next 
> > > on the resultset.");
> > > > - System.out.println("In embedded mode, updateRow will check if it 
> > > is on a row or not even though no changes have been made to the row using 
> > > updateXXX"); 
> > > > - System.out.println("In Network Server mode, if no updateXXX were 
> > > issued before updateRow, then updateRow is a no-op and doesn't check if it 
> > > is on a row or not");
> > > > + System.out.println("updateRow will check if it is on a row or not 
> > > even " +
> > > > + "though no changes have been made to the row using updateXXX");
> > > > try { 
> > > > rs.updateRow();
> > > > - if (TestUtil.isEmbeddedFramework())
> > > > - System.out.println("FAIL!!! In embedded mode, this updateRow 
> > > should have failed because resultset is not on a row"); 
> > > > - else
> > > > - System.out.println("PASS!!! In Network Server mode, this updateRow 
> > > is a no-op because no updateXXX were issued before the updateRow"); 
> > > > + System.out.println("FAIL!!! updateRow should have failed because " 
> > > +
> > > > + "resultset is not on a row");
> > > > } 
> > > > catch (SQLException e) {
> > > > System.out.println("SQL State : " + e.getSQLState());
> > > > @@ -664,12 +637,7 @@
> > > >
> > > > System.out.println("Positive Test1a - request updatable resultset 
> > > for forward only type resultset");
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE );
> > > > - warnings = conn.getWarnings();
> > > > - while (warnings != null)
> > > > - {
> > > > - System.out.println("Unexpected warnings = " + warnings); 
> > > > - warnings = warnings.getNextWarning();
> > > > - }
> > > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > > System.out.println("requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE"); 
> > > 
> > > > System.out.println("got TYPE_FORWARD_ONLY? " + (
> > > stmt.getResultSetType() == ResultSet.TYPE_FORWARD_ONLY));
> > > > System.out.println("got CONCUR_UPDATABLE? " + (
> > > stmt.getResultSetConcurrency () == ResultSet.CONCUR_UPDATABLE));
> > > > @@ -679,17 +647,15 @@
> > > > System.out.println("column 1 on this row before deleteRow is " + 
> > > rs.getInt(1));
> > > > System.out.println("column 2 on this row before deleteRow is " + 
> > > rs.getString(2));
> > > > rs.deleteRow();
> > > > - System.out.println("Since after deleteRow(), in embedded mode, 
> > > ResultSet is positioned before the next row, getXXX will fail");
> > > > - System.out.println("In Network Server mode, the ResultSet stays on 
> > > the deleted row after deleteRow and hence no error for getXXX");
> > > > + System.out.println("Since after deleteRow(), in embedded mode and 
> > > Network "+ 
> > > > + "Server mode using Derby Net Client, ResultSet is positioned 
> > > before " +
> > > > + "the next row, getXXX will fail");
> > > > try { 
> > > > System.out.println("column 1 on this deleted row is " + rs.getInt
> > > (1));
> > > > }
> > > > catch (SQLException e) {
> > > > - if ( TestUtil.isEmbeddedFramework()) {
> > > > - System.out.println("SQL State : " + e.getSQLState());
> > > > - System.out.println("Got expected exception " + e.getMessage());
> > > > - } else
> > > > - System.out.println("Got unexpected exception " + e.getMessage());
> > > > + System.out.println("SQL State : " + e.getSQLState());
> > > > + System.out.println("Got expected exception " + e.getMessage());
> > > > }
> > > > System.out.println("calling deleteRow again w/o first positioning 
> > > the ResultSet on the next row will fail");
> > > > try {
> > > > @@ -707,16 +673,10 @@
> > > > //have to close the resultset because by default, resultsets are 
> > > held open over commit 
> > > > rs.close();
> > > >
> > > > - if (TestUtil.isEmbeddedFramework()) {
> > > > System.out.println("Positive Test1b - request updatable resultset 
> > > for forward only type resultset"); 
> > > > reloadData();
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - warnings = conn.getWarnings(); 
> > > > - while (warnings != null)
> > > > - {
> > > > - System.out.println("Unexpected warnings = " + warnings);
> > > > - warnings = warnings.getNextWarning();
> > > > - }
> > > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > > rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE"); 
> > > > rs.next();
> > > > System.out.println("column 1 on this row before updateInt is " + 
> > > rs.getInt(1));
> > > > @@ -725,8 +685,9 @@
> > > > System.out.println ("column 2 on this row before updateString is " + 
> > > rs.getString(2));
> > > > System.out.println("now updateRow on the row");
> > > > rs.updateRow();
> > > > - System.out.println("Since after updateRow(), in embedded mode, 
> > > ResultSet is positioned before the next row, getXXX will fail");
> > > > - System.out.println("In Network Server mode, the ResultSet stays on 
> > > the updated row after updateRow and hence no error for getXXX"); 
> > > > + System.out.println("Since after updateRow(), in embedded mode and 
> > > Network "+
> > > > + "Server mode using Derby Net Client, ResultSet is positioned 
> > > before " + 
> > > > + "the next row, getXXX will fail");
> > > > try {
> > > > System.out.println("column 1 on this updateRow row is " + rs.getInt
> > > (1));
> > > > }
> > > > @@ -751,14 +712,33 @@
> > > > //have to close the resultset because by default, resultsets are 
> > > held open over commit
> > > > rs.close();
> > > >
> > > > - System.out.println("Positive Test2 - even if no columns from table 
> > > specified in the column list, we should be able to get updatable 
> > > resultset");
> > > > + System.out.println("Positive Test2 - even if no columns from table 
> > > " +
> > > > + "specified in the column list, we should be able to get updatable 
> > > " +
> > > > + "resultset"); 
> > > > reloadData();
> > > > + System.out.println("Will work in embedded mode because target 
> > > table is "+
> > > > + "not derived from the first column in the select list"); 
> > > > + System.out.println("Will not work in network server mode because 
> > > it " +
> > > > + "derives the target tabke from the first column in the select 
> > > list"); 
> > > > System.out.println("total number of rows in T1 ");
> > > > dumpRS(stmt.executeQuery("select count(*) from t1"));
> > > > rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE"); 
> > > > rs.next();
> > > > System.out.println("column 1 on this row is " + rs.getInt(1));
> > > > - rs.deleteRow();
> > > > + try {
> > > > + rs.deleteRow();
> > > > + if (TestUtil.isNetFramework())
> > > > + System.out.println("FAIL!!! should have failed in network 
> > > server");
> > > > + else 
> > > > + System.out.println("PASS!!! passed in embedded mode");
> > > > + }
> > > > + catch (SQLException e) {
> > > > + if ( TestUtil.isNetFramework()) {
> > > > + System.out.println("SQL State : " + e.getSQLState());
> > > > + System.out.println("Got expected exception " + e.getMessage());
> > > > + } else
> > > > + System.out.println("Got unexpected exception " + e.getMessage());
> > > > + }
> > > > //have to close the resultset because by default, resultsets are 
> > > held open over commit 
> > > > rs.close();
> > > > System.out.println("total number of rows in T1 after one deleteRow 
> > > is ");
> > > > @@ -908,7 +888,7 @@
> > > > System.out.println("deletesAreDetected( ResultSet.TYPE_FORWARD_ONLY)? 
> > > " + dbmt.deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY));
> > > > reloadData();
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE );
> > > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > > rs.next();
> > > > System.out.println("The JDBC program should look at rowDeleted only 
> > > if deletesAreDetected returns true");
> > > > System.out.println("Since Derby returns false for detlesAreDetected 
> > > for FORWARD_ONLY updatable resultset,the program should not rely on 
> > > rs.rowDeleted() for FORWARD_ONLY updatable resultsets");
> > > > @@ -971,21 +951,46 @@
> > > > rs.close();
> > > > stmt.executeUpdate("DROP TABLE SESSION.t3");
> > > >
> > > > - System.out.println("Positive Test8a - change the name of the 
> > > resultset and see if deleteRow still works");
> > > > + System.out.println("Positive Test8a - change the name of the 
> > > statement " + 
> > > > + "when the resultset is open and see if deleteRow still works");
> > > > + System.out.println("This test works in embedded mode since Derby 
> > > can " + 
> > > > + "handle the change in the name of the statement with an open 
> > > resultset");
> > > > + System.out.println("But it fails under Network Server mode because 
> > > JCC " + 
> > > > + "and Derby Net Client do not allow statement name change when 
> > > there " +
> > > > + "an open resultset against it");
> > > > reloadData(); 
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > System.out.println("change the cursor name(case sensitive name) with 
> > > setCursorName and then try to deleteRow"); 
> > > > stmt.setCursorName("CURSORNOUPDATe");//notice this name is case 
> > > sensitive
> > > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > > rs.next();
> > > > rs.deleteRow();
> > > > System.out.println("change the cursor name one more time with 
> > > setCursorName and then try to deleteRow"); 
> > > > - stmt.setCursorName("CURSORNOUPDATE1");
> > > > - rs.next();
> > > > - rs.deleteRow();
> > > > + try {
> > > > + stmt.setCursorName("CURSORNOUPDATE1");
> > > > + rs.next();
> > > > + rs.deleteRow();
> > > > + if (TestUtil.isNetFramework())
> > > > + System.out.println("FAIL!!! should have failed in network 
> > > server");
> > > > + else
> > > > + System.out.println ("PASS!!! passed in embedded mode");
> > > > + }
> > > > + catch (SQLException e) {
> > > > + if (TestUtil.isNetFramework()) {
> > > > + System.out.println("SQL State : " + e.getSQLState());
> > > > + System.out.println("Got expected exception " + e.getMessage());
> > > > + } else 
> > > > + System.out.println("Got unexpected exception " + e.getMessage());
> > > > + }
> > > > rs.close();
> > > >
> > > > - System.out.println("Positive Test8b - change the name of the 
> > > resultset and see if updateRow still works");
> > > > + System.out.println("Positive Test8b - change the name of the 
> > > statement " + 
> > > > + "when the resultset is open and see if updateRow still works");
> > > > + System.out.println("This test works in embedded mode since Derby 
> > > can " + 
> > > > + "handle the change in the name of the statement with an open 
> > > resultset");
> > > > + System.out.println("But it fails under Network Server mode because 
> > > JCC " + 
> > > > + "and Derby Net Client do not allow statement name change when 
> > > there " +
> > > > + "an open resultset against it");
> > > > reloadData(); 
> > > > System.out.println("change the cursor name one more time with 
> > > setCursorName and then try to updateRow");
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY , 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > @@ -994,21 +999,53 @@
> > > > rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > > rs.next();
> > > > rs.updateLong(1,123);
> > > > - stmt.setCursorName("CURSORNOUPDATE1");
> > > > - rs.updateRow();
> > > > + try {
> > > > + stmt.setCursorName("CURSORNOUPDATE1");
> > > > + rs.updateRow();
> > > > + if (TestUtil.isNetFramework())
> > > > + System.out.println ("FAIL!!! should have failed in network 
> > > server");
> > > > + else
> > > > + System.out.println("PASS!!! passed in embedded mode");
> > > > + } 
> > > > + catch (SQLException e) {
> > > > + if (TestUtil.isNetFramework()) {
> > > > + System.out.println("SQL State : " + e.getSQLState ());
> > > > + System.out.println("Got expected exception " + e.getMessage());
> > > > + } else
> > > > + System.out.println ("Got unexpected exception " + e.getMessage());
> > > > + }
> > > > rs.close();
> > > >
> > > > - System.out.println("Positive Test9a - using correlation name for 
> > > the table in the select sql is not a problem"); 
> > > > + System.out.println("Positive Test9a - using correlation name for 
> > > the " +
> > > > + "table in the select sql works in embedded mode and Network Server 
> > > " + 
> > > > + "using Derby Net Client driver");
> > > > + System.out.println("Correlation name for table does not work in 
> > > Network "+
> > > > + "Server mode (using JCC) because the drivers construct the delete 
> > > sql "+ 
> > > > + "with the correlation name rather than the base table name");
> > > > reloadData();
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY , 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 abcde FOR UPDATE of 
> > > c1");
> > > > + rs = stmt.executeQuery("SELECT * FROM t1 abcde FOR UPDATE of c1");
> > > > rs.next();
> > > > System.out.println("column 1 on this row is " + rs.getInt(1));
> > > > System.out.println("now try to deleteRow");
> > > > - rs.deleteRow();
> > > > + try {
> > > > + rs.deleteRow();
> > > > + if (TestUtil.isJCCFramework())
> > > > + System.out.println("FAIL!!! should have failed in network 
> > > server");
> > > > + else
> > > > + System.out.println("PASS!!! passed in embedded mode"); 
> > > > + }
> > > > + catch (SQLException e) {
> > > > + if (TestUtil.isJCCFramework()) {
> > > > + System.out.println ("SQL State : " + e.getSQLState());
> > > > + System.out.println("Got expected exception " + e.getMessage());
> > > > + } else
> > > > + System.out.println("Got unexpected exception " + e.getMessage());
> > > > + }
> > > > rs.close();
> > > > -
> > > > - System.out.println("Positive Test9b - using correlation name for 
> > > updatable column name is not allowed"); 
> > > > +
> > > > + System.out.println("Positive Test9b - using correlation name for " 
> > > +
> > > > + "updatable columns is not allowed.");
> > > > reloadData(); 
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > System.out.println("Table t1 has following rows");
> > > > @@ -1055,22 +1092,6 @@ 
> > > > System.out.println("Table t1 after updateRow has following rows");
> > > > dumpRS(stmt.executeQuery("select * from t1"));
> > > >
> > > > - System.out.println("Positive Test9c - try to updateXXX on a 
> > > readonly column. Should get error");
> > > > - reloadData();
> > > > - rs = stmt.executeQuery("SELECT c1, c2 FROM t1 abcde FOR UPDATE of 
> > > c1"); 
> > > > - rs.next();
> > > > - try {
> > > > - rs.updateString(2,"bbbb");
> > > > - System.out.println("FAIL!!! updateString on readonly column should 
> > > have failed"); 
> > > > - }
> > > > - catch (SQLException e) {
> > > > - System.out.println("SQL State : " + e.getSQLState());
> > > > - System.out.println("Got expected exception " + e.getMessage());
> > > > - }
> > > > - rs.close();
> > > > - System.out.println("Table t1 has following rows"); 
> > > > - dumpRS(stmt.executeQuery("select * from t1"));
> > > > -
> > > > System.out.println("Positive Test9d - try to updateXXX on a readonly 
> > > column with correlation name. Should get error"); 
> > > > reloadData();
> > > > rs = stmt.executeQuery("SELECT c1, c2 as col2 FROM t1 abcde FOR 
> > > UPDATE of c1");
> > > > @@ -1092,9 +1113,9 @@
> > > > reloadData(); 
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > stmt1 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE );
> > > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > > > rs.next();
> > > > - rs1 = stmt1.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > > > + rs1 = stmt1.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > > > rs1.next();
> > > > System.out.println("delete using first resultset");
> > > > rs.deleteRow();
> > > > @@ -1119,7 +1140,7 @@
> > > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY , 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > stmt.executeUpdate("call 
> > > SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
> > > > stmt.setFetchSize(200);
> > > > - rs = stmt.executeQuery ("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > > System.out.println("Notice the Fetch Size in run time statistics 
> > > output."); 
> > > > showScanStatistics(rs, conn);
> > > > System.out.println("statement's fetch size is " + stmt.getFetchSize
> > > ());
> > > > @@ -1205,6 +1226,7 @@
> > > > dumpRS( stmt.executeQuery("select * from table2WithTriggers"));
> > > > //have to close the resultset because by default, resultsets are 
> > > held open over commit
> > > > rs.close ();
> > > > + conn.rollback();
> > > >
> > > > System.out.println("Positive Test14a - make sure self referential 
> > > delete cascade works when deleteRow is issued");
> > > > dumpRS( stmt.executeQuery("select * from selfReferencingT1"));
> > > > @@ -1252,7 +1274,7 @@
> > > > reloadData();
> > > > conn.setAutoCommit(false);
> > > > stmt = conn.createStatement (ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE"); 
> > > > rs.next();
> > > > System.out.println("Opened an updatable resultset. Now trying to 
> > > drop that table through another Statement");
> > > > stmt1 = conn.createStatement();
> > > > @@ -1503,13 +1525,15 @@
> > > > }
> > > > }
> > > > }
> > > > + conn.rollback(); 
> > > > conn.setAutoCommit(true);
> > > >
> > > > System.out.println("Positive Test21 - Test all updateXXX(excluding 
> > > updateObject) methods on all the supported sql datatypes"); 
> > > > conn.setAutoCommit(false);
> > > > - stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - stmt1 = conn.createStatement ();
> > > > + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM 
> > > AllDataTypesForTestingTable FOR UPDATE", ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > + PreparedStatement pstmt1 = conn.prepareStatement("SELECT * FROM 
> > > AllDataTypesNewValuesData");
> > > > for (int sqlType = 1, checkAgainstColumn = 1; sqlType <= 
> > > allSQLTypes.length; sqlType++ ) {
> > > > + conn.rollback();
> > > > System.out.println("Next datatype to test is " + 
> > > allSQLTypes[sqlType-1]);
> > > > for (int updateXXXName = 1; updateXXXName <= 
> > > allUpdateXXXNames.length; updateXXXName++) {
> > > > checkAgainstColumn = updateXXXName;
> > > > @@ -1519,9 +1543,9 @@
> > > > System.out.println (" Using column position as first parameter to " 
> > > + allUpdateXXXNames[updateXXXName-1]);
> > > > else
> > > > System.out.println(" Using column name as first parameter to " + 
> > > allUpdateXXXNames[updateXXXName-1]);
> > > > - rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable 
> > > FOR UPDATE"); 
> > > > + rs = pstmt.executeQuery();
> > > > rs.next();
> > > > - rs1 = stmt1.executeQuery ("SELECT * FROM 
> > > AllDataTypesNewValuesData");
> > > > + rs1 = pstmt1.executeQuery();
> > > > rs1.next();
> > > > try { 
> > > > if (updateXXXName == 1) {//update column with updateShort methods
> > > > @@ -1642,7 +1666,8 @@
> > > > rs.updateRef(ColumnNames[sqlType-1], null);
> > > > }
> > > > rs.updateRow();
> > > > - if 
> > > (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > > { 
> > > > + if ((TestUtil.isNetFramework() && 
> > > updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > > ||
> > > > + ( TestUtil.isEmbeddedFramework() && 
> > > updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))) 
> > > {
> > > > System.out.println("FAILURE : We shouldn't reach here. The test 
> > > should have failed earlier on updateXXX or updateRow call"); 
> > > > return;
> > > > }
> > > > @@ -1652,7 +1677,8 @@
> > > > return; 
> > > > }
> > > > } catch (Throwable e) {
> > > > - if 
> > > (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > > 
> > > > + if ((TestUtil.isNetFramework() && 
> > > updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > > ||
> > > > + ( TestUtil.isEmbeddedFramework() && 
> > > updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
> > > > System.out.println(" Got expected exception : " + e.getMessage());
> > > > else {
> > > > if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are 
> > > dealing with DATE/TIME/TIMESTAMP column types 
> > > > @@ -1669,14 +1695,14 @@
> > > > rs1.close();
> > > > }
> > > > }
> > > > + conn.rollback();
> > > > conn.setAutoCommit(true);
> > > >
> > > > System.out.println("Positive Test22 - Test updateObject method");
> > > > conn.setAutoCommit(false);
> > > > - stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > > ResultSet.CONCUR_UPDATABLE);
> > > > - stmt1 = conn.createStatement();
> > > > String displayString;
> > > > for (int sqlType = 1; sqlType <= allSQLTypes.length; sqlType++ ) {
> > > > + conn.rollback();
> > > > System.out.println("Next datatype to test is " + 
> > > allSQLTypes[sqlType-1]);
> > > > for (int updateXXXName = 1; updateXXXName <= 
> > > allUpdateXXXNames.length; updateXXXName++) {
> > > > for (int indexOrName = 1; indexOrName <= 2; indexOrName++) {
> > > > @@ -1684,9 +1710,9 @@
> > > > displayString = " updateObject with column position &"; 
> > > > else
> > > > displayString = " updateObject with column name &";
> > > > - rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable 
> > > FOR UPDATE");
> > > > + rs = pstmt.executeQuery();
> > > > rs.next ();
> > > > - rs1 = stmt1.executeQuery("SELECT * FROM 
> > > AllDataTypesNewValuesData");
> > > > + rs1 = pstmt1.executeQuery();
> > > > rs1.next();
> > > > try {
> > > > if (updateXXXName == 1){ //updateObject using Short object 
> > > > @@ -1787,15 +1813,34 @@
> > > > rs.updateObject(ColumnNames[sqlType-1], new Boolean(rs1.getBoolean
> > > (1)));
> > > > } else if (updateXXXName == 19){ //update column with updateNull 
> > > methods 
> > > > System.out.println(displayString + " null as parameters");
> > > > + try {
> > > > if (indexOrName == 1) //test by passing column position 
> > > > rs.updateObject(sqlType, null);
> > > > else //test by passing column name
> > > > rs.updateObject(ColumnNames[sqlType-1], null);
> > > > + } catch (Throwable e) {
> > > > + if (TestUtil.isNetFramework ()) {
> > > > + System.out.println(" Got expected exception:" + e.getMessage());
> > > > + &nb
> > > 
> > ...
> 
> [Message clipped]

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Mamta Satoor <ms...@gmail.com>.
Hi,
 For the first difference (related to updatable resultset) that I mentioned 
earlier between embedded and network server(copied below for easy reference)
1)DNC requires that the first column in the select list be from the target 
table.
eg select 1, c11 from t1 for update of c11 will fail in Network Server 
because driver looks at first column to determine the target table for 
update/delete. This is not required by embedded driver. There are tests for 
this in the attached patch(Positive Test2 in updatableResultSet.java).
 I am thinking of changing the Derby Net Client driver to see if it can look 
at the subsequent columns to determine the target table for update/delete 
rather than give up after trying to get that information from the first 
column in the select list. Unless somone has objection to this approach, I 
will look into implementing that so we can bring down the differences 
between embedded and network server behavior.
 Mamta

 On 5/20/05, Mamta Satoor <ms...@gmail.com> wrote: 
> 
> Hi David,
>  I have not yet entered JIRA bugs for these differences. Once the patch is 
> committed, I can go ahead and make JIRA entries. Also, yes, I hope that 
> these differences can be listed in maybe Server and Admin Guide's existing 
> section "Differences between running Derby in embedded mode and using the 
> network server". 
>  Mamta
> 
>  On 5/19/05, David Van Couvering <da...@vancouvering.com> wrote: 
> 
> > Hi Mamta. These are some pretty significant incompatibilities between
> > DNC and Embedded drivers. Are all these logged as JIRA bugs? Are 
> > they/will they be called out in the documentation?
> > 
> > Thanks,
> > 
> > David
> > 
> > Mamta Satoor wrote:
> > 
> > > Hi,
> > >
> > > Sometime back, I submitted patches for update and delete on forward 
> > only
> > > updatable resultsets using JDBC apis for Embedded Derby. With this 
> > mail, 
> > > I would like to submit similar support for Network Server using Derby
> > > Net Client.
> > >
> > > The functionality for Network Server is similar to what Embedded Derby
> > > supports, with the exception of following differences 
> > > 1)DNC requires that the first column in the select list be from the
> > > target table.
> > > eg select 1, c11 from t1 for update of c11 will fail in Network Server
> > > because driver looks at first column to determine the target table for 
> > 
> > > update/delete. This is not required by embedded driver. There are 
> > tests
> > > for this in the attached patch(Positive Test2 in 
> > updatableResultSet.java).
> > > 2)Embedded driver allows Statement name change when there is an open 
> > > resultset on that statement object. DNC driver does not supported 
> > that.
> > > (Positive Test8a and Test8b in updatableResultSet.java )
> > > 3)(Positive Test20) Embedded driver allows updateString on SMALLINT, 
> > > INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
> > > Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR
> > > datatypes. DNC doesn't
> > > Embedded driver support updateTime on TIMESTAMP datatypes. DNC doesn't 
> > 
> > > Embedded driver supports updateObject with null value. DNC doesn't
> > > DNC does not support updateClob and updateBlob
> > >
> > > Following files are changed by this patch
> > > **************svn stat************ 
> > > M
> > > 
> > java\testing\org\apache\derbyTesting\functionTests\tests\lang\updatableResultSet.java
> > > M
> > > 
> > java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\updatableResultSet.out
> > >
> > > M
> > > 
> > java\testing\org\apache\derbyTesting\functionTests\master\updatableResultSet.out
> > > M
> > > 
> > java\testing\org\apache\derbyTesting\functionTests\master\jdk14\updatableResultSet.out
> > > M
> > > 
> > java\testing\org\apache\derbyTesting\functionTests\suites\DerbyNet.exclude
> > > M java\client\org\apache\derby\client\am\ResultSet.java
> > > **********************************
> > >
> > > Following is a brief description of the actual changes that are going 
> > > into the patch
> > > 1)After updateRow(provided updateXXX were issued on the row before
> > > updateRow) and deleteRow, position the resultset to right before the
> > > next row. This matches the embedded driver behavior. 
> > > 2)If ResultSet is not positioned on a row and user issues updateRow 
> > (w/o
> > > prior updateXXX), then throw an exception that it is not a valid
> > > operation. This matches the embedded driver behavior.
> > > 3)Made changes to DNC so that it does not require all the updatable 
> > > columns in the sql to be modified with updateXXX prior to updateRow.
> > > This matches the embedded driver behavior.
> > > 4)To preserve case sensitivity and spaces in the names, put quotes
> > > around database object names like table name, column name, cursor name 
> > 
> > > etc. Similar to embedded driver.(Positive Test31a, Test31b)
> > > 5)For a select sql like, select 2, c11 from t1, Derby has null for 
> > table
> > > name and schema name for column 2. DNC needs to check for these nulls 
> > to 
> > > avoid null pointer exception.
> > >
> > > As always, please review the patch and let me know of any comments,
> > > Mamta
> > >
> > >
> > >
> > > 
> > ------------------------------------------------------------------------ 
> > >
> > > Index: 
> > java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java
> > > ===================================================================
> > > --- 
> > java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java 
> > (revision 170535) 
> > > +++ 
> > java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java 
> > (working copy)
> > > @@ -253,13 +253,7 @@
> > > System.out.println("Negative Testl - request for scroll insensitive 
> > updatable resultset will give a read only scroll insensitive resultset"); 
> > > conn.clearWarnings();
> > > stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
> > ResultSet.CONCUR_UPDATABLE);
> > > - warnings = conn.getWarnings ();
> > > - while (warnings != null)
> > > - {
> > > - JDBCDisplayUtil.ShowWarnings(System.out, warnings);
> > > - warnings = warnings.getNextWarning();
> > > - }
> > > - conn.clearWarnings();
> > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > System.out.println ("requested TYPE_SCROLL_INSENSITIVE, 
> > CONCUR_UPDATABLE but that is not supported");
> > > System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " + 
> > (stmt.getResultSetType () == ResultSet.TYPE_SCROLL_INSENSITIVE));
> > > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> > stmt.getResultSetConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > > @@ -292,12 +286,7 @@ 
> > >
> > > System.out.println("Negative Test2 - request for scroll sensitive 
> > updatable resultset will give a read only scroll insensitive resultset");
> > > stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
> > ResultSet.CONCUR_UPDATABLE);
> > > - while (warnings != null)
> > > - {
> > > - System.out.println ("warnings on connection = " + warnings);
> > > - warnings = warnings.getNextWarning();
> > > - }
> > > - conn.clearWarnings();
> > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > System.out.println("requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE 
> > but that is not supported");
> > > System.out.println("Jira issue Derby-154 : When client connects to 
> > Network Server using JCC, it incorrectly shows support for scroll sensitive 
> > updatable resultsets"); 
> > > System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " + 
> > (stmt.getResultSetType() == ResultSet.TYPE_SCROLL_INSENSITIVE));
> > > @@ -377,20 +366,13 @@
> > > //have to close the resultset because by default, resultsets are held 
> > open over commit 
> > > rs.close();
> > >
> > > -
> > > System.out.println("Negative Test5 - request updatable resultset for 
> > sql with no FOR UPDATE clause");
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > rs = stmt.executeQuery("select * from t1");//notice that we forgot to 
> > give mandatory FOR UPDATE clause for updatable resultset 
> > > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> > rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > > System.out.println("Jira issue Derby-159 : Warnings raised by Derby 
> > are not getting passed to the Client in Network Server Mode"); 
> > > System.out.println("Will see the warnings in embedded mode only");
> > > - warnings = rs.getWarnings();
> > > - while (warnings != null) 
> > > - {
> > > - System.out.println("Expected warnings on resultset = " + warnings);
> > > - warnings = warnings.getNextWarning ();
> > > - }
> > > - rs.clearWarnings();
> > > + JDBCDisplayUtil.ShowWarnings(System.out, rs);
> > > rs.next();
> > > System.out.println ("Now attempting to send a delete on a sql with no 
> > FOR UPDATE clause.");
> > > try {
> > > @@ -410,7 +392,6 @@
> > > System.out.println("SQL State : " + e.getSQLState());
> > > System.out.println("Got expected exception " + e.getMessage());
> > > }
> > > -
> > > //have to close the resultset because by default, resultsets are held 
> > open over commit 
> > > rs.close();
> > >
> > > @@ -420,13 +401,7 @@
> > > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> > rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY ));
> > > System.out.println("Jira issue Derby-159 : Warnings raised by Derby 
> > are not getting passed to the Client in Network Server Mode");
> > > System.out.println ("Will see the warnings in embedded mode only");
> > > - warnings = rs.getWarnings();
> > > - while (warnings != null)
> > > - {
> > > - System.out.println("Expected warnings on resultset = " + warnings);
> > > - warnings = warnings.getNextWarning();
> > > - }
> > > - rs.clearWarnings ();
> > > + JDBCDisplayUtil.ShowWarnings(System.out, rs);
> > > rs.next();
> > > System.out.println("Now attempting to send a delete on a sql with FOR 
> > READ ONLY clause."); 
> > > try {
> > > @@ -463,14 +438,12 @@
> > > System.out.println("Got expected exception " + e.getMessage());
> > > }
> > > System.out.println("Now attempt a updateRow without first doing next 
> > on the resultset.");
> > > - System.out.println("In embedded mode, updateRow will check if it is 
> > on a row or not even though no changes have been made to the row using 
> > updateXXX"); 
> > > - System.out.println("In Network Server mode, if no updateXXX were 
> > issued before updateRow, then updateRow is a no-op and doesn't check if it 
> > is on a row or not");
> > > + System.out.println("updateRow will check if it is on a row or not 
> > even " +
> > > + "though no changes have been made to the row using updateXXX");
> > > try { 
> > > rs.updateRow();
> > > - if (TestUtil.isEmbeddedFramework())
> > > - System.out.println("FAIL!!! In embedded mode, this updateRow should 
> > have failed because resultset is not on a row"); 
> > > - else
> > > - System.out.println("PASS!!! In Network Server mode, this updateRow 
> > is a no-op because no updateXXX were issued before the updateRow"); 
> > > + System.out.println("FAIL!!! updateRow should have failed because " +
> > > + "resultset is not on a row");
> > > } 
> > > catch (SQLException e) {
> > > System.out.println("SQL State : " + e.getSQLState());
> > > @@ -664,12 +637,7 @@
> > >
> > > System.out.println("Positive Test1a - request updatable resultset for 
> > forward only type resultset");
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE );
> > > - warnings = conn.getWarnings();
> > > - while (warnings != null)
> > > - {
> > > - System.out.println("Unexpected warnings = " + warnings); 
> > > - warnings = warnings.getNextWarning();
> > > - }
> > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > System.out.println("requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE"); 
> > > System.out.println("got TYPE_FORWARD_ONLY? " + (stmt.getResultSetType() 
> > == ResultSet.TYPE_FORWARD_ONLY));
> > > System.out.println("got CONCUR_UPDATABLE? " + (
> > stmt.getResultSetConcurrency () == ResultSet.CONCUR_UPDATABLE));
> > > @@ -679,17 +647,15 @@
> > > System.out.println("column 1 on this row before deleteRow is " + 
> > rs.getInt(1));
> > > System.out.println("column 2 on this row before deleteRow is " + 
> > rs.getString(2));
> > > rs.deleteRow();
> > > - System.out.println("Since after deleteRow(), in embedded mode, 
> > ResultSet is positioned before the next row, getXXX will fail");
> > > - System.out.println("In Network Server mode, the ResultSet stays on 
> > the deleted row after deleteRow and hence no error for getXXX");
> > > + System.out.println("Since after deleteRow(), in embedded mode and 
> > Network "+ 
> > > + "Server mode using Derby Net Client, ResultSet is positioned before 
> > " +
> > > + "the next row, getXXX will fail");
> > > try { 
> > > System.out.println("column 1 on this deleted row is " + rs.getInt(1));
> > > }
> > > catch (SQLException e) {
> > > - if ( TestUtil.isEmbeddedFramework()) {
> > > - System.out.println("SQL State : " + e.getSQLState());
> > > - System.out.println("Got expected exception " + e.getMessage());
> > > - } else
> > > - System.out.println("Got unexpected exception " + e.getMessage());
> > > + System.out.println("SQL State : " + e.getSQLState());
> > > + System.out.println("Got expected exception " + e.getMessage());
> > > }
> > > System.out.println("calling deleteRow again w/o first positioning the 
> > ResultSet on the next row will fail");
> > > try {
> > > @@ -707,16 +673,10 @@
> > > //have to close the resultset because by default, resultsets are held 
> > open over commit 
> > > rs.close();
> > >
> > > - if (TestUtil.isEmbeddedFramework()) {
> > > System.out.println("Positive Test1b - request updatable resultset for 
> > forward only type resultset"); 
> > > reloadData();
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > - warnings = conn.getWarnings(); 
> > > - while (warnings != null)
> > > - {
> > > - System.out.println("Unexpected warnings = " + warnings);
> > > - warnings = warnings.getNextWarning();
> > > - }
> > > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > > rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE"); 
> > > rs.next();
> > > System.out.println("column 1 on this row before updateInt is " + 
> > rs.getInt(1));
> > > @@ -725,8 +685,9 @@
> > > System.out.println ("column 2 on this row before updateString is " + 
> > rs.getString(2));
> > > System.out.println("now updateRow on the row");
> > > rs.updateRow();
> > > - System.out.println("Since after updateRow(), in embedded mode, 
> > ResultSet is positioned before the next row, getXXX will fail");
> > > - System.out.println("In Network Server mode, the ResultSet stays on 
> > the updated row after updateRow and hence no error for getXXX"); 
> > > + System.out.println("Since after updateRow(), in embedded mode and 
> > Network "+
> > > + "Server mode using Derby Net Client, ResultSet is positioned before 
> > " + 
> > > + "the next row, getXXX will fail");
> > > try {
> > > System.out.println("column 1 on this updateRow row is " + rs.getInt
> > (1));
> > > }
> > > @@ -751,14 +712,33 @@
> > > //have to close the resultset because by default, resultsets are held 
> > open over commit
> > > rs.close();
> > >
> > > - System.out.println("Positive Test2 - even if no columns from table 
> > specified in the column list, we should be able to get updatable 
> > resultset");
> > > + System.out.println("Positive Test2 - even if no columns from table " 
> > +
> > > + "specified in the column list, we should be able to get updatable " 
> > +
> > > + "resultset"); 
> > > reloadData();
> > > + System.out.println("Will work in embedded mode because target table 
> > is "+
> > > + "not derived from the first column in the select list"); 
> > > + System.out.println("Will not work in network server mode because it 
> > " +
> > > + "derives the target tabke from the first column in the select 
> > list"); 
> > > System.out.println("total number of rows in T1 ");
> > > dumpRS(stmt.executeQuery("select count(*) from t1"));
> > > rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE"); 
> > > rs.next();
> > > System.out.println("column 1 on this row is " + rs.getInt(1));
> > > - rs.deleteRow();
> > > + try {
> > > + rs.deleteRow();
> > > + if (TestUtil.isNetFramework())
> > > + System.out.println("FAIL!!! should have failed in network server");
> > > + else 
> > > + System.out.println("PASS!!! passed in embedded mode");
> > > + }
> > > + catch (SQLException e) {
> > > + if ( TestUtil.isNetFramework()) {
> > > + System.out.println("SQL State : " + e.getSQLState());
> > > + System.out.println("Got expected exception " + e.getMessage());
> > > + } else
> > > + System.out.println("Got unexpected exception " + e.getMessage());
> > > + }
> > > //have to close the resultset because by default, resultsets are held 
> > open over commit 
> > > rs.close();
> > > System.out.println("total number of rows in T1 after one deleteRow is 
> > ");
> > > @@ -908,7 +888,7 @@
> > > System.out.println("deletesAreDetected( ResultSet.TYPE_FORWARD_ONLY)? 
> > " + dbmt.deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY));
> > > reloadData();
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE );
> > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > rs.next();
> > > System.out.println("The JDBC program should look at rowDeleted only if 
> > deletesAreDetected returns true");
> > > System.out.println("Since Derby returns false for detlesAreDetected 
> > for FORWARD_ONLY updatable resultset,the program should not rely on 
> > rs.rowDeleted() for FORWARD_ONLY updatable resultsets");
> > > @@ -971,21 +951,46 @@
> > > rs.close();
> > > stmt.executeUpdate("DROP TABLE SESSION.t3");
> > >
> > > - System.out.println("Positive Test8a - change the name of the 
> > resultset and see if deleteRow still works");
> > > + System.out.println("Positive Test8a - change the name of the 
> > statement " + 
> > > + "when the resultset is open and see if deleteRow still works");
> > > + System.out.println("This test works in embedded mode since Derby can 
> > " + 
> > > + "handle the change in the name of the statement with an open 
> > resultset");
> > > + System.out.println("But it fails under Network Server mode because 
> > JCC " + 
> > > + "and Derby Net Client do not allow statement name change when there 
> > " +
> > > + "an open resultset against it");
> > > reloadData(); 
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > System.out.println("change the cursor name(case sensitive name) with 
> > setCursorName and then try to deleteRow"); 
> > > stmt.setCursorName("CURSORNOUPDATe");//notice this name is case 
> > sensitive
> > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > rs.next();
> > > rs.deleteRow();
> > > System.out.println("change the cursor name one more time with 
> > setCursorName and then try to deleteRow"); 
> > > - stmt.setCursorName("CURSORNOUPDATE1");
> > > - rs.next();
> > > - rs.deleteRow();
> > > + try {
> > > + stmt.setCursorName("CURSORNOUPDATE1");
> > > + rs.next();
> > > + rs.deleteRow();
> > > + if (TestUtil.isNetFramework())
> > > + System.out.println("FAIL!!! should have failed in network server");
> > > + else
> > > + System.out.println ("PASS!!! passed in embedded mode");
> > > + }
> > > + catch (SQLException e) {
> > > + if (TestUtil.isNetFramework()) {
> > > + System.out.println("SQL State : " + e.getSQLState());
> > > + System.out.println("Got expected exception " + e.getMessage());
> > > + } else 
> > > + System.out.println("Got unexpected exception " + e.getMessage());
> > > + }
> > > rs.close();
> > >
> > > - System.out.println("Positive Test8b - change the name of the 
> > resultset and see if updateRow still works");
> > > + System.out.println("Positive Test8b - change the name of the 
> > statement " + 
> > > + "when the resultset is open and see if updateRow still works");
> > > + System.out.println("This test works in embedded mode since Derby can 
> > " + 
> > > + "handle the change in the name of the statement with an open 
> > resultset");
> > > + System.out.println("But it fails under Network Server mode because 
> > JCC " + 
> > > + "and Derby Net Client do not allow statement name change when there 
> > " +
> > > + "an open resultset against it");
> > > reloadData(); 
> > > System.out.println("change the cursor name one more time with 
> > setCursorName and then try to updateRow");
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY , 
> > ResultSet.CONCUR_UPDATABLE);
> > > @@ -994,21 +999,53 @@
> > > rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > rs.next();
> > > rs.updateLong(1,123);
> > > - stmt.setCursorName("CURSORNOUPDATE1");
> > > - rs.updateRow();
> > > + try {
> > > + stmt.setCursorName("CURSORNOUPDATE1");
> > > + rs.updateRow();
> > > + if (TestUtil.isNetFramework())
> > > + System.out.println ("FAIL!!! should have failed in network server");
> > > + else
> > > + System.out.println("PASS!!! passed in embedded mode");
> > > + } 
> > > + catch (SQLException e) {
> > > + if (TestUtil.isNetFramework()) {
> > > + System.out.println("SQL State : " + e.getSQLState ());
> > > + System.out.println("Got expected exception " + e.getMessage());
> > > + } else
> > > + System.out.println ("Got unexpected exception " + e.getMessage());
> > > + }
> > > rs.close();
> > >
> > > - System.out.println("Positive Test9a - using correlation name for the 
> > table in the select sql is not a problem"); 
> > > + System.out.println("Positive Test9a - using correlation name for the 
> > " +
> > > + "table in the select sql works in embedded mode and Network Server " 
> > + 
> > > + "using Derby Net Client driver");
> > > + System.out.println("Correlation name for table does not work in 
> > Network "+
> > > + "Server mode (using JCC) because the drivers construct the delete 
> > sql "+ 
> > > + "with the correlation name rather than the base table name");
> > > reloadData();
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY , 
> > ResultSet.CONCUR_UPDATABLE);
> > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 abcde FOR UPDATE of 
> > c1");
> > > + rs = stmt.executeQuery("SELECT * FROM t1 abcde FOR UPDATE of c1");
> > > rs.next();
> > > System.out.println("column 1 on this row is " + rs.getInt(1));
> > > System.out.println("now try to deleteRow");
> > > - rs.deleteRow();
> > > + try {
> > > + rs.deleteRow();
> > > + if (TestUtil.isJCCFramework())
> > > + System.out.println("FAIL!!! should have failed in network server");
> > > + else
> > > + System.out.println("PASS!!! passed in embedded mode"); 
> > > + }
> > > + catch (SQLException e) {
> > > + if (TestUtil.isJCCFramework()) {
> > > + System.out.println ("SQL State : " + e.getSQLState());
> > > + System.out.println("Got expected exception " + e.getMessage());
> > > + } else
> > > + System.out.println("Got unexpected exception " + e.getMessage());
> > > + }
> > > rs.close();
> > > -
> > > - System.out.println("Positive Test9b - using correlation name for 
> > updatable column name is not allowed"); 
> > > +
> > > + System.out.println("Positive Test9b - using correlation name for " +
> > > + "updatable columns is not allowed.");
> > > reloadData(); 
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > System.out.println("Table t1 has following rows");
> > > @@ -1055,22 +1092,6 @@ 
> > > System.out.println("Table t1 after updateRow has following rows");
> > > dumpRS(stmt.executeQuery("select * from t1"));
> > >
> > > - System.out.println("Positive Test9c - try to updateXXX on a readonly 
> > column. Should get error");
> > > - reloadData();
> > > - rs = stmt.executeQuery("SELECT c1, c2 FROM t1 abcde FOR UPDATE of 
> > c1"); 
> > > - rs.next();
> > > - try {
> > > - rs.updateString(2,"bbbb");
> > > - System.out.println("FAIL!!! updateString on readonly column should 
> > have failed"); 
> > > - }
> > > - catch (SQLException e) {
> > > - System.out.println("SQL State : " + e.getSQLState());
> > > - System.out.println("Got expected exception " + e.getMessage());
> > > - }
> > > - rs.close();
> > > - System.out.println("Table t1 has following rows"); 
> > > - dumpRS(stmt.executeQuery("select * from t1"));
> > > -
> > > System.out.println("Positive Test9d - try to updateXXX on a readonly 
> > column with correlation name. Should get error"); 
> > > reloadData();
> > > rs = stmt.executeQuery("SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE 
> > of c1");
> > > @@ -1092,9 +1113,9 @@
> > > reloadData(); 
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > stmt1 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE );
> > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > > rs.next();
> > > - rs1 = stmt1.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > > + rs1 = stmt1.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > > rs1.next();
> > > System.out.println("delete using first resultset");
> > > rs.deleteRow();
> > > @@ -1119,7 +1140,7 @@
> > > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY , 
> > ResultSet.CONCUR_UPDATABLE);
> > > stmt.executeUpdate("call SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
> > > stmt.setFetchSize(200);
> > > - rs = stmt.executeQuery ("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > > System.out.println("Notice the Fetch Size in run time statistics 
> > output."); 
> > > showScanStatistics(rs, conn);
> > > System.out.println("statement's fetch size is " + stmt.getFetchSize
> > ());
> > > @@ -1205,6 +1226,7 @@
> > > dumpRS( stmt.executeQuery("select * from table2WithTriggers"));
> > > //have to close the resultset because by default, resultsets are held 
> > open over commit
> > > rs.close ();
> > > + conn.rollback();
> > >
> > > System.out.println("Positive Test14a - make sure self referential 
> > delete cascade works when deleteRow is issued");
> > > dumpRS( stmt.executeQuery("select * from selfReferencingT1"));
> > > @@ -1252,7 +1274,7 @@
> > > reloadData();
> > > conn.setAutoCommit(false);
> > > stmt = conn.createStatement (ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE"); 
> > > rs.next();
> > > System.out.println("Opened an updatable resultset. Now trying to drop 
> > that table through another Statement");
> > > stmt1 = conn.createStatement();
> > > @@ -1503,13 +1525,15 @@
> > > }
> > > }
> > > }
> > > + conn.rollback(); 
> > > conn.setAutoCommit(true);
> > >
> > > System.out.println("Positive Test21 - Test all updateXXX(excluding 
> > updateObject) methods on all the supported sql datatypes"); 
> > > conn.setAutoCommit(false);
> > > - stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > - stmt1 = conn.createStatement ();
> > > + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM 
> > AllDataTypesForTestingTable FOR UPDATE", ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > + PreparedStatement pstmt1 = conn.prepareStatement("SELECT * FROM 
> > AllDataTypesNewValuesData");
> > > for (int sqlType = 1, checkAgainstColumn = 1; sqlType <= 
> > allSQLTypes.length; sqlType++ ) {
> > > + conn.rollback();
> > > System.out.println("Next datatype to test is " + 
> > allSQLTypes[sqlType-1]);
> > > for (int updateXXXName = 1; updateXXXName <= allUpdateXXXNames.length; 
> > updateXXXName++) {
> > > checkAgainstColumn = updateXXXName;
> > > @@ -1519,9 +1543,9 @@
> > > System.out.println (" Using column position as first parameter to " + 
> > allUpdateXXXNames[updateXXXName-1]);
> > > else
> > > System.out.println(" Using column name as first parameter to " + 
> > allUpdateXXXNames[updateXXXName-1]);
> > > - rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable 
> > FOR UPDATE"); 
> > > + rs = pstmt.executeQuery();
> > > rs.next();
> > > - rs1 = stmt1.executeQuery ("SELECT * FROM 
> > AllDataTypesNewValuesData");
> > > + rs1 = pstmt1.executeQuery();
> > > rs1.next();
> > > try { 
> > > if (updateXXXName == 1) {//update column with updateShort methods
> > > @@ -1642,7 +1666,8 @@
> > > rs.updateRef(ColumnNames[sqlType-1], null);
> > > }
> > > rs.updateRow();
> > > - if 
> > (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > { 
> > > + if ((TestUtil.isNetFramework() && 
> > updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > ||
> > > + ( TestUtil.isEmbeddedFramework() && 
> > updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))) 
> > {
> > > System.out.println("FAILURE : We shouldn't reach here. The test should 
> > have failed earlier on updateXXX or updateRow call"); 
> > > return;
> > > }
> > > @@ -1652,7 +1677,8 @@
> > > return; 
> > > }
> > > } catch (Throwable e) {
> > > - if 
> > (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > 
> > > + if ((TestUtil.isNetFramework() && 
> > updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> > ||
> > > + ( TestUtil.isEmbeddedFramework() && 
> > updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
> > > System.out.println(" Got expected exception : " + e.getMessage());
> > > else {
> > > if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are 
> > dealing with DATE/TIME/TIMESTAMP column types 
> > > @@ -1669,14 +1695,14 @@
> > > rs1.close();
> > > }
> > > }
> > > + conn.rollback();
> > > conn.setAutoCommit(true);
> > >
> > > System.out.println("Positive Test22 - Test updateObject method");
> > > conn.setAutoCommit(false);
> > > - stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> > ResultSet.CONCUR_UPDATABLE);
> > > - stmt1 = conn.createStatement();
> > > String displayString;
> > > for (int sqlType = 1; sqlType <= allSQLTypes.length; sqlType++ ) {
> > > + conn.rollback();
> > > System.out.println("Next datatype to test is " + 
> > allSQLTypes[sqlType-1]);
> > > for (int updateXXXName = 1; updateXXXName <= allUpdateXXXNames.length; 
> > updateXXXName++) {
> > > for (int indexOrName = 1; indexOrName <= 2; indexOrName++) {
> > > @@ -1684,9 +1710,9 @@
> > > displayString = " updateObject with column position &"; 
> > > else
> > > displayString = " updateObject with column name &";
> > > - rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable 
> > FOR UPDATE");
> > > + rs = pstmt.executeQuery();
> > > rs.next ();
> > > - rs1 = stmt1.executeQuery("SELECT * FROM AllDataTypesNewValuesData");
> > > + rs1 = pstmt1.executeQuery();
> > > rs1.next();
> > > try {
> > > if (updateXXXName == 1){ //updateObject using Short object 
> > > @@ -1787,15 +1813,34 @@
> > > rs.updateObject(ColumnNames[sqlType-1], new Boolean(rs1.getBoolean
> > (1)));
> > > } else if (updateXXXName == 19){ //update column with updateNull 
> > methods 
> > > System.out.println(displayString + " null as parameters");
> > > + try {
> > > if (indexOrName == 1) //test by passing column position 
> > > rs.updateObject(sqlType, null);
> > > else //test by passing column name
> > > rs.updateObject(ColumnNames[sqlType-1], null);
> > > + } catch (Throwable e) {
> > > + if (TestUtil.isNetFramework ()) {
> > > + System.out.println(" Got expected exception:" + e.getMessage());
> > > + continue; 
> > > + } else {
> > > + System.out.println(" Got UNexpected exception:" + e.getMessage ());
> > > + return;
> > > + &nbsp
> 
> ...
> 
> [Message clipped]

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by Mamta Satoor <ms...@gmail.com>.
Hi David,
 I have not yet entered JIRA bugs for these differences. Once the patch is 
committed, I can go ahead and make JIRA entries. Also, yes, I hope that 
these differences can be listed in maybe Server and Admin Guide's existing 
section "Differences between running Derby in embedded mode and using the 
network server".
 Mamta

 On 5/19/05, David Van Couvering <da...@vancouvering.com> wrote: 
> 
> Hi Mamta. These are some pretty significant incompatibilities between
> DNC and Embedded drivers. Are all these logged as JIRA bugs? Are
> they/will they be called out in the documentation?
> 
> Thanks,
> 
> David
> 
> Mamta Satoor wrote:
> 
> > Hi,
> >
> > Sometime back, I submitted patches for update and delete on forward only
> > updatable resultsets using JDBC apis for Embedded Derby. With this mail,
> > I would like to submit similar support for Network Server using Derby
> > Net Client.
> >
> > The functionality for Network Server is similar to what Embedded Derby
> > supports, with the exception of following differences
> > 1)DNC requires that the first column in the select list be from the
> > target table.
> > eg select 1, c11 from t1 for update of c11 will fail in Network Server
> > because driver looks at first column to determine the target table for
> > update/delete. This is not required by embedded driver. There are tests
> > for this in the attached patch(Positive Test2 in updatableResultSet.java
> ).
> > 2)Embedded driver allows Statement name change when there is an open
> > resultset on that statement object. DNC driver does not supported that.
> > (Positive Test8a and Test8b in updatableResultSet.java )
> > 3)(Positive Test20) Embedded driver allows updateString on SMALLINT,
> > INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
> > Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR
> > datatypes. DNC doesn't
> > Embedded driver support updateTime on TIMESTAMP datatypes. DNC doesn't
> > Embedded driver supports updateObject with null value. DNC doesn't
> > DNC does not support updateClob and updateBlob
> >
> > Following files are changed by this patch
> > **************svn stat************
> > M
> > 
> java\testing\org\apache\derbyTesting\functionTests\tests\lang\updatableResultSet.java
> > M
> > 
> java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\updatableResultSet.out
> >
> > M
> > 
> java\testing\org\apache\derbyTesting\functionTests\master\updatableResultSet.out
> > M
> > 
> java\testing\org\apache\derbyTesting\functionTests\master\jdk14\updatableResultSet.out
> > M
> > 
> java\testing\org\apache\derbyTesting\functionTests\suites\DerbyNet.exclude
> > M java\client\org\apache\derby\client\am\ResultSet.java
> > **********************************
> >
> > Following is a brief description of the actual changes that are going
> > into the patch
> > 1)After updateRow(provided updateXXX were issued on the row before
> > updateRow) and deleteRow, position the resultset to right before the
> > next row. This matches the embedded driver behavior.
> > 2)If ResultSet is not positioned on a row and user issues updateRow (w/o
> > prior updateXXX), then throw an exception that it is not a valid
> > operation. This matches the embedded driver behavior.
> > 3)Made changes to DNC so that it does not require all the updatable
> > columns in the sql to be modified with updateXXX prior to updateRow.
> > This matches the embedded driver behavior.
> > 4)To preserve case sensitivity and spaces in the names, put quotes
> > around database object names like table name, column name, cursor name
> > etc. Similar to embedded driver.(Positive Test31a, Test31b)
> > 5)For a select sql like, select 2, c11 from t1, Derby has null for table
> > name and schema name for column 2. DNC needs to check for these nulls to
> > avoid null pointer exception.
> >
> > As always, please review the patch and let me know of any comments,
> > Mamta
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > Index: 
> java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java
> > ===================================================================
> > --- 
> java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java 
> (revision 170535)
> > +++ 
> java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java 
> (working copy)
> > @@ -253,13 +253,7 @@
> > System.out.println("Negative Testl - request for scroll insensitive 
> updatable resultset will give a read only scroll insensitive resultset");
> > conn.clearWarnings();
> > stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
> ResultSet.CONCUR_UPDATABLE);
> > - warnings = conn.getWarnings();
> > - while (warnings != null)
> > - {
> > - JDBCDisplayUtil.ShowWarnings(System.out, warnings);
> > - warnings = warnings.getNextWarning();
> > - }
> > - conn.clearWarnings();
> > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > System.out.println("requested TYPE_SCROLL_INSENSITIVE, CONCUR_UPDATABLE 
> but that is not supported");
> > System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " + (
> stmt.getResultSetType() == ResultSet.TYPE_SCROLL_INSENSITIVE));
> > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> stmt.getResultSetConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > @@ -292,12 +286,7 @@
> >
> > System.out.println("Negative Test2 - request for scroll sensitive 
> updatable resultset will give a read only scroll insensitive resultset");
> > stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
> ResultSet.CONCUR_UPDATABLE);
> > - while (warnings != null)
> > - {
> > - System.out.println("warnings on connection = " + warnings);
> > - warnings = warnings.getNextWarning();
> > - }
> > - conn.clearWarnings();
> > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > System.out.println("requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE 
> but that is not supported");
> > System.out.println("Jira issue Derby-154 : When client connects to 
> Network Server using JCC, it incorrectly shows support for scroll sensitive 
> updatable resultsets");
> > System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " + (
> stmt.getResultSetType() == ResultSet.TYPE_SCROLL_INSENSITIVE));
> > @@ -377,20 +366,13 @@
> > //have to close the resultset because by default, resultsets are held 
> open over commit
> > rs.close();
> >
> > -
> > System.out.println("Negative Test5 - request updatable resultset for sql 
> with no FOR UPDATE clause");
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > rs = stmt.executeQuery("select * from t1");//notice that we forgot to 
> give mandatory FOR UPDATE clause for updatable resultset
> > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > System.out.println("Jira issue Derby-159 : Warnings raised by Derby are 
> not getting passed to the Client in Network Server Mode");
> > System.out.println("Will see the warnings in embedded mode only");
> > - warnings = rs.getWarnings();
> > - while (warnings != null)
> > - {
> > - System.out.println("Expected warnings on resultset = " + warnings);
> > - warnings = warnings.getNextWarning();
> > - }
> > - rs.clearWarnings();
> > + JDBCDisplayUtil.ShowWarnings(System.out, rs);
> > rs.next();
> > System.out.println("Now attempting to send a delete on a sql with no FOR 
> UPDATE clause.");
> > try {
> > @@ -410,7 +392,6 @@
> > System.out.println("SQL State : " + e.getSQLState());
> > System.out.println("Got expected exception " + e.getMessage());
> > }
> > -
> > //have to close the resultset because by default, resultsets are held 
> open over commit
> > rs.close();
> >
> > @@ -420,13 +401,7 @@
> > System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (
> rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY));
> > System.out.println("Jira issue Derby-159 : Warnings raised by Derby are 
> not getting passed to the Client in Network Server Mode");
> > System.out.println("Will see the warnings in embedded mode only");
> > - warnings = rs.getWarnings();
> > - while (warnings != null)
> > - {
> > - System.out.println("Expected warnings on resultset = " + warnings);
> > - warnings = warnings.getNextWarning();
> > - }
> > - rs.clearWarnings();
> > + JDBCDisplayUtil.ShowWarnings(System.out, rs);
> > rs.next();
> > System.out.println("Now attempting to send a delete on a sql with FOR 
> READ ONLY clause.");
> > try {
> > @@ -463,14 +438,12 @@
> > System.out.println("Got expected exception " + e.getMessage());
> > }
> > System.out.println("Now attempt a updateRow without first doing next on 
> the resultset.");
> > - System.out.println("In embedded mode, updateRow will check if it is on 
> a row or not even though no changes have been made to the row using 
> updateXXX");
> > - System.out.println("In Network Server mode, if no updateXXX were 
> issued before updateRow, then updateRow is a no-op and doesn't check if it 
> is on a row or not");
> > + System.out.println("updateRow will check if it is on a row or not even 
> " +
> > + "though no changes have been made to the row using updateXXX");
> > try {
> > rs.updateRow();
> > - if (TestUtil.isEmbeddedFramework())
> > - System.out.println("FAIL!!! In embedded mode, this updateRow should 
> have failed because resultset is not on a row");
> > - else
> > - System.out.println("PASS!!! In Network Server mode, this updateRow is 
> a no-op because no updateXXX were issued before the updateRow");
> > + System.out.println("FAIL!!! updateRow should have failed because " +
> > + "resultset is not on a row");
> > }
> > catch (SQLException e) {
> > System.out.println("SQL State : " + e.getSQLState());
> > @@ -664,12 +637,7 @@
> >
> > System.out.println("Positive Test1a - request updatable resultset for 
> forward only type resultset");
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - warnings = conn.getWarnings();
> > - while (warnings != null)
> > - {
> > - System.out.println("Unexpected warnings = " + warnings);
> > - warnings = warnings.getNextWarning();
> > - }
> > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > System.out.println("requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE");
> > System.out.println("got TYPE_FORWARD_ONLY? " + (stmt.getResultSetType() 
> == ResultSet.TYPE_FORWARD_ONLY));
> > System.out.println("got CONCUR_UPDATABLE? " + (
> stmt.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE));
> > @@ -679,17 +647,15 @@
> > System.out.println("column 1 on this row before deleteRow is " + 
> rs.getInt(1));
> > System.out.println("column 2 on this row before deleteRow is " + 
> rs.getString(2));
> > rs.deleteRow();
> > - System.out.println("Since after deleteRow(), in embedded mode, 
> ResultSet is positioned before the next row, getXXX will fail");
> > - System.out.println("In Network Server mode, the ResultSet stays on the 
> deleted row after deleteRow and hence no error for getXXX");
> > + System.out.println("Since after deleteRow(), in embedded mode and 
> Network "+
> > + "Server mode using Derby Net Client, ResultSet is positioned before " 
> +
> > + "the next row, getXXX will fail");
> > try {
> > System.out.println("column 1 on this deleted row is " + rs.getInt(1));
> > }
> > catch (SQLException e) {
> > - if (TestUtil.isEmbeddedFramework()) {
> > - System.out.println("SQL State : " + e.getSQLState());
> > - System.out.println("Got expected exception " + e.getMessage());
> > - } else
> > - System.out.println("Got unexpected exception " + e.getMessage());
> > + System.out.println("SQL State : " + e.getSQLState());
> > + System.out.println("Got expected exception " + e.getMessage());
> > }
> > System.out.println("calling deleteRow again w/o first positioning the 
> ResultSet on the next row will fail");
> > try {
> > @@ -707,16 +673,10 @@
> > //have to close the resultset because by default, resultsets are held 
> open over commit
> > rs.close();
> >
> > - if (TestUtil.isEmbeddedFramework()) {
> > System.out.println("Positive Test1b - request updatable resultset for 
> forward only type resultset");
> > reloadData();
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - warnings = conn.getWarnings();
> > - while (warnings != null)
> > - {
> > - System.out.println("Unexpected warnings = " + warnings);
> > - warnings = warnings.getNextWarning();
> > - }
> > + JDBCDisplayUtil.ShowWarnings(System.out, conn);
> > rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > rs.next();
> > System.out.println("column 1 on this row before updateInt is " + 
> rs.getInt(1));
> > @@ -725,8 +685,9 @@
> > System.out.println("column 2 on this row before updateString is " + 
> rs.getString(2));
> > System.out.println("now updateRow on the row");
> > rs.updateRow();
> > - System.out.println("Since after updateRow(), in embedded mode, 
> ResultSet is positioned before the next row, getXXX will fail");
> > - System.out.println("In Network Server mode, the ResultSet stays on the 
> updated row after updateRow and hence no error for getXXX");
> > + System.out.println("Since after updateRow(), in embedded mode and 
> Network "+
> > + "Server mode using Derby Net Client, ResultSet is positioned before " 
> +
> > + "the next row, getXXX will fail");
> > try {
> > System.out.println("column 1 on this updateRow row is " + rs.getInt(1));
> > }
> > @@ -751,14 +712,33 @@
> > //have to close the resultset because by default, resultsets are held 
> open over commit
> > rs.close();
> >
> > - System.out.println("Positive Test2 - even if no columns from table 
> specified in the column list, we should be able to get updatable 
> resultset");
> > + System.out.println("Positive Test2 - even if no columns from table " +
> > + "specified in the column list, we should be able to get updatable " +
> > + "resultset");
> > reloadData();
> > + System.out.println("Will work in embedded mode because target table is 
> "+
> > + "not derived from the first column in the select list");
> > + System.out.println("Will not work in network server mode because it " 
> +
> > + "derives the target tabke from the first column in the select list");
> > System.out.println("total number of rows in T1 ");
> > dumpRS(stmt.executeQuery("select count(*) from t1"));
> > rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > rs.next();
> > System.out.println("column 1 on this row is " + rs.getInt(1));
> > - rs.deleteRow();
> > + try {
> > + rs.deleteRow();
> > + if (TestUtil.isNetFramework())
> > + System.out.println("FAIL!!! should have failed in network server");
> > + else
> > + System.out.println("PASS!!! passed in embedded mode");
> > + }
> > + catch (SQLException e) {
> > + if (TestUtil.isNetFramework()) {
> > + System.out.println("SQL State : " + e.getSQLState());
> > + System.out.println("Got expected exception " + e.getMessage());
> > + } else
> > + System.out.println("Got unexpected exception " + e.getMessage());
> > + }
> > //have to close the resultset because by default, resultsets are held 
> open over commit
> > rs.close();
> > System.out.println("total number of rows in T1 after one deleteRow is 
> ");
> > @@ -908,7 +888,7 @@
> > System.out.println("deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? " + 
> dbmt.deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY));
> > reloadData();
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > rs.next();
> > System.out.println("The JDBC program should look at rowDeleted only if 
> deletesAreDetected returns true");
> > System.out.println("Since Derby returns false for detlesAreDetected for 
> FORWARD_ONLY updatable resultset,the program should not rely on 
> rs.rowDeleted() for FORWARD_ONLY updatable resultsets");
> > @@ -971,21 +951,46 @@
> > rs.close();
> > stmt.executeUpdate("DROP TABLE SESSION.t3");
> >
> > - System.out.println("Positive Test8a - change the name of the resultset 
> and see if deleteRow still works");
> > + System.out.println("Positive Test8a - change the name of the statement 
> " +
> > + "when the resultset is open and see if deleteRow still works");
> > + System.out.println("This test works in embedded mode since Derby can " 
> +
> > + "handle the change in the name of the statement with an open 
> resultset");
> > + System.out.println("But it fails under Network Server mode because JCC 
> " +
> > + "and Derby Net Client do not allow statement name change when there " 
> +
> > + "an open resultset against it");
> > reloadData();
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > System.out.println("change the cursor name(case sensitive name) with 
> setCursorName and then try to deleteRow");
> > stmt.setCursorName("CURSORNOUPDATe");//notice this name is case 
> sensitive
> > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > rs.next();
> > rs.deleteRow();
> > System.out.println("change the cursor name one more time with 
> setCursorName and then try to deleteRow");
> > - stmt.setCursorName("CURSORNOUPDATE1");
> > - rs.next();
> > - rs.deleteRow();
> > + try {
> > + stmt.setCursorName("CURSORNOUPDATE1");
> > + rs.next();
> > + rs.deleteRow();
> > + if (TestUtil.isNetFramework())
> > + System.out.println("FAIL!!! should have failed in network server");
> > + else
> > + System.out.println("PASS!!! passed in embedded mode");
> > + }
> > + catch (SQLException e) {
> > + if (TestUtil.isNetFramework()) {
> > + System.out.println("SQL State : " + e.getSQLState());
> > + System.out.println("Got expected exception " + e.getMessage());
> > + } else
> > + System.out.println("Got unexpected exception " + e.getMessage());
> > + }
> > rs.close();
> >
> > - System.out.println("Positive Test8b - change the name of the resultset 
> and see if updateRow still works");
> > + System.out.println("Positive Test8b - change the name of the statement 
> " +
> > + "when the resultset is open and see if updateRow still works");
> > + System.out.println("This test works in embedded mode since Derby can " 
> +
> > + "handle the change in the name of the statement with an open 
> resultset");
> > + System.out.println("But it fails under Network Server mode because JCC 
> " +
> > + "and Derby Net Client do not allow statement name change when there " 
> +
> > + "an open resultset against it");
> > reloadData();
> > System.out.println("change the cursor name one more time with 
> setCursorName and then try to updateRow");
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > @@ -994,21 +999,53 @@
> > rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > rs.next();
> > rs.updateLong(1,123);
> > - stmt.setCursorName("CURSORNOUPDATE1");
> > - rs.updateRow();
> > + try {
> > + stmt.setCursorName("CURSORNOUPDATE1");
> > + rs.updateRow();
> > + if (TestUtil.isNetFramework())
> > + System.out.println("FAIL!!! should have failed in network server");
> > + else
> > + System.out.println("PASS!!! passed in embedded mode");
> > + }
> > + catch (SQLException e) {
> > + if (TestUtil.isNetFramework()) {
> > + System.out.println("SQL State : " + e.getSQLState());
> > + System.out.println("Got expected exception " + e.getMessage());
> > + } else
> > + System.out.println("Got unexpected exception " + e.getMessage());
> > + }
> > rs.close();
> >
> > - System.out.println("Positive Test9a - using correlation name for the 
> table in the select sql is not a problem");
> > + System.out.println("Positive Test9a - using correlation name for the " 
> +
> > + "table in the select sql works in embedded mode and Network Server " +
> > + "using Derby Net Client driver");
> > + System.out.println("Correlation name for table does not work in 
> Network "+
> > + "Server mode (using JCC) because the drivers construct the delete sql 
> "+
> > + "with the correlation name rather than the base table name");
> > reloadData();
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 abcde FOR UPDATE of c1");
> > + rs = stmt.executeQuery("SELECT * FROM t1 abcde FOR UPDATE of c1");
> > rs.next();
> > System.out.println("column 1 on this row is " + rs.getInt(1));
> > System.out.println("now try to deleteRow");
> > - rs.deleteRow();
> > + try {
> > + rs.deleteRow();
> > + if (TestUtil.isJCCFramework())
> > + System.out.println("FAIL!!! should have failed in network server");
> > + else
> > + System.out.println("PASS!!! passed in embedded mode");
> > + }
> > + catch (SQLException e) {
> > + if (TestUtil.isJCCFramework()) {
> > + System.out.println("SQL State : " + e.getSQLState());
> > + System.out.println("Got expected exception " + e.getMessage());
> > + } else
> > + System.out.println("Got unexpected exception " + e.getMessage());
> > + }
> > rs.close();
> > -
> > - System.out.println("Positive Test9b - using correlation name for 
> updatable column name is not allowed");
> > +
> > + System.out.println("Positive Test9b - using correlation name for " +
> > + "updatable columns is not allowed.");
> > reloadData();
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > System.out.println("Table t1 has following rows");
> > @@ -1055,22 +1092,6 @@
> > System.out.println("Table t1 after updateRow has following rows");
> > dumpRS(stmt.executeQuery("select * from t1"));
> >
> > - System.out.println("Positive Test9c - try to updateXXX on a readonly 
> column. Should get error");
> > - reloadData();
> > - rs = stmt.executeQuery("SELECT c1, c2 FROM t1 abcde FOR UPDATE of 
> c1");
> > - rs.next();
> > - try {
> > - rs.updateString(2,"bbbb");
> > - System.out.println("FAIL!!! updateString on readonly column should 
> have failed");
> > - }
> > - catch (SQLException e) {
> > - System.out.println("SQL State : " + e.getSQLState());
> > - System.out.println("Got expected exception " + e.getMessage());
> > - }
> > - rs.close();
> > - System.out.println("Table t1 has following rows");
> > - dumpRS(stmt.executeQuery("select * from t1"));
> > -
> > System.out.println("Positive Test9d - try to updateXXX on a readonly 
> column with correlation name. Should get error");
> > reloadData();
> > rs = stmt.executeQuery("SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE 
> of c1");
> > @@ -1092,9 +1113,9 @@
> > reloadData();
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > stmt1 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > rs.next();
> > - rs1 = stmt1.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > + rs1 = stmt1.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > rs1.next();
> > System.out.println("delete using first resultset");
> > rs.deleteRow();
> > @@ -1119,7 +1140,7 @@
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > stmt.executeUpdate("call SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
> > stmt.setFetchSize(200);
> > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
> > System.out.println("Notice the Fetch Size in run time statistics 
> output.");
> > showScanStatistics(rs, conn);
> > System.out.println("statement's fetch size is " + stmt.getFetchSize());
> > @@ -1205,6 +1226,7 @@
> > dumpRS(stmt.executeQuery("select * from table2WithTriggers"));
> > //have to close the resultset because by default, resultsets are held 
> open over commit
> > rs.close();
> > + conn.rollback();
> >
> > System.out.println("Positive Test14a - make sure self referential delete 
> cascade works when deleteRow is issued");
> > dumpRS(stmt.executeQuery("select * from selfReferencingT1"));
> > @@ -1252,7 +1274,7 @@
> > reloadData();
> > conn.setAutoCommit(false);
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> > + rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
> > rs.next();
> > System.out.println("Opened an updatable resultset. Now trying to drop 
> that table through another Statement");
> > stmt1 = conn.createStatement();
> > @@ -1503,13 +1525,15 @@
> > }
> > }
> > }
> > + conn.rollback();
> > conn.setAutoCommit(true);
> >
> > System.out.println("Positive Test21 - Test all updateXXX(excluding 
> updateObject) methods on all the supported sql datatypes");
> > conn.setAutoCommit(false);
> > - stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - stmt1 = conn.createStatement();
> > + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM 
> AllDataTypesForTestingTable FOR UPDATE", ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > + PreparedStatement pstmt1 = conn.prepareStatement("SELECT * FROM 
> AllDataTypesNewValuesData");
> > for (int sqlType = 1, checkAgainstColumn = 1; sqlType <= 
> allSQLTypes.length; sqlType++ ) {
> > + conn.rollback();
> > System.out.println("Next datatype to test is " + 
> allSQLTypes[sqlType-1]);
> > for (int updateXXXName = 1; updateXXXName <= allUpdateXXXNames.length; 
> updateXXXName++) {
> > checkAgainstColumn = updateXXXName;
> > @@ -1519,9 +1543,9 @@
> > System.out.println(" Using column position as first parameter to " + 
> allUpdateXXXNames[updateXXXName-1]);
> > else
> > System.out.println(" Using column name as first parameter to " + 
> allUpdateXXXNames[updateXXXName-1]);
> > - rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable FOR 
> UPDATE");
> > + rs = pstmt.executeQuery();
> > rs.next();
> > - rs1 = stmt1.executeQuery("SELECT * FROM AllDataTypesNewValuesData");
> > + rs1 = pstmt1.executeQuery();
> > rs1.next();
> > try {
> > if (updateXXXName == 1) {//update column with updateShort methods
> > @@ -1642,7 +1666,8 @@
> > rs.updateRef(ColumnNames[sqlType-1], null);
> > }
> > rs.updateRow();
> > - if 
> (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) 
> {
> > + if ((TestUtil.isNetFramework() && 
> updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> ||
> > + (TestUtil.isEmbeddedFramework() && 
> updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))) 
> {
> > System.out.println("FAILURE : We shouldn't reach here. The test should 
> have failed earlier on updateXXX or updateRow call");
> > return;
> > }
> > @@ -1652,7 +1677,8 @@
> > return;
> > }
> > } catch (Throwable e) {
> > - if 
> (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
> > + if ((TestUtil.isNetFramework() && 
> updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> ||
> > + (TestUtil.isEmbeddedFramework() && 
> updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
> > System.out.println(" Got expected exception : " + e.getMessage());
> > else {
> > if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are 
> dealing with DATE/TIME/TIMESTAMP column types
> > @@ -1669,14 +1695,14 @@
> > rs1.close();
> > }
> > }
> > + conn.rollback();
> > conn.setAutoCommit(true);
> >
> > System.out.println("Positive Test22 - Test updateObject method");
> > conn.setAutoCommit(false);
> > - stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - stmt1 = conn.createStatement();
> > String displayString;
> > for (int sqlType = 1; sqlType <= allSQLTypes.length; sqlType++ ) {
> > + conn.rollback();
> > System.out.println("Next datatype to test is " + 
> allSQLTypes[sqlType-1]);
> > for (int updateXXXName = 1; updateXXXName <= allUpdateXXXNames.length; 
> updateXXXName++) {
> > for (int indexOrName = 1; indexOrName <= 2; indexOrName++) {
> > @@ -1684,9 +1710,9 @@
> > displayString = " updateObject with column position &";
> > else
> > displayString = " updateObject with column name &";
> > - rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable FOR 
> UPDATE");
> > + rs = pstmt.executeQuery();
> > rs.next();
> > - rs1 = stmt1.executeQuery("SELECT * FROM AllDataTypesNewValuesData");
> > + rs1 = pstmt1.executeQuery();
> > rs1.next();
> > try {
> > if (updateXXXName == 1){ //updateObject using Short object
> > @@ -1787,15 +1813,34 @@
> > rs.updateObject(ColumnNames[sqlType-1], new Boolean(rs1.getBoolean(1)));
> > } else if (updateXXXName == 19){ //update column with updateNull methods
> > System.out.println(displayString + " null as parameters");
> > + try {
> > if (indexOrName == 1) //test by passing column position
> > rs.updateObject(sqlType, null);
> > else //test by passing column name
> > rs.updateObject(ColumnNames[sqlType-1], null);
> > + } catch (Throwable e) {
> > + if (TestUtil.isNetFramework()) {
> > + System.out.println(" Got expected exception:" + e.getMessage());
> > + continue;
> > + } else {
> > + System.out.println(" Got UNexpected exception:" + e.getMessage());
> > + return;
> > + }
> > + }
> > } else if (updateXXXName == 20 || updateXXXName == 21) //since Derby 
> does not support Array, Ref datatype, this is a no-op
> > continue;
> >
> > rs.updateRow();
> > - if 
> (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) 
> {
> > + if (TestUtil.isNetFramework() && updateXXXName == 13 &&
> > + (sqlType==7 || sqlType==8 || sqlType==9 || sqlType==13))
> > + //updateObject with clob allowed on char, varchar, longvarchar & clob
> > + System.out.print("");
> > + else if (TestUtil.isNetFramework() && updateXXXName == 17 &&
> > + (sqlType==12 || sqlType==17))
> > + //updateObject with blob allowed on longvarchar for bit & blob
> > + System.out.print("");
> > + else if ((TestUtil.isNetFramework() && 
> updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> ||
> > + (TestUtil.isEmbeddedFramework() && 
> updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))) 
> {
> > System.out.println("FAILURE : We shouldn't reach here. The test should 
> have failed earlier on updateXXX or updateRow call");
> > return;
> > }
> > @@ -1805,7 +1850,8 @@
> > return;
> > }
> > } catch (Throwable e) {
> > - if 
> (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
> > + if ((TestUtil.isNetFramework() && 
> updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) 
> ||
> > + (TestUtil.isEmbeddedFramework() && 
> updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
> > System.out.println(" Got expected exception : " + e.getMessage());
> > else {
> > if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are 
> dealing with DATE/TIME/TIMESTAMP column types
> > @@ -1821,6 +1867,7 @@
> > }
> > }
> > }
> > + conn.rollback();
> > conn.setAutoCommit(true);
> >
> > System.out.println("Positive Test23 - Test cancelRowUpdates after 
> updateXXX methods on all the supported sql datatypes");
> > @@ -1866,7 +1913,7 @@
> > if(rs.getBigDecimal(4).compareTo(rs1.getBigDecimal(4)) != 0)
> > return;
> > rs.cancelRowUpdates();
> > - if(rs.getBigDecimal(4) != bd)
> > + if(rs.getBigDecimal(4).compareTo(bd) != 0)
> > return;
> >
> > System.out.println(" updateFloat and then cancelRowUpdates");
> > @@ -1968,7 +2015,9 @@
> > if(!rs.getTimestamp(16).toString().equals(timeStamp.toString()))
> > return;
> >
> > - if (JVMInfo.JDK_ID != 2){ //Don't test this method when running JDK1.3because 
> jdk1.3 does not support the method
> > + //Don't test this when running JDK1.3/in Network Server because they 
> both
> > + //do not support updateClob and updateBlob
> > + if (JVMInfo.JDK_ID != 2 && TestUtil.isEmbeddedFramework()){
> > System.out.println(" updateClob and then cancelRowUpdates");
> > String clb1 = rs.getString(13);
> > rs.updateClob(13,rs1.getClob(13));
> > @@ -2121,9 +2170,9 @@
> > System.out.println("Positive Test30 - call updateXXX methods on only 
> columns that correspond to a column in the table");
> > dumpRS(stmt.executeQuery("select * from t1"));
> > stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
> ResultSet.CONCUR_UPDATABLE);
> > - rs = stmt.executeQuery("SELECT 1, 2, c1, c2 FROM t1 FOR UPDATE");
> > + rs = stmt.executeQuery("SELECT c2, 1, 2, c1 FROM t1 FOR UPDATE");
> > rs.next();
> > - rs.updateInt(3,22);
> > + rs.updateInt(4,22);
> > rs.updateRow();
> > rs.close();
> > System.out.println(" Make sure that changes made it to the database 
> correctly");
> > @@ -2166,12 +2215,25 @@
> > rs.next();
> > try {
> > rs.updateInt(2,22);
> > - System.out.println("FAIL!!! updateInt should have failed because c12 
> is not the FOR UPDATE columns list.");
> > + if (TestUtil.isEmbeddedFramework())
> > + System.out.println("PASS!!! Embedded throws exception for updateRow");
> > + else
> > + System.out.println("FAIL!!! Network Server should throw exception for 
> updateXXX");
> > }
> > catch (SQLException e) {
> > System.out.println("SQL State : " + e.getSQLState());
> > System.out.println("Got expected exception " + e.getMessage());
> > }
> > + try {
> > + rs.updateRow();
> > + System.out.println("updateRow passed");
> > + }
> > + catch (SQLException e) {
> > + if (TestUtil.isNetFramework())
> > + System.out.println("FAIL!!! updateRow w/o updateXXX is no-op in 
> Network Server");
> > + else
> > + System.out.println("FAIL!!! exception is " + e.getMessage());
> > + }
> > rs.close();
> > System.out.println(" Make sure the contents of table are unchanged");
> > dumpRS(stmt.executeQuery("select * from t1"));
> > @@ -2201,7 +2263,6 @@
> > dumpRS(stmt.executeQuery("select * from s2.t1"));
> >
> > teardown();
> > - }
> >
> > conn.close();
> >
> > @@ -2214,11 +2275,11 @@
> > }
> >
> > static boolean verifyData(int sqlType, int updateXXXName, String 
> checkAgainstTheTable) throws SQLException {
> > - Statement stmt1 = conn.createStatement();
> > - ResultSet rs1 = stmt1.executeQuery("select * from " + 
> checkAgainstTheTable);
> > + PreparedStatement pstmt1 = conn.prepareStatement("select * from " + 
> checkAgainstTheTable);
> > + ResultSet rs1 = pstmt1.executeQuery();
> > rs1.next();
> > - Statement stmt = conn.createStatement();
> > - ResultSet rs = stmt.executeQuery("select * from 
> AllDataTypesForTestingTable");
> > + PreparedStatement pstmt = conn.prepareStatement("select * from 
> AllDataTypesForTestingTable");
> > + ResultSet rs = pstmt.executeQuery();
> > rs.next();
> >
> > if (updateXXXName == 18){ //verifying updateBoolean
> > @@ -2235,13 +2296,13 @@
> > return(false);
> > }
> >
> > - if (sqlType == 1) //verify update made to SMALLINT column with 
> updateXXX methods
> > + if (sqlType == 1) {//verify update made to SMALLINT column with 
> updateXXX methods
> > if(rs.getShort(sqlType) != rs1.getShort(updateXXXName)) {
> > return(false); }
> > - else if (sqlType == 2) //verify update made to INTEGER column with 
> updateXXX methods
> > + } else if (sqlType == 2) { //verify update made to INTEGER column with 
> updateXXX methods
> > if(rs.getInt(sqlType) != rs1.getInt(updateXXXName)) {
> > return(false); }
> > - else if (sqlType == 3) //verify update made to BIGINT column with 
> updateXXX methods
> > + } else if (sqlType == 3) //verify update made to BIGINT column with 
> updateXXX methods
> > if(rs.getLong(sqlType) != rs1.getLong(updateXXXName)) {
> > return(false); }
> > else if (sqlType == 4) //verify update made to DECIMAL column with 
> updateXXX methods
> > @@ -2265,16 +2326,22 @@
> > else if (sqlType == 14) //verify update made to DATE column with 
> updateXXX methods
> > if(rs.getDate(sqlType) != rs1.getDate(updateXXXName)) {
> > return(false); }
> > - else if (sqlType == 15) //verify update made to TIME column with 
> updateXXX methods
> > + else if (sqlType == 15) { //verify update made to TIME column with 
> updateXXX methods
> > if(rs.getTime(sqlType) != rs1.getTime(updateXXXName)) {
> > return(false); }
> > - else if (sqlType == 16) //verify update made to TIMESTAMP column with 
> updateXXX methods
> > - if(rs.getTimestamp(sqlType) != rs1.getTimestamp(updateXXXName)) {
> > + } else if (sqlType == 16) { //verify update made to TIMESTAMP column 
> with updateXXX methods
> > +// if(rs.getTimestamp(sqlType) != rs1.getTimestamp(updateXXXName)) {
> > + if(!rs.getTimestamp(sqlType).equals(rs1.getTimestamp(updateXXXName))) 
> {
> > return(false); }
> > - else if (sqlType == 17 && JVMInfo.JDK_ID != 2) //verify update made to 
> BLOB column with updateXXX methods
> > + } else if (sqlType == 17 && JVMInfo.JDK_ID != 2) //verify update made 
> to BLOB column with updateXXX methods
> > if(rs.getBlob(sqlType).getBytes(1,4) != rs1.getBlob(updateXXXName).getBytes(1,4)) 
> {
> > return(false); }
> >
> > + rs.close();
> > + rs1.close();
> > + pstmt.close();
> > + pstmt1.close();
> > + Statement stmt = conn.createStatement();
> > stmt.executeUpdate("delete from AllDataTypesForTestingTable");
> > StringBuffer insertSQL = new StringBuffer("insert into 
> AllDataTypesForTestingTable values(");
> > for (int type = 0; type < allSQLTypes.length - 1; type++)
> > Index: 
> java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out
> > ===================================================================
> > --- 
> java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out 
> (revision 170535)
> > +++ 
> java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out 
> (working copy)
> > @@ -13,6 +13,8 @@
> > SQL State : null
> > Got expected exception This method cannot be invoked while the cursor is 
> on the insert row or if the concurrency of this ResultSet object is 
> CONCUR_READ_ONLY.
> > Negative Test2 - request for scroll sensitive updatable resultset will 
> give a read only scroll insensitive resultset
> > +WARNING (no SQLState): Scroll sensitive result sets are not supported 
> by server; remapping to forward-only cursor
> > +WARNING (no SQLState): Insensitive updatable result sets are not 
> supported by server; remapping to insensitive read-only cursor
> > requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE but that is not 
> supported
> > Jira issue Derby-154 : When client connects to Network Server using JCC, 
> it incorrectly shows support for scroll sensitive updatable resultsets
> > Make sure that we got TYPE_SCROLL_INSENSITIVE? true
> > @@ -64,9 +66,9 @@
> > SQL State : XCL08
> > Got expected exception Cursor 'SQL_CURLH000C8' is not on a row.
> > Now attempt a updateRow without first doing next on the resultset.
> > -In embedded mode, updateRow will check if it is on a row or not even 
> though no changes have been made to the row using updateXXX
> > -In Network Server mode, if no updateXXX were issued before updateRow, 
> then updateRow is a no-op and doesn't check if it is on a row or not
> > -PASS!!! In Network Server mode, this updateRow is a no-op because no 
> updateXXX were issued before the updateRow
> > +updateRow will check if it is on a row or not even though no changes 
> have been made to the row using updateXXX
> > +SQL State : null
> > +Got expected exception Invalid operation to update at current cursor 
> position
> > ResultSet is positioned after the last row. attempt to deleteRow at this 
> point should fail!
> > SQL State : null
> > Got expected exception Invalid operation: result set closed
> > @@ -123,12 +125,3020 @@
> > JDBC 2.0 updatable resultset apis on this ResultSet object will pass 
> because this is an updatable resultset
> > column 1 on this row before deleteRow is 1
> > column 2 on this row before deleteRow is aa
> > -Since after deleteRow(), in embedded mode, ResultSet is positioned 
> before the next row, getXXX will fail
> > -In Network Server mode, the ResultSet stays on the deleted row after 
> deleteRow and hence no error for getXXX
> > -column 1 on this deleted row is 0
> > +Since after deleteRow(), in embedded mode and Network Server mode using 
> Derby Net Client, ResultSet is positioned before the next row, getXXX will 
> fail
> > +SQL State : null
> > +Got expected exception Invalid operation to read at current cursor 
> position.
> > calling deleteRow again w/o first positioning the ResultSet on the next 
> row will fail
> > SQL State : 24000
> > Got expected exception Invalid cursor state - no current row.
> > Position the ResultSet with next()
> > Should be able to deletRow() on the current row now
> > +Positive Test1b - request updatable resultset for forward only type 
> resultset
> > +column 1 on this row before updateInt is 1
> > +column 1 on this row after updateInt is 234
> > +column 2 on this row before updateString is aa
> > +now updateRow on the row
> > +Since after updateRow(), in embedded mode and Network Server mode using 
> Derby Net Client, ResultSet is positioned before the next row, getXXX will 
> fail
> > +SQL State : null
> > +Got expected exception Invalid operation to read at current cursor 
> position.
> > +calling updateRow again w/o first positioning the ResultSet on the next 
> row will fail
> > +SQL State : null
> > +Got expected exception Invalid operation to update at current cursor 
> position
> > +Position the ResultSet with next()
> > +Should be able to updateRow() on the current row now
> > +Positive Test2 - even if no columns from table specified in the column 
> list, we should be able to get updatable resultset
> > +Will work in embedded mode because target table is not derived from the 
> first column in the select list
> > +Will not work in network server mode because it derives the target 
> tabke from the first column in the select list
> > +total number of rows in T1
> > + 1
> > + -
> > + {3}
> > +column 1 on this row is 1
> > +SQL State : 42X01
> > +Got expected exception Syntax error: Encountered "WHERE" at line 1, 
> column 14.
> > +total number of rows in T1 after one deleteRow is
> > + 1
> > + -
> > + {3}
> > +Positive Test3a - use prepared statement with concur updatable status 
> to test deleteRow
> > +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
> > +got TYPE_FORWARD_ONLY? true
> > +got CONCUR_UPDATABLE? true
> > +column 1 on this row is 1
> > +Since after deleteRow(), ResultSet is positioned before the next row, 
> getXXX will fail
> > +SQL State : null
> > +Got expected exception Invalid operation to read at current cursor 
> position.
> > +calling deleteRow again w/o first positioning the ResultSet on the next 
> row will fail
> > +SQL State : 24000
> > +Got expected exception Invalid cursor state - no current row.
> > +Position the ResultSet with next()
> > +Should be able to deletRow() on the current row now
> > +Positive Test3b - use prepared statement with concur updatable status 
> to test updateXXX
> > +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
> > +got TYPE_FORWARD_ONLY? true
> > +got CONCUR_UPDATABLE? true
> > +column 1 on this row is 1
> > +column 1 on this row after updateInt is 5
> > +Since after updateRow(), ResultSet is positioned before the next row, 
> getXXX will fail
> > +SQL State : null
> > +Got expected exception Invalid operation to read at current cursor 
> position.
> > +calling updateRow/updateXXX again w/o first positioning the ResultSet 
> on the next row will fail
> > +SQL State : null
> > +Got expected exception Invalid operation to update at current cursor 
> position
> > +SQL State : null
> > +Got expected exception Invalid operation to update at current cursor 
> position
> > +SQL State : null
> > +Got expected exception Invalid operation at current cursor position.
> > +Position the ResultSet with next()
> > +Should be able to cancelRowUpdates() on the current row now
> > +Positive Test4 - use callable statement with concur updatable status
> > +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
> > +got TYPE_FORWARD_ONLY? true
> > +got CONCUR_UPDATABLE? true
> > +column 1 on this row is 1
> > +Since after deleteRow(), ResultSet is positioned before the next row, 
> getXXX will fail
> > +SQL State : null
> > +Got expected exception Invalid operation to read at current cursor 
> position.
> > +calling deleteRow again w/o first positioning the ResultSet on the next 
> row will fail
> > +SQL State : 24000
> > +Got expected exception Invalid cursor state - no current row.
> > +Position the ResultSet with next()
> > +Should be able to deletRow() on the current row now
> > +Positive Test5 - donot have to select primary key to get an updatable 
> resultset
> > +column 1 on this row is 1
> > +now try to delete row when primary key is not selected for that row
> > +Positive Test6a - For Forward Only resultsets, DatabaseMetaData will 
> return false for ownDeletesAreVisible and deletesAreDetected
> > +This is because, after deleteRow, we position the ResultSet before the 
> next row. We don't make a hole for the deleted row and then stay on that 
> deleted hole
> > +ownDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? false
> > +othersDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? true
> > +deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? false
> > +The JDBC program should look at rowDeleted only if deletesAreDetected 
> returns true
> > +Since Derby returns false for detlesAreDetected for FORWARD_ONLY 
> updatable resultset,the program should not rely on rs.rowDeleted() for 
> FORWARD_ONLY updatable resultsets
> > +Have this call to rs.rowDeleted() just to make sure the method does 
> always return false? false
> > +Have this call to rs.rowDeleted() just to make sure the method does 
> always return false? false
> > +Positive Test6b - For Forward Only resultsets, DatabaseMetaData will 
> return false for ownUpdatesAreVisible and updatesAreDetected
> > +This is because, after updateRow, we position the ResultSet before the 
> next row
> > +ownUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? false
> > +othersUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? true
> > +updatesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? false
> > +The JDBC program should look at rowUpdated only if updatesAreDetected 
> returns true
> > +Since Derby returns false for updatesAreDetected for FORWARD_ONLY 
> updatable resultset,the program should not rely on rs.rowUpdated() for 
> FORWARD_ONLY updatable resultsets
> > +Have this call to rs.rowUpdated() just to make sure the method does 
> always return false? false
> > +Have this call to rs.rowUpdated() just to make sure the method does 
> always return false? false
> > +Positive Test7a - delete using updatable resultset api from a temporary 
> table
> > +following rows in temp table before deleteRow
> > + C21,C22
> > + --- ---
> > + {21,1}
> > + {22,1}
> > +As expected, no rows in temp table after deleteRow
> > + C21,C22
> > + --- ---
> > +Positive Test7b - update using updatable resultset api from a temporary 
> table
> > +following rows in temp table before deleteRow
> > + C31,C32
> > + --- ---
> > + {21,1}
> > + {22,1}
> > +As expected, updated rows in temp table after updateRow
> > + C31,C32
> > + --- ---
> > + {123,1}
> > + {123,1}
> > +Positive Test8a - change the name of the statement when the resultset 
> is open and see if deleteRow still works
> > +This test works in embedded mode since Derby can handle the change in 
> the name of the statement with an open resultset
> > +But it fails under Network Server mode because JCC and Derby Net Client 
> do not allow statement name change when there an open resultset against it
> > +change the cursor name(case sensitive name) with setCursorName and then 
> try to deleteRow
> > +change the cursor name one more time with setCursorName and then try to 
> deleteRow
> > +SQL State : null
> > +Got expected exception Invalid operation: setCursorName() called when 
> there are open ResultSet's on the Statement.
> > +Positive Test8b - change the name of the statement when the resultset 
> is open and see if updateRow still works
> > +This test works in embedded mode since Derby can handle the change in 
> the name of the statement with an open resultset
> > +But it fails under Network Server mode because JCC and Derby Net Client 
> do not allow statement name change when there an open resultset against it
> > +change the cursor name one more time with setCursorName and then try to 
> updateRow
> > +change the cursor name(case sensitive name) with setCursorName and then 
> try to updateRow
> > +SQL State : null
> > +Got expected exception Invalid operation: setCursorName() called when 
> there are open ResultSet's on the Statement.
> > +Positive Test9a - using correlation name for the table in the select 
> sql works in embedded mode and Network Server using Derby Net Client driver
> > +Correlation name for table does not work in Network Server mode (using 
> JCC) because the drivers construct the delete sql with the correlation name 
> rather than the base table name
> > +column 1 on this row is 1
> > +now try to deleteRow
> > +PASS!!! passed in embedded mode
> > +Positive Test9b - using correlation name for updatable columns is not 
> allowed.
> > +Table t1 has following rows
> > + C1,C2
> > + -- --
> > + {1,aa }
> > + {2,bb }
> > + {3,cc }
> > +attempt to get an updatable resultset using correlation name for an 
> updatable column
> > +The sql is SELECT c1 as col1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
> > +SQL State : 42X42
> > +Got expected exception Correlation name not allowed for column 'C1' 
> because it is part of the FOR UPDATE list.
> > +attempt to get an updatable resultset using correlation name for an 
> readonly column. It should work
> > +The sql is SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
> > +Table t1 after updateRow has following rows
> > + C1,C2
> > + -- --
> > + {11,aa }
> > + {2,bb }
> > + {3,cc }
> > +Positive Test9c - try to updateXXX on a readonly column. Should get 
> error
> > +SQL State : null
> > +Got expected exception Column not updatable
> > +attempt to get an updatable resultset using correlation name for an 
> readonly column. It should work
> > +The sql is SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
> > +Table t1 after updateRow has following rows
> > + C1,C2
> > + -- --
> > + {11,aa }
> > + {2,bb }
> > + {3,cc }
> > +Positive Test9d - try to updateXXX on a readonly column with 
> correlation name. Should get error
> > +SQL State : null
> > +Got expected exception Column not updatable
> > +Table t1 has following rows
> > + C1,C2
> > + -- --
> > + {1,aa }
> > + {2,bb }
> > + {3,cc }
> > +Positive Test10 - 2 updatable resultsets going against the same table, 
> will they conflict?
> > +delete using first resultset
> > +attempt to send deleteRow on the same row through a different resultset 
> should throw an exception
> > +SQL State : XCL08
> > +Got expected exception Cursor 'SQL_CURLH000C51' is not on a row.
> > +Move to next row in the 2nd resultset and then delete using the second 
> resultset
> > +Positive Test11 - setting the fetch size to > 1 will be ignored by 
> updatable resultset. Same as updatable cursors
> > +Notice the Fetch Size in run time statistics output.
> > +1
> 
> > +-----
> > +Statement Name:
> > + SQL_CURLH000C54
> > +Statement Text:
> > + SELECT * FROM t1 FOR UPDATE of c1
> > +Parse Time: 0
> > +Bind Time: 0
> > +Optimize Time: 0
> > +Generate Time: 0
> > +Compile Time: 0
> > +Execute Time: 0
> > +Begin Compilation Timestamp : null
> > +End Compilation Timestamp : null
> > +Begin Execution Timestamp : null
> > +End Execution Timestamp : null
> > +Statement Execution Plan Text:
> > +Table Scan ResultSet for T1 at read committed isolation level using 
> exclusive row locking chosen by the optimizer
> > +Number of opens = 1
> > +Rows seen = 0
> > +Rows filtered = 0
> > +Fetch Size = 1
> > + constructor time (milliseconds) = 0
> > + open time (milliseconds) = 0
> > + next time (milliseconds) = 0
> > + close time (milliseconds) = 0
> > +scan information:
> > + Bit set of columns fetched=All
> > + Number of columns fetched=2
> > + Number of pages visited=0
> > + Number of rows qualified=0
> > + Number of rows visited=0
> > + Scan type=heap
> > + start position:
> > +null stop position:
> > +null qualifiers:
> > +None
> > +statement's fetch size is 200
> > +Positive Test12a - make sure delete trigger gets fired when deleteRow 
> is issued
> > +Verify that before delete trigger got fired, row count is 0 in 
> deleteTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {0}
> > +column 1 on this row is 1
> > +now try to delete row and make sure that trigger got fired
> > +Verify that delete trigger got fired by verifying the row count to be 1 
> in deleteTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {1}
> > +Positive Test12b - make sure update trigger gets fired when updateRow 
> is issued
> > +Verify that before update trigger got fired, row count is 0 in 
> updateTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {0}
> > +column 1 on this row is 1
> > +now try to update row and make sure that trigger got fired
> > +Verify that update trigger got fired by verifying the row count to be 1 
> in updateTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {1}
> > +Positive Test13a - Another test case for delete trigger
> > +column 1 on this row is 1
> > +this delete row will fire the delete trigger which will delete all the 
> rows from the table and from the resultset
> > +SQL State : null
> > +Got expected exception Invalid operation: result set closed
> > +Verify that delete trigger got fired by verifying the row count to be 0 
> in table1WithTriggers
> > + 1
> > + -
> > + {0}
> > +Positive Test13b - Another test case for update trigger
> > +Look at the current contents of table2WithTriggers
> > + C1,C2
> > + -- --
> > + {1,1}
> > + {2,2}
> > + {3,3}
> > + {4,4}
> > +column 1 on this row is 2
> > +this update row will fire the update trigger which will update all the 
> rows in the table to have c1=1 and hence no more rows will qualify for the 
> resultset
> > +SQL State : null
> > +Got expected exception Invalid operation: result set closed
> > +Verify that update trigger got fired by verifying that all column c1s 
> have value 1 in table2WithTriggers
> > + C1,C2
> > + -- --
> > + {1,1}
> > + {1,2}
> > + {1,3}
> > + {1,4}
> > +Positive Test14a - make sure self referential delete cascade works when 
> deleteRow is issued
> > + C1,C2
> > + -- --
> > + {e1,null}
> > + {e2,e1}
> > + {e3,e2}
> > + {e4,e3}
> > +column 1 on this row is e1
> > +this delete row will cause the delete cascade constraint to delete all 
> the rows from the table and from the resultset
> > +SQL State : null
> > +Got expected exception Invalid operation: result set closed
> > +Verify that delete trigger got fired by verifying the row count to be 0 
> in selfReferencingT1
> > + 1
> > + -
> > + {0}
> > +Positive Test14b - make sure self referential update restrict works 
> when updateRow is issued
> > + C1,C2
> > + -- --
> > + {e1,null}
> > + {e2,e1}
> > + {e3,e2}
> > + {e4,e3}
> > +column 1 on this row is e1
> > +update row should fail because cascade constraint is update restrict
> > +SQL State : 23503
> > +Got expected exception UPDATE on table 'SELFREFERENCINGT2' caused a 
> violation of foreign key constraint 'MANAGES2' for key (e1). The statement 
> has been rolled back.
> > +Positive Test15 - With autocommit off, attempt to drop a table when 
> there is an open updatable resultset on it
> > +Opened an updatable resultset. Now trying to drop that table through 
> another Statement
> > +SQL State : X0X95
> > +Got expected exception Operation 'DROP TABLE' cannot be performed on 
> object 'T1' because there is an open ResultSet dependent on that object.
> > +Since autocommit is off, the drop table exception will NOT result in a 
> runtime rollback and hence updatable resultset object is still open
> > +Positive Test16a - Do deleteRow within a transaction and then rollback 
> the transaction
> > +Verify that before delete trigger got fired, row count is 0 in 
> deleteTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {0}
> > +Verify that before deleteRow, row count is 4 in table0WithTriggers
> > + 1
> > + -
> > + {4}
> > +column 1 on this row is 1
> > +now try to delete row and make sure that trigger got fired
> > +Verify that delete trigger got fired by verifying the row count to be 1 
> in deleteTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {1}
> > +Verify that deleteRow in transaction, row count is 3 in 
> table0WithTriggers
> > + 1
> > + -
> > + {3}
> > +Verify that after rollback, row count is back to 0 in 
> deleteTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {0}
> > +Verify that after rollback, row count is back to 4 in 
> table0WithTriggers
> > + 1
> > + -
> > + {4}
> > +Positive Test16b - Do updateRow within a transaction and then rollback 
> the transaction
> > +Verify that before update trigger got fired, row count is 0 in 
> updateTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {0}
> > +Look at the data in table0WithTriggers before trigger gets fired
> > + C1,C2
> > + -- --
> > + {1,1}
> > + {2,2}
> > + {3,3}
> > + {4,4}
> > +column 1 on this row is 1
> > +now try to update row and make sure that trigger got fired
> > +Verify that update trigger got fired by verifying the row count to be 1 
> in updateTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {1}
> > +Verify that new data in table0WithTriggers
> > + C1,C2
> > + -- --
> > + {123,1}
> > + {2,2}
> > + {3,3}
> > + {4,4}
> > +Verify that after rollback, row count is back to 0 in 
> updateTriggerInsertIntoThisTable
> > + 1
> > + -
> > + {0}
> > +Verify that after rollback, table0WithTriggers is back to its original 
> contents
> > + C1,C2
> > + -- --
> > + {1,1}
> > + {2,2}
> > + {3,3}
> > + {4,4}
> > +Positive Test17 - After deleteRow, resultset is positioned before the 
> next row
> > +getXXX right after deleteRow will fail because resultset is not 
> positioned on a row, instead it is right before the next row
> > +SQL State : null
> > +Got expected exception Invalid operation to read at current cursor 
> position.
> > +Positive Test18 - Test cancelRowUpdates method as the first updatable 
> ResultSet api on a read-only resultset
> > +SQL State : null
> > +Got expected exception This method cannot be invoked while the cursor 
> is on the insert row or if this ResultSet object has a concurrency of 
> CONCUR_READ_ONLY.
> > +Positive Test19 - Test updateRow method as the first updatable 
> ResultSet api on a read-only resultset
> > + Got expected exception : This method cannot be invoked while the 
> cursor is on the insert row or if the concurrency of this ResultSet object 
> is CONCUR_READ_ONLY.
> > +Positive Test20 - Test updateXXX methods as the first updatable 
> ResultSet api on a read-only resultset
> > + Test updateShort on a readonly resultset
> > + Using column position as first parameter to updateShort
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateShort
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateInt on a readonly resultset
> > + Using column position as first parameter to updateInt
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateInt
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateLong on a readonly resultset
> > + Using column position as first parameter to updateLong
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateLong
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateBigDecimal on a readonly resultset
> > + Using column position as first parameter to updateBigDecimal
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateBigDecimal
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateFloat on a readonly resultset
> > + Using column position as first parameter to updateFloat
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateFloat
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateDouble on a readonly resultset
> > + Using column position as first parameter to updateDouble
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateDouble
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateString on a readonly resultset
> > + Using column position as first parameter to updateString
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateString
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateAsciiStream on a readonly resultset
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateCharacterStream on a readonly resultset
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateByte on a readonly resultset
> > + Using column position as first parameter to updateByte
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateByte
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateBytes on a readonly resultset
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateBinaryStream on a readonly resultset
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateClob on a readonly resultset
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Test updateDate on a readonly resultset
> > + Using column position as first parameter to updateDate
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateDate
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateTime on a readonly resultset
> > + Using column position as first parameter to updateTime
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateTime
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateTimestamp on a readonly resultset
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateBlob on a readonly resultset
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Test updateBoolean on a readonly resultset
> > + Using column position as first parameter to updateBoolean
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateBoolean
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateNull on a readonly resultset
> > + Using column position as first parameter to updateNull
> > + Got expected exception : ResultSet is not updatable.
> > + Using column name as first parameter to updateNull
> > + Got expected exception : ResultSet is not updatable.
> > + Test updateArray on a readonly resultset
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Test updateRef on a readonly resultset
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Positive Test21 - Test all updateXXX(excluding updateObject) methods on 
> all the supported sql datatypes
> > +Next datatype to test is SMALLINT
> > + Testing updateShort on SQL type SMALLINT
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type SMALLINT
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type SMALLINT
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type SMALLINT
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type SMALLINT
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type SMALLINT
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type SMALLINT
> > + Using column position as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Using column name as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Testing updateAsciiStream on SQL type SMALLINT
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateCharacterStream on SQL type SMALLINT
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateByte on SQL type SMALLINT
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type SMALLINT
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type SMALLINT
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type SMALLINT
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type SMALLINT
> > + Using column position as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Testing updateTime on SQL type SMALLINT
> > + Using column position as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Testing updateTimestamp on SQL type SMALLINT
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Testing updateBlob on SQL type SMALLINT
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type SMALLINT
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type SMALLINT
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type SMALLINT
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateRef on SQL type SMALLINT
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Next datatype to test is INTEGER
> > + Testing updateShort on SQL type INTEGER
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type INTEGER
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type INTEGER
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type INTEGER
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type INTEGER
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type INTEGER
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type INTEGER
> > + Using column position as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Using column name as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Testing updateAsciiStream on SQL type INTEGER
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateCharacterStream on SQL type INTEGER
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateByte on SQL type INTEGER
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type INTEGER
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type INTEGER
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type INTEGER
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type INTEGER
> > + Using column position as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Testing updateTime on SQL type INTEGER
> > + Using column position as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Testing updateTimestamp on SQL type INTEGER
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Testing updateBlob on SQL type INTEGER
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type INTEGER
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type INTEGER
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type INTEGER
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateRef on SQL type INTEGER
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Next datatype to test is BIGINT
> > + Testing updateShort on SQL type BIGINT
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type BIGINT
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type BIGINT
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type BIGINT
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type BIGINT
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type BIGINT
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type BIGINT
> > + Using column position as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Using column name as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Testing updateAsciiStream on SQL type BIGINT
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateCharacterStream on SQL type BIGINT
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateByte on SQL type BIGINT
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type BIGINT
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type BIGINT
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type BIGINT
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type BIGINT
> > + Using column position as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Testing updateTime on SQL type BIGINT
> > + Using column position as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Testing updateTimestamp on SQL type BIGINT
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Testing updateBlob on SQL type BIGINT
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type BIGINT
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type BIGINT
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type BIGINT
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateRef on SQL type BIGINT
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Next datatype to test is DECIMAL(10,5)
> > + Testing updateShort on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Using column name as first parameter to updateString
> > + Got expected exception : Invalid data conversion: Parameter instance 
> 1992 is invalid for requested conversion.
> > + Testing updateAsciiStream on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateCharacterStream on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateByte on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Testing updateTime on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Testing updateTimestamp on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Testing updateBlob on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateRef on SQL type DECIMAL(10,5)
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Next datatype to test is REAL
> > + Testing updateShort on SQL type REAL
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type REAL
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type REAL
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type REAL
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type REAL
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type REAL
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type REAL
> > + Using column position as first parameter to updateString
> > + Using column name as first parameter to updateString
> > + Testing updateAsciiStream on SQL type REAL
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateCharacterStream on SQL type REAL
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateByte on SQL type REAL
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type REAL
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type REAL
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type REAL
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type REAL
> > + Using column position as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Testing updateTime on SQL type REAL
> > + Using column position as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Testing updateTimestamp on SQL type REAL
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Testing updateBlob on SQL type REAL
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type REAL
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type REAL
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type REAL
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateRef on SQL type REAL
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Next datatype to test is DOUBLE
> > + Testing updateShort on SQL type DOUBLE
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type DOUBLE
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type DOUBLE
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type DOUBLE
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type DOUBLE
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type DOUBLE
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type DOUBLE
> > + Using column position as first parameter to updateString
> > + Using column name as first parameter to updateString
> > + Testing updateAsciiStream on SQL type DOUBLE
> > + Using column position as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateAsciiStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateCharacterStream on SQL type DOUBLE
> > + Using column position as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateCharacterStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateByte on SQL type DOUBLE
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type DOUBLE
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type DOUBLE
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type DOUBLE
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type DOUBLE
> > + Using column position as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateDate
> > + Got expected exception : Illegal Conversion
> > + Testing updateTime on SQL type DOUBLE
> > + Using column position as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTime
> > + Got expected exception : Illegal Conversion
> > + Testing updateTimestamp on SQL type DOUBLE
> > + Using column position as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateTimestamp
> > + Got expected exception : Illegal Conversion
> > + Testing updateBlob on SQL type DOUBLE
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type DOUBLE
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type DOUBLE
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type DOUBLE
> > + Using column position as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateArray
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateRef on SQL type DOUBLE
> > + Using column position as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateRef
> > + Got expected exception : JDBC 3 method called - not yet supported
> > +Next datatype to test is CHAR(60)
> > + Testing updateShort on SQL type CHAR(60)
> > + Using column position as first parameter to updateShort
> > + Using column name as first parameter to updateShort
> > + Testing updateInt on SQL type CHAR(60)
> > + Using column position as first parameter to updateInt
> > + Using column name as first parameter to updateInt
> > + Testing updateLong on SQL type CHAR(60)
> > + Using column position as first parameter to updateLong
> > + Using column name as first parameter to updateLong
> > + Testing updateBigDecimal on SQL type CHAR(60)
> > + Using column position as first parameter to updateBigDecimal
> > + Using column name as first parameter to updateBigDecimal
> > + Testing updateFloat on SQL type CHAR(60)
> > + Using column position as first parameter to updateFloat
> > + Using column name as first parameter to updateFloat
> > + Testing updateDouble on SQL type CHAR(60)
> > + Using column position as first parameter to updateDouble
> > + Using column name as first parameter to updateDouble
> > + Testing updateString on SQL type CHAR(60)
> > + Using column position as first parameter to updateString
> > + Using column name as first parameter to updateString
> > + Testing updateAsciiStream on SQL type CHAR(60)
> > + Using column position as first parameter to updateAsciiStream
> > + Using column name as first parameter to updateAsciiStream
> > + Testing updateCharacterStream on SQL type CHAR(60)
> > + Using column position as first parameter to updateCharacterStream
> > + Using column name as first parameter to updateCharacterStream
> > + Testing updateByte on SQL type CHAR(60)
> > + Using column position as first parameter to updateByte
> > + Using column name as first parameter to updateByte
> > + Testing updateBytes on SQL type CHAR(60)
> > + Using column position as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBytes
> > + Got expected exception : Illegal Conversion
> > + Testing updateBinaryStream on SQL type CHAR(60)
> > + Using column position as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Using column name as first parameter to updateBinaryStream
> > + Got expected exception : Illegal Conversion
> > + Testing updateClob on SQL type CHAR(60)
> > + Using column position as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateClob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateDate on SQL type CHAR(60)
> > + Using column position as first parameter to updateDate
> > + Using column name as first parameter to updateDate
> > + Testing updateTime on SQL type CHAR(60)
> > + Using column position as first parameter to updateTime
> > + Using column name as first parameter to updateTime
> > + Testing updateTimestamp on SQL type CHAR(60)
> > + Using column position as first parameter to updateTimestamp
> > + Using column name as first parameter to updateTimestamp
> > + Testing updateBlob on SQL type CHAR(60)
> > + Using column position as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Using column name as first parameter to updateBlob
> > + Got expected exception : JDBC 3 method called - not yet supported
> > + Testing updateBoolean on SQL type CHAR(60)
> > + Using column position as first parameter to updateBoolean
> > + Using column name as first parameter to updateBoolean
> > + Testing updateNull on SQL type CHAR(60)
> > + Using column position as first parameter to updateNull
> > + Using column name as first parameter to updateNull
> > + Testing updateArray on SQL type CHAR(60)
> > + Using col...
> 
> [Message clipped]

Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server

Posted by David Van Couvering <da...@vancouvering.com>.
Hi Mamta.  These are some pretty significant incompatibilities between 
DNC and Embedded drivers.  Are all these logged as JIRA bugs?  Are 
they/will they be called out in the documentation?

Thanks,

David

Mamta Satoor wrote:

> Hi,
>  
> Sometime back, I submitted patches for update and delete on forward only 
> updatable resultsets using JDBC apis for Embedded Derby. With this mail, 
> I would like to submit similar support for Network Server using Derby 
> Net Client.
>  
> The functionality for Network Server is similar to what Embedded Derby 
> supports, with the exception of following differences
> 1)DNC requires that the first column in the select list be from the 
> target table.
> eg select 1, c11 from t1 for update of c11 will fail in Network Server 
> because driver looks at first column to determine the target table for 
> update/delete. This is not required by embedded driver. There are tests 
> for this in the attached patch(Positive Test2 in updatableResultSet.java).
> 2)Embedded driver allows Statement name change when there is an open 
> resultset on that statement object. DNC driver does not supported that. 
> (Positive Test8a and Test8b in updatableResultSet.java )
> 3)(Positive Test20) Embedded driver allows updateString on SMALLINT, 
> INTEGER, BIGINT, DECIMAL datatypes. DNC doesn't.
> Embedded driver support updateBytes on CHAR, VARCHAR, LONG VARCHAR 
> datatypes. DNC doesn't
> Embedded driver support updateTime on TIMESTAMP datatypes. DNC doesn't
> Embedded driver supports updateObject with null value. DNC doesn't
> DNC does not support updateClob and updateBlob
>  
> Following files are changed by this patch
> **************svn stat************
> M      
> java\testing\org\apache\derbyTesting\functionTests\tests\lang\updatableResultSet.java
> M      
> java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\updatableResultSet.out 
> 
> M      
> java\testing\org\apache\derbyTesting\functionTests\master\updatableResultSet.out
> M      
> java\testing\org\apache\derbyTesting\functionTests\master\jdk14\updatableResultSet.out
> M      
> java\testing\org\apache\derbyTesting\functionTests\suites\DerbyNet.exclude
> M      java\client\org\apache\derby\client\am\ResultSet.java
> **********************************
>  
> Following is a brief description of the actual changes that are going 
> into the patch
> 1)After updateRow(provided updateXXX were issued on the row before 
> updateRow) and deleteRow, position the resultset to right before the 
> next row. This matches the embedded driver behavior.
> 2)If ResultSet is not positioned on a row and user issues updateRow (w/o 
> prior updateXXX), then throw an exception that it is not a valid 
> operation. This matches the embedded driver behavior.
> 3)Made changes to DNC so that it does not require all the updatable 
> columns in the sql to be modified with updateXXX prior to updateRow. 
> This matches the embedded driver behavior.
> 4)To preserve case sensitivity and spaces in the names, put quotes 
> around database object names like table name, column name, cursor name 
> etc. Similar to embedded driver.(Positive Test31a, Test31b)
> 5)For a select sql like, select 2, c11 from t1, Derby has null for table 
> name and schema name for column 2. DNC needs to check for these nulls to 
> avoid null pointer exception.
>  
> As always, please review the patch and let me know of any comments,
> Mamta
>  
> 
> 
> ------------------------------------------------------------------------
> 
> Index: java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java
> ===================================================================
> --- java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java	(revision 170535)
> +++ java/testing/org/apache/derbyTesting/functionTests/tests/lang/updatableResultSet.java	(working copy)
> @@ -253,13 +253,7 @@
>  			System.out.println("Negative Testl - request for scroll insensitive updatable resultset will give a read only scroll insensitive resultset");
>  			conn.clearWarnings();
>  			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
> -			warnings = conn.getWarnings();
> -			while (warnings != null)
> -			{
> -				JDBCDisplayUtil.ShowWarnings(System.out, warnings);
> -				warnings = warnings.getNextWarning();
> -			}
> -			conn.clearWarnings();
> +			JDBCDisplayUtil.ShowWarnings(System.out, conn);
>  			System.out.println("requested TYPE_SCROLL_INSENSITIVE, CONCUR_UPDATABLE but that is not supported");
>  			System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " +  (stmt.getResultSetType() == ResultSet.TYPE_SCROLL_INSENSITIVE));
>  			System.out.println("Make sure that we got CONCUR_READ_ONLY? " +  (stmt.getResultSetConcurrency() == ResultSet.CONCUR_READ_ONLY));
> @@ -292,12 +286,7 @@
>  
>  			System.out.println("Negative Test2 - request for scroll sensitive updatable resultset will give a read only scroll insensitive resultset");
>  			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
> -			while (warnings != null)
> -			{
> -				System.out.println("warnings on connection = " + warnings);
> -				warnings = warnings.getNextWarning();
> -			}
> -			conn.clearWarnings();
> +			JDBCDisplayUtil.ShowWarnings(System.out, conn);
>        System.out.println("requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE but that is not supported");
>  			System.out.println("Jira issue Derby-154 : When client connects to Network Server using JCC, it incorrectly shows support for scroll sensitive updatable resultsets");
>        System.out.println("Make sure that we got TYPE_SCROLL_INSENSITIVE? " +  (stmt.getResultSetType() == ResultSet.TYPE_SCROLL_INSENSITIVE));
> @@ -377,20 +366,13 @@
>  			//have to close the resultset because by default, resultsets are held open over commit
>  			rs.close();
>  
> -
>  			System.out.println("Negative Test5 - request updatable resultset for sql with no FOR UPDATE clause");
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>  			rs = stmt.executeQuery("select * from t1");//notice that we forgot to give mandatory FOR UPDATE clause for updatable resultset
>  			System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY));
>  			System.out.println("Jira issue Derby-159 : Warnings raised by Derby are not getting passed to the Client in Network Server Mode");
>  			System.out.println("Will see the warnings in embedded mode only");
> -			warnings = rs.getWarnings();
> -			while (warnings != null)
> -			{
> -				System.out.println("Expected warnings on resultset = " + warnings);
> -				warnings = warnings.getNextWarning();
> -			}
> -			rs.clearWarnings();
> +			JDBCDisplayUtil.ShowWarnings(System.out, rs);
>  			rs.next();
>        System.out.println("Now attempting to send a delete on a sql with no FOR UPDATE clause.");
>  			try {
> @@ -410,7 +392,6 @@
>  				System.out.println("SQL State : " + e.getSQLState());
>  				System.out.println("Got expected exception " + e.getMessage());
>  			}
> -
>  			//have to close the resultset because by default, resultsets are held open over commit
>  			rs.close();
>  
> @@ -420,13 +401,7 @@
>  			System.out.println("Make sure that we got CONCUR_READ_ONLY? " + (rs.getConcurrency() == ResultSet.CONCUR_READ_ONLY));
>  			System.out.println("Jira issue Derby-159 : Warnings raised by Derby are not getting passed to the Client in Network Server Mode");
>  			System.out.println("Will see the warnings in embedded mode only");
> -			warnings = rs.getWarnings();
> -			while (warnings != null)
> -			{
> -				System.out.println("Expected warnings on resultset = " + warnings);
> -				warnings = warnings.getNextWarning();
> -			}
> -			rs.clearWarnings();
> +			JDBCDisplayUtil.ShowWarnings(System.out, rs);
>  			rs.next();
>        System.out.println("Now attempting to send a delete on a sql with FOR READ ONLY clause.");
>  			try {
> @@ -463,14 +438,12 @@
>  				System.out.println("Got expected exception " + e.getMessage());
>  			}
>        System.out.println("Now attempt a updateRow without first doing next on the resultset.");
> -			System.out.println("In embedded mode, updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX");
> -			System.out.println("In Network Server mode, if no updateXXX were issued before updateRow, then updateRow is a no-op and doesn't check if it is on a row or not");
> +			System.out.println("updateRow will check if it is on a row or not even " +
> +				"though no changes have been made to the row using updateXXX");
>  			try {
>  				rs.updateRow();
> -				if (TestUtil.isEmbeddedFramework()) 
> -					System.out.println("FAIL!!! In embedded mode, this updateRow should have failed because resultset is not on a row");
> -				else
> -					System.out.println("PASS!!! In Network Server mode, this updateRow is a no-op because no updateXXX were issued before the updateRow");
> +				System.out.println("FAIL!!! updateRow should have failed because " +
> +						"resultset is not on a row");
>  			}
>  			catch (SQLException e) {
>  				System.out.println("SQL State : " + e.getSQLState());
> @@ -664,12 +637,7 @@
>  
>  			System.out.println("Positive Test1a - request updatable resultset for forward only type resultset");
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -			warnings = conn.getWarnings();
> -			while (warnings != null)
> -			{
> -				System.out.println("Unexpected warnings = " + warnings);
> -				warnings = warnings.getNextWarning();
> -			}
> +			JDBCDisplayUtil.ShowWarnings(System.out, conn);
>        System.out.println("requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE");
>        System.out.println("got TYPE_FORWARD_ONLY? " +  (stmt.getResultSetType() == ResultSet.TYPE_FORWARD_ONLY));
>        System.out.println("got CONCUR_UPDATABLE? " +  (stmt.getResultSetConcurrency() == ResultSet.CONCUR_UPDATABLE));
> @@ -679,17 +647,15 @@
>        System.out.println("column 1 on this row before deleteRow is " + rs.getInt(1));
>        System.out.println("column 2 on this row before deleteRow is " + rs.getString(2));
>  			rs.deleteRow();
> -      System.out.println("Since after deleteRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail");
> -      System.out.println("In Network Server mode, the ResultSet stays on the deleted row after deleteRow and hence no error for getXXX");
> +      System.out.println("Since after deleteRow(), in embedded mode and Network "+
> +				"Server mode using Derby Net Client, ResultSet is positioned before " +
> +				"the next row, getXXX will fail");
>  			try {
>  				System.out.println("column 1 on this deleted row is " + rs.getInt(1));
>  			}
>  			catch (SQLException e) {
> -				if (TestUtil.isEmbeddedFramework()) {
> -					System.out.println("SQL State : " + e.getSQLState());
> -					System.out.println("Got expected exception " + e.getMessage());
> -				} else
> -					System.out.println("Got unexpected exception " + e.getMessage());
> +				System.out.println("SQL State : " + e.getSQLState());
> +				System.out.println("Got expected exception " + e.getMessage());
>  			}
>        System.out.println("calling deleteRow again w/o first positioning the ResultSet on the next row will fail");
>  			try {
> @@ -707,16 +673,10 @@
>  			//have to close the resultset because by default, resultsets are held open over commit
>  			rs.close();
>  
> -			if (TestUtil.isEmbeddedFramework()) {
>  			System.out.println("Positive Test1b - request updatable resultset for forward only type resultset");
>  			reloadData();
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -			warnings = conn.getWarnings();
> -			while (warnings != null)
> -			{
> -				System.out.println("Unexpected warnings = " + warnings);
> -				warnings = warnings.getNextWarning();
> -			}
> +			JDBCDisplayUtil.ShowWarnings(System.out, conn);
>  			rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
>  			rs.next();
>  			System.out.println("column 1 on this row before updateInt is " + rs.getInt(1));
> @@ -725,8 +685,9 @@
>  			System.out.println("column 2 on this row before updateString is " + rs.getString(2));
>  			System.out.println("now updateRow on the row");
>  			rs.updateRow();
> -			System.out.println("Since after updateRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail");
> -      System.out.println("In Network Server mode, the ResultSet stays on the updated row after updateRow and hence no error for getXXX");
> +      System.out.println("Since after updateRow(), in embedded mode and Network "+
> +				"Server mode using Derby Net Client, ResultSet is positioned before " +
> +				"the next row, getXXX will fail");
>  			try {
>  				System.out.println("column 1 on this updateRow row is " + rs.getInt(1));
>  			}
> @@ -751,14 +712,33 @@
>  			//have to close the resultset because by default, resultsets are held open over commit
>  			rs.close();
>  
> -			System.out.println("Positive Test2 - even if no columns from table specified in the column list, we should be able to get updatable resultset");
> +			System.out.println("Positive Test2 - even if no columns from table " +
> +				"specified in the column list, we should be able to get updatable " +
> +				"resultset");
>        reloadData();
> +			System.out.println("Will work in embedded mode because target table is "+
> +				"not derived from the first column in the select list");
> +			System.out.println("Will not work in network server mode because it " +
> +				"derives the target tabke from the first column in the select list");
>        System.out.println("total number of rows in T1 ");
>        dumpRS(stmt.executeQuery("select count(*) from t1"));
>        rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
>  			rs.next();
>        System.out.println("column 1 on this row is " + rs.getInt(1));
> -			rs.deleteRow();
> +			try {
> +				rs.deleteRow();
> +				if (TestUtil.isNetFramework())
> +					System.out.println("FAIL!!! should have failed in network server");
> +				else
> +					System.out.println("PASS!!! passed in embedded mode");
> +			}
> +			catch (SQLException e) {
> +				if (TestUtil.isNetFramework()) {
> +					System.out.println("SQL State : " + e.getSQLState());
> +					System.out.println("Got expected exception " + e.getMessage());
> +				} else
> +					System.out.println("Got unexpected exception " + e.getMessage());
> +			}
>  			//have to close the resultset because by default, resultsets are held open over commit
>  			rs.close();
>        System.out.println("total number of rows in T1 after one deleteRow is ");
> @@ -908,7 +888,7 @@
>        System.out.println("deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? " + dbmt.deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY));
>        reloadData();
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>  			rs.next();
>        System.out.println("The JDBC program should look at rowDeleted only if deletesAreDetected returns true");
>        System.out.println("Since Derby returns false for detlesAreDetected for FORWARD_ONLY updatable resultset,the program should not rely on rs.rowDeleted() for FORWARD_ONLY updatable resultsets");
> @@ -971,21 +951,46 @@
>  			rs.close();
>  			stmt.executeUpdate("DROP TABLE SESSION.t3");
>  
> -			System.out.println("Positive Test8a - change the name of the resultset and see if deleteRow still works");
> +			System.out.println("Positive Test8a - change the name of the statement " +
> +				"when the resultset is open and see if deleteRow still works");
> +			System.out.println("This test works in embedded mode since Derby can " +
> +				"handle the change in the name of the statement with an open resultset");
> +			System.out.println("But it fails under Network Server mode because JCC " +
> +				"and Derby Net Client do not allow statement name change when there " +
> +				"an open resultset against it");
>        reloadData();
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>        System.out.println("change the cursor name(case sensitive name) with setCursorName and then try to deleteRow");
>  			stmt.setCursorName("CURSORNOUPDATe");//notice this name is case sensitive
> -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>  			rs.next();
>  			rs.deleteRow();
>        System.out.println("change the cursor name one more time with setCursorName and then try to deleteRow");
> -			stmt.setCursorName("CURSORNOUPDATE1");
> -			rs.next();
> -			rs.deleteRow();
> +			try {
> +				stmt.setCursorName("CURSORNOUPDATE1");
> +				rs.next();
> +				rs.deleteRow();
> +				if (TestUtil.isNetFramework())
> +					System.out.println("FAIL!!! should have failed in network server");
> +				else
> +					System.out.println("PASS!!! passed in embedded mode");
> +			}
> +			catch (SQLException e) {
> +				if (TestUtil.isNetFramework()) {
> +					System.out.println("SQL State : " + e.getSQLState());
> +					System.out.println("Got expected exception " + e.getMessage());
> +				} else
> +					System.out.println("Got unexpected exception " + e.getMessage());
> +			}
>  			rs.close();
>  
> -			System.out.println("Positive Test8b - change the name of the resultset and see if updateRow still works");
> +			System.out.println("Positive Test8b - change the name of the statement " +
> +				"when the resultset is open and see if updateRow still works");
> +			System.out.println("This test works in embedded mode since Derby can " +
> +				"handle the change in the name of the statement with an open resultset");
> +			System.out.println("But it fails under Network Server mode because JCC " +
> +				"and Derby Net Client do not allow statement name change when there " +
> +				"an open resultset against it");
>        reloadData();
>  			System.out.println("change the cursor name one more time with setCursorName and then try to updateRow");
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> @@ -994,21 +999,53 @@
>  			rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>  			rs.next();
>  			rs.updateLong(1,123);
> -			stmt.setCursorName("CURSORNOUPDATE1");
> -			rs.updateRow();
> +			try {
> +				stmt.setCursorName("CURSORNOUPDATE1");
> +				rs.updateRow();
> +				if (TestUtil.isNetFramework())
> +					System.out.println("FAIL!!! should have failed in network server");
> +				else
> +					System.out.println("PASS!!! passed in embedded mode");
> +			}
> +			catch (SQLException e) {
> +				if (TestUtil.isNetFramework()) {
> +					System.out.println("SQL State : " + e.getSQLState());
> +					System.out.println("Got expected exception " + e.getMessage());
> +				} else
> +					System.out.println("Got unexpected exception " + e.getMessage());
> +			}
>  			rs.close();
>  
> -			System.out.println("Positive Test9a - using correlation name for the table in the select sql is not a problem");
> +			System.out.println("Positive Test9a - using correlation name for the " +
> +				"table in the select sql works in embedded mode and Network Server " +
> +				"using Derby Net Client driver");
> +			System.out.println("Correlation name for table does not work in Network "+
> +				"Server mode (using JCC) because the drivers construct the delete sql "+
> +				"with the correlation name rather than the base table name");
>  			reloadData();
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 abcde FOR UPDATE of c1");
> +      rs = stmt.executeQuery("SELECT * FROM t1 abcde FOR UPDATE of c1");
>  			rs.next();
>        System.out.println("column 1 on this row is " + rs.getInt(1));
>        System.out.println("now try to deleteRow");
> -			rs.deleteRow();
> +			try {
> +				rs.deleteRow();
> +				if (TestUtil.isJCCFramework())
> +					System.out.println("FAIL!!! should have failed in network server");
> +				else
> +					System.out.println("PASS!!! passed in embedded mode");
> +			}
> +			catch (SQLException e) {
> +				if (TestUtil.isJCCFramework()) {
> +					System.out.println("SQL State : " + e.getSQLState());
> +					System.out.println("Got expected exception " + e.getMessage());
> +				} else
> +					System.out.println("Got unexpected exception " + e.getMessage());
> +			}
>  			rs.close();
> -                           
> -			System.out.println("Positive Test9b - using correlation name for updatable column name is not allowed");
> +
> +			System.out.println("Positive Test9b - using correlation name for " +
> +				"updatable columns is not allowed.");
>  			reloadData();
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>  			System.out.println("Table t1 has following rows");
> @@ -1055,22 +1092,6 @@
>  			System.out.println("Table t1 after updateRow has following rows");
>  			dumpRS(stmt.executeQuery("select * from t1"));
>  
> -			System.out.println("Positive Test9c - try to updateXXX on a readonly column. Should get error");
> -			reloadData();
> -			rs = stmt.executeQuery("SELECT c1, c2 FROM t1 abcde FOR UPDATE of c1");
> -			rs.next();
> -			try {
> -				rs.updateString(2,"bbbb");
> -				System.out.println("FAIL!!! updateString on readonly column should have failed");
> -			}
> -			catch (SQLException e) {
> -				System.out.println("SQL State : " + e.getSQLState());
> -				System.out.println("Got expected exception " + e.getMessage());
> -			}
> -			rs.close();
> -			System.out.println("Table t1 has following rows");
> -			dumpRS(stmt.executeQuery("select * from t1"));
> -
>  			System.out.println("Positive Test9d - try to updateXXX on a readonly column with correlation name. Should get error");
>  			reloadData();
>  			rs = stmt.executeQuery("SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1");
> @@ -1092,9 +1113,9 @@
>        reloadData();
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>  			stmt1 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
>  			rs.next();
> -			rs1 = stmt1.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> +			rs1 = stmt1.executeQuery("SELECT * FROM t1 FOR UPDATE");
>  			rs1.next();
>  			System.out.println("delete using first resultset");
>  			rs.deleteRow();
> @@ -1119,7 +1140,7 @@
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
>  			stmt.executeUpdate("call SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
>  			stmt.setFetchSize(200);
> -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE of c1");
> +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE of c1");
>  			System.out.println("Notice the Fetch Size in run time statistics output.");
>        showScanStatistics(rs, conn);
>  			System.out.println("statement's fetch size is " + stmt.getFetchSize());
> @@ -1205,6 +1226,7 @@
>  			dumpRS(stmt.executeQuery("select * from table2WithTriggers"));
>  			//have to close the resultset because by default, resultsets are held open over commit
>  			rs.close();
> +			conn.rollback();
>  
>  			System.out.println("Positive Test14a - make sure self referential delete cascade works when deleteRow is issued");
>  			dumpRS(stmt.executeQuery("select * from selfReferencingT1"));
> @@ -1252,7 +1274,7 @@
>        reloadData();
>        conn.setAutoCommit(false);
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -      rs = stmt.executeQuery("SELECT 1, 2 FROM t1 FOR UPDATE");
> +      rs = stmt.executeQuery("SELECT * FROM t1 FOR UPDATE");
>  			rs.next();
>  			System.out.println("Opened an updatable resultset. Now trying to drop that table through another Statement");
>  			stmt1 = conn.createStatement();
> @@ -1503,13 +1525,15 @@
>  					}
>  				}
>  			}
> +			conn.rollback();
>  			conn.setAutoCommit(true);
>  
>  			System.out.println("Positive Test21 - Test all updateXXX(excluding updateObject) methods on all the supported sql datatypes");
>  			conn.setAutoCommit(false);
> -			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -			stmt1 = conn.createStatement();
> +			PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM AllDataTypesForTestingTable FOR UPDATE", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> +			PreparedStatement pstmt1 = conn.prepareStatement("SELECT * FROM AllDataTypesNewValuesData");
>  			for (int sqlType = 1, checkAgainstColumn = 1; sqlType <= allSQLTypes.length; sqlType++ ) {
> +				conn.rollback();
>  				System.out.println("Next datatype to test is " + allSQLTypes[sqlType-1]);
>  				for (int updateXXXName = 1;  updateXXXName <= allUpdateXXXNames.length; updateXXXName++) {
>  					checkAgainstColumn = updateXXXName;
> @@ -1519,9 +1543,9 @@
>  							System.out.println("    Using column position as first parameter to " + allUpdateXXXNames[updateXXXName-1]);
>  						else
>  							System.out.println("    Using column name as first parameter to " + allUpdateXXXNames[updateXXXName-1]);
> -						rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable FOR UPDATE");
> +						rs = pstmt.executeQuery();
>  						rs.next();
> -						rs1 = stmt1.executeQuery("SELECT * FROM AllDataTypesNewValuesData");
> +						rs1 = pstmt1.executeQuery();
>  						rs1.next();
>  						try {
>  							if (updateXXXName == 1) {//update column with updateShort methods
> @@ -1642,7 +1666,8 @@
>  									rs.updateRef(ColumnNames[sqlType-1], null);
>                }
>  							rs.updateRow();
> -							if (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) {
> +							if ((TestUtil.isNetFramework() && updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) ||
> +								(TestUtil.isEmbeddedFramework() && updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))) {
>  								System.out.println("FAILURE : We shouldn't reach here. The test should have failed earlier on updateXXX or updateRow call");
>  								return;
>  							}
> @@ -1652,7 +1677,8 @@
>  								return;
>  							}
>  						} catch (Throwable e) {
> -							if (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
> +							if ((TestUtil.isNetFramework() && updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) ||
> +								(TestUtil.isEmbeddedFramework() && updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
>  								System.out.println("      Got expected exception : " + e.getMessage());
>  							else {
>  								if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are dealing with DATE/TIME/TIMESTAMP column types
> @@ -1669,14 +1695,14 @@
>  					rs1.close();
>  				}
>  			}
> +			conn.rollback();
>  			conn.setAutoCommit(true);
>  
>  			System.out.println("Positive Test22 - Test updateObject method");
>  			conn.setAutoCommit(false);
> -			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -			stmt1 = conn.createStatement();
>  			String displayString;
>  			for (int sqlType = 1; sqlType <= allSQLTypes.length; sqlType++ ) {
> +				conn.rollback();
>  				System.out.println("Next datatype to test is " + allSQLTypes[sqlType-1]);
>  				for (int updateXXXName = 1;  updateXXXName <= allUpdateXXXNames.length; updateXXXName++) {
>  					for (int indexOrName = 1; indexOrName <= 2; indexOrName++) {
> @@ -1684,9 +1710,9 @@
>  							displayString = "  updateObject with column position &";
>  						else
>  							displayString = "  updateObject with column name &";
> -						rs = stmt.executeQuery("SELECT * FROM AllDataTypesForTestingTable FOR UPDATE");
> +						rs = pstmt.executeQuery();
>  						rs.next();
> -						rs1 = stmt1.executeQuery("SELECT * FROM AllDataTypesNewValuesData");
> +						rs1 = pstmt1.executeQuery();
>  						rs1.next();
>  						try {
>  							if (updateXXXName == 1){ //updateObject using Short object
> @@ -1787,15 +1813,34 @@
>  									rs.updateObject(ColumnNames[sqlType-1], new Boolean(rs1.getBoolean(1)));
>  							} else if (updateXXXName == 19){ //update column with updateNull methods
>  								System.out.println(displayString + " null as parameters");
> +								try {
>  								if (indexOrName == 1) //test by passing column position
>  									rs.updateObject(sqlType, null);
>  								else //test by passing column name
>  									rs.updateObject(ColumnNames[sqlType-1], null);
> +								} catch (Throwable e) {
> +								if (TestUtil.isNetFramework()) {
> +									System.out.println("   Got expected exception:" + e.getMessage());
> +									continue;
> +								} else {
> +									System.out.println("   Got UNexpected exception:" + e.getMessage());
> +									return;
> +								}
> +								}
>  							} else if (updateXXXName == 20 || updateXXXName == 21) //since Derby does not support Array, Ref datatype, this is a no-op
>  									continue;
>  
>  								rs.updateRow();
> -								if (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")) {
> +								if (TestUtil.isNetFramework() && updateXXXName == 13 &&
> +									(sqlType==7 || sqlType==8 || sqlType==9 || sqlType==13)) 
> +								//updateObject with clob allowed on char, varchar, longvarchar & clob
> +									System.out.print("");
> +								else if (TestUtil.isNetFramework() && updateXXXName == 17 &&
> +									(sqlType==12 || sqlType==17)) 
> +								//updateObject with blob allowed on longvarchar for bit & blob
> +									System.out.print("");
> +								else if ((TestUtil.isNetFramework() && updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) ||
> +									(TestUtil.isEmbeddedFramework() && updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))) {
>  									System.out.println("FAILURE : We shouldn't reach here. The test should have failed earlier on updateXXX or updateRow call");
>  									return;
>  								}
> @@ -1805,7 +1850,8 @@
>  									return;
>  								}
>  						} catch (Throwable e) {
> -								if (updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR"))
> +							if ((TestUtil.isNetFramework() && updateXXXRulesTableForNetworkServer[sqlType-1][updateXXXName-1].equals("ERROR")) ||
> +								(TestUtil.isEmbeddedFramework() && updateXXXRulesTableForEmbedded[sqlType-1][updateXXXName-1].equals("ERROR")))
>  									System.out.println("    Got expected exception : " + e.getMessage());
>  								else {
>  									if ((sqlType == 14 || sqlType == 15 || sqlType == 16) && //we are dealing with DATE/TIME/TIMESTAMP column types
> @@ -1821,6 +1867,7 @@
>  					}
>  				}
>  			}
> +			conn.rollback();
>  			conn.setAutoCommit(true);
>  
>  			System.out.println("Positive Test23 - Test cancelRowUpdates after updateXXX methods on all the supported sql datatypes");
> @@ -1866,7 +1913,7 @@
>  			if(rs.getBigDecimal(4).compareTo(rs1.getBigDecimal(4)) != 0)
>  				return;
>  			rs.cancelRowUpdates();
> -			if(rs.getBigDecimal(4) != bd)
> +			if(rs.getBigDecimal(4).compareTo(bd) != 0)
>  				return;
>  
>  			System.out.println("  updateFloat and then cancelRowUpdates");
> @@ -1968,7 +2015,9 @@
>  			if(!rs.getTimestamp(16).toString().equals(timeStamp.toString()))
>  				return;
>  
> -			if (JVMInfo.JDK_ID != 2){ //Don't test this method when running JDK1.3 because jdk1.3 does not support the method
> +			//Don't test this when running JDK1.3/in Network Server because they both
> +			//do not support updateClob and updateBlob
> +			if (JVMInfo.JDK_ID != 2 && TestUtil.isEmbeddedFramework()){ 
>  				System.out.println("  updateClob and then cancelRowUpdates");
>  				String clb1 = rs.getString(13);
>  				rs.updateClob(13,rs1.getClob(13));
> @@ -2121,9 +2170,9 @@
>  			System.out.println("Positive Test30 - call updateXXX methods on only columns that correspond to a column in the table");
>  			dumpRS(stmt.executeQuery("select * from t1"));
>  			stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
> -			rs = stmt.executeQuery("SELECT 1, 2, c1, c2 FROM t1 FOR UPDATE");
> +			rs = stmt.executeQuery("SELECT c2, 1, 2, c1 FROM t1 FOR UPDATE");
>  			rs.next();
> -			rs.updateInt(3,22);
> +			rs.updateInt(4,22);
>  			rs.updateRow();
>  			rs.close();
>  			System.out.println("  Make sure that changes made it to the database correctly");
> @@ -2166,12 +2215,25 @@
>  			rs.next();
>  			try {
>  				rs.updateInt(2,22);
> -				System.out.println("FAIL!!! updateInt should have failed because c12 is not the FOR UPDATE columns list.");
> +				if (TestUtil.isEmbeddedFramework())
> +				System.out.println("PASS!!! Embedded throws exception for updateRow");
> +				else
> +				System.out.println("FAIL!!! Network Server should throw exception for updateXXX");
>  			}
>  			catch (SQLException e) {
>  				System.out.println("SQL State : " + e.getSQLState());
>  				System.out.println("Got expected exception " + e.getMessage());
>  			}
> +			try {
> +				rs.updateRow();
> +				System.out.println("updateRow passed");
> +			}
> +			catch (SQLException e) {
> +				if (TestUtil.isNetFramework())
> +				System.out.println("FAIL!!! updateRow w/o updateXXX is no-op in Network Server");
> +				else
> +				System.out.println("FAIL!!! exception is " + e.getMessage());
> +			}
>  			rs.close();
>  			System.out.println("  Make sure the contents of table are unchanged");
>  			dumpRS(stmt.executeQuery("select * from t1"));
> @@ -2201,7 +2263,6 @@
>  			dumpRS(stmt.executeQuery("select * from s2.t1"));
>  
>  			teardown();
> -			}
>  
>  			conn.close();
>  
> @@ -2214,11 +2275,11 @@
>  	}
>  
>  	static boolean verifyData(int sqlType, int updateXXXName, String checkAgainstTheTable) throws SQLException {
> -		Statement stmt1 = conn.createStatement();
> -		ResultSet rs1 = stmt1.executeQuery("select * from " + checkAgainstTheTable);
> +		PreparedStatement pstmt1 = conn.prepareStatement("select * from " + checkAgainstTheTable);
> +		ResultSet rs1 = pstmt1.executeQuery();
>  		rs1.next();
> -		Statement stmt = conn.createStatement();
> -		ResultSet rs = stmt.executeQuery("select * from AllDataTypesForTestingTable");
> +		PreparedStatement pstmt = conn.prepareStatement("select * from AllDataTypesForTestingTable");
> +		ResultSet rs = pstmt.executeQuery();
>  		rs.next();
>  
>  		if (updateXXXName == 18){ //verifying updateBoolean
> @@ -2235,13 +2296,13 @@
>  				return(false);
>  		}
>  
> -		if (sqlType == 1) //verify update made to SMALLINT column with updateXXX methods
> +		if (sqlType == 1) {//verify update made to SMALLINT column with updateXXX methods
>  			if(rs.getShort(sqlType) != rs1.getShort(updateXXXName)) {
>  				return(false); }
> -		else if (sqlType == 2)  //verify update made to INTEGER column with updateXXX methods
> +		} else if (sqlType == 2) {  //verify update made to INTEGER column with updateXXX methods
>  			if(rs.getInt(sqlType) != rs1.getInt(updateXXXName)) {
>  				return(false); }
> -		else if (sqlType ==  3)  //verify update made to BIGINT column with updateXXX methods
> +		} else if (sqlType ==  3)  //verify update made to BIGINT column with updateXXX methods
>  			if(rs.getLong(sqlType) != rs1.getLong(updateXXXName)) {
>  				return(false); }
>  		else if (sqlType == 4)  //verify update made to DECIMAL column with updateXXX methods
> @@ -2265,16 +2326,22 @@
>  		else if (sqlType == 14)  //verify update made to DATE column with updateXXX methods
>  			if(rs.getDate(sqlType) != rs1.getDate(updateXXXName)) {
>  				return(false); }
> -		else if (sqlType == 15)  //verify update made to TIME column with updateXXX methods
> +		else if (sqlType == 15) { //verify update made to TIME column with updateXXX methods
>  			if(rs.getTime(sqlType) != rs1.getTime(updateXXXName)) {
>  				return(false); }
> -		else if (sqlType == 16)  //verify update made to TIMESTAMP column with updateXXX methods
> -			if(rs.getTimestamp(sqlType) != rs1.getTimestamp(updateXXXName)) {
> +		} else if (sqlType == 16) { //verify update made to TIMESTAMP column with updateXXX methods
> +//			if(rs.getTimestamp(sqlType) != rs1.getTimestamp(updateXXXName)) {
> +			if(!rs.getTimestamp(sqlType).equals(rs1.getTimestamp(updateXXXName))) {
>  				return(false); }
> -		else if (sqlType == 17 && JVMInfo.JDK_ID != 2)  //verify update made to BLOB column with updateXXX methods
> +		} else if (sqlType == 17 && JVMInfo.JDK_ID != 2)  //verify update made to BLOB column with updateXXX methods
>  			if(rs.getBlob(sqlType).getBytes(1,4) != rs1.getBlob(updateXXXName).getBytes(1,4)) {
>  				return(false); }
>  
> +		rs.close();
> +		rs1.close();
> +		pstmt.close();
> +		pstmt1.close();
> +		Statement stmt = conn.createStatement();
>  		stmt.executeUpdate("delete from AllDataTypesForTestingTable");
>  		StringBuffer insertSQL = new StringBuffer("insert into AllDataTypesForTestingTable values(");
>  		for (int type = 0; type < allSQLTypes.length - 1; type++)
> Index: java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out
> ===================================================================
> --- java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out	(revision 170535)
> +++ java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/updatableResultSet.out	(working copy)
> @@ -13,6 +13,8 @@
>  SQL State : null
>  Got expected exception This method cannot be invoked while the cursor is on the insert row or if the concurrency of this ResultSet object is CONCUR_READ_ONLY.
>  Negative Test2 - request for scroll sensitive updatable resultset will give a read only scroll insensitive resultset
> +WARNING (no SQLState): Scroll sensitive result sets are not supported by server; remapping to forward-only cursor
> +WARNING (no SQLState): Insensitive updatable result sets are not supported by server; remapping to insensitive read-only cursor
>  requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE but that is not supported
>  Jira issue Derby-154 : When client connects to Network Server using JCC, it incorrectly shows support for scroll sensitive updatable resultsets
>  Make sure that we got TYPE_SCROLL_INSENSITIVE? true
> @@ -64,9 +66,9 @@
>  SQL State : XCL08
>  Got expected exception Cursor 'SQL_CURLH000C8' is not on a row.
>  Now attempt a updateRow without first doing next on the resultset.
> -In embedded mode, updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX
> -In Network Server mode, if no updateXXX were issued before updateRow, then updateRow is a no-op and doesn't check if it is on a row or not
> -PASS!!! In Network Server mode, this updateRow is a no-op because no updateXXX were issued before the updateRow
> +updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
>  ResultSet is positioned after the last row. attempt to deleteRow at this point should fail!
>  SQL State : null
>  Got expected exception Invalid operation: result set closed
> @@ -123,12 +125,3020 @@
>  JDBC 2.0 updatable resultset apis on this ResultSet object will pass because this is an updatable resultset
>  column 1 on this row before deleteRow is 1
>  column 2 on this row before deleteRow is aa                  
> -Since after deleteRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail
> -In Network Server mode, the ResultSet stays on the deleted row after deleteRow and hence no error for getXXX
> -column 1 on this deleted row is 0
> +Since after deleteRow(), in embedded mode and Network Server mode using Derby Net Client, ResultSet is positioned before the next row, getXXX will fail
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
>  calling deleteRow again w/o first positioning the ResultSet on the next row will fail
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  Position the ResultSet with next()
>  Should be able to deletRow() on the current row now
> +Positive Test1b - request updatable resultset for forward only type resultset
> +column 1 on this row before updateInt is 1
> +column 1 on this row after updateInt is 234
> +column 2 on this row before updateString is aa                  
> +now updateRow on the row
> +Since after updateRow(), in embedded mode and Network Server mode using Derby Net Client, ResultSet is positioned before the next row, getXXX will fail
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
> +calling updateRow again w/o first positioning the ResultSet on the next row will fail
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
> +Position the ResultSet with next()
> +Should be able to updateRow() on the current row now
> +Positive Test2 - even if no columns from table specified in the column list, we should be able to get updatable resultset
> +Will work in embedded mode because target table is not derived from the first column in the select list
> +Will not work in network server mode because it derives the target tabke from the first column in the select list
> +total number of rows in T1 
> +	 1
> +	 -
> +	{3}
> +column 1 on this row is 1
> +SQL State : 42X01
> +Got expected exception Syntax error: Encountered "WHERE" at line 1, column 14.
> +total number of rows in T1 after one deleteRow is 
> +	 1
> +	 -
> +	{3}
> +Positive Test3a - use prepared statement with concur updatable status to test deleteRow
> +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
> +got TYPE_FORWARD_ONLY? true
> +got CONCUR_UPDATABLE? true
> +column 1 on this row is 1
> +Since after deleteRow(), ResultSet is positioned before the next row, getXXX will fail
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
> +calling deleteRow again w/o first positioning the ResultSet on the next row will fail
> +SQL State : 24000
> +Got expected exception Invalid cursor state - no current row.
> +Position the ResultSet with next()
> +Should be able to deletRow() on the current row now
> +Positive Test3b - use prepared statement with concur updatable status to test updateXXX
> +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
> +got TYPE_FORWARD_ONLY? true
> +got CONCUR_UPDATABLE? true
> +column 1 on this row is 1
> +column 1 on this row after updateInt is 5
> +Since after updateRow(), ResultSet is positioned before the next row, getXXX will fail
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
> +calling updateRow/updateXXX again w/o first positioning the ResultSet on the next row will fail
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
> +SQL State : null
> +Got expected exception Invalid operation at current cursor position.
> +Position the ResultSet with next()
> +Should be able to cancelRowUpdates() on the current row now
> +Positive Test4 - use callable statement with concur updatable status
> +requested TYPE_FORWARD_ONLY, CONCUR_UPDATABLE
> +got TYPE_FORWARD_ONLY? true
> +got CONCUR_UPDATABLE? true
> +column 1 on this row is 1
> +Since after deleteRow(), ResultSet is positioned before the next row, getXXX will fail
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
> +calling deleteRow again w/o first positioning the ResultSet on the next row will fail
> +SQL State : 24000
> +Got expected exception Invalid cursor state - no current row.
> +Position the ResultSet with next()
> +Should be able to deletRow() on the current row now
> +Positive Test5 - donot have to select primary key to get an updatable resultset
> +column 1 on this row is 1
> +now try to delete row when primary key is not selected for that row
> +Positive Test6a - For Forward Only resultsets, DatabaseMetaData will return false for ownDeletesAreVisible and deletesAreDetected
> +This is because, after deleteRow, we position the ResultSet before the next row. We don't make a hole for the deleted row and then stay on that deleted hole
> +ownDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? false
> +othersDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? true
> +deletesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? false
> +The JDBC program should look at rowDeleted only if deletesAreDetected returns true
> +Since Derby returns false for detlesAreDetected for FORWARD_ONLY updatable resultset,the program should not rely on rs.rowDeleted() for FORWARD_ONLY updatable resultsets
> +Have this call to rs.rowDeleted() just to make sure the method does always return false? false
> +Have this call to rs.rowDeleted() just to make sure the method does always return false? false
> +Positive Test6b - For Forward Only resultsets, DatabaseMetaData will return false for ownUpdatesAreVisible and updatesAreDetected
> +This is because, after updateRow, we position the ResultSet before the next row
> +ownUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? false
> +othersUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)? true
> +updatesAreDetected(ResultSet.TYPE_FORWARD_ONLY)? false
> +The JDBC program should look at rowUpdated only if updatesAreDetected returns true
> +Since Derby returns false for updatesAreDetected for FORWARD_ONLY updatable resultset,the program should not rely on rs.rowUpdated() for FORWARD_ONLY updatable resultsets
> +Have this call to rs.rowUpdated() just to make sure the method does always return false? false
> +Have this call to rs.rowUpdated() just to make sure the method does always return false? false
> +Positive Test7a - delete using updatable resultset api from a temporary table
> +following rows in temp table before deleteRow
> +	 C21,C22
> +	 --- ---
> +	{21,1}
> +	{22,1}
> +As expected, no rows in temp table after deleteRow
> +	 C21,C22
> +	 --- ---
> +Positive Test7b - update using updatable resultset api from a temporary table
> +following rows in temp table before deleteRow
> +	 C31,C32
> +	 --- ---
> +	{21,1}
> +	{22,1}
> +As expected, updated rows in temp table after updateRow
> +	 C31,C32
> +	 --- ---
> +	{123,1}
> +	{123,1}
> +Positive Test8a - change the name of the statement when the resultset is open and see if deleteRow still works
> +This test works in embedded mode since Derby can handle the change in the name of the statement with an open resultset
> +But it fails under Network Server mode because JCC and Derby Net Client do not allow statement name change when there an open resultset against it
> +change the cursor name(case sensitive name) with setCursorName and then try to deleteRow
> +change the cursor name one more time with setCursorName and then try to deleteRow
> +SQL State : null
> +Got expected exception Invalid operation: setCursorName() called when there are open ResultSet's on the Statement.
> +Positive Test8b - change the name of the statement when the resultset is open and see if updateRow still works
> +This test works in embedded mode since Derby can handle the change in the name of the statement with an open resultset
> +But it fails under Network Server mode because JCC and Derby Net Client do not allow statement name change when there an open resultset against it
> +change the cursor name one more time with setCursorName and then try to updateRow
> +change the cursor name(case sensitive name) with setCursorName and then try to updateRow
> +SQL State : null
> +Got expected exception Invalid operation: setCursorName() called when there are open ResultSet's on the Statement.
> +Positive Test9a - using correlation name for the table in the select sql works in embedded mode and Network Server using Derby Net Client driver
> +Correlation name for table does not work in Network Server mode (using JCC) because the drivers construct the delete sql with the correlation name rather than the base table name
> +column 1 on this row is 1
> +now try to deleteRow
> +PASS!!! passed in embedded mode
> +Positive Test9b - using correlation name for updatable columns is not allowed.
> +Table t1 has following rows
> +	 C1,C2
> +	 -- --
> +	{1,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +attempt to get an updatable resultset using correlation name for an updatable column
> +The sql is SELECT c1 as col1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
> +SQL State : 42X42
> +Got expected exception Correlation name not allowed for column 'C1' because it is part of the FOR UPDATE list.
> +attempt to get an updatable resultset using correlation name for an readonly column. It should work
> +The sql is SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
> +Table t1 after updateRow has following rows
> +	 C1,C2
> +	 -- --
> +	{11,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test9c - try to updateXXX on a readonly column. Should get error
> +SQL State : null
> +Got expected exception Column not updatable
> +attempt to get an updatable resultset using correlation name for an readonly column. It should work
> +The sql is SELECT c1, c2 as col2 FROM t1 abcde FOR UPDATE of c1
> +Table t1 after updateRow has following rows
> +	 C1,C2
> +	 -- --
> +	{11,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test9d - try to updateXXX on a readonly column with correlation name. Should get error
> +SQL State : null
> +Got expected exception Column not updatable
> +Table t1 has following rows
> +	 C1,C2
> +	 -- --
> +	{1,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test10 - 2 updatable resultsets going against the same table, will they conflict?
> +delete using first resultset
> +attempt to send deleteRow on the same row through a different resultset should throw an exception
> +SQL State : XCL08
> +Got expected exception Cursor 'SQL_CURLH000C51' is not on a row.
> +Move to next row in the 2nd resultset and then delete using the second resultset
> +Positive Test11 - setting the fetch size to > 1 will be ignored by updatable resultset. Same as updatable cursors
> +Notice the Fetch Size in run time statistics output.
> +1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                      
> +-----
> +Statement Name: 
> +	SQL_CURLH000C54
> +Statement Text: 
> +	SELECT * FROM t1 FOR UPDATE of c1
> +Parse Time: 0
> +Bind Time: 0
> +Optimize Time: 0
> +Generate Time: 0
> +Compile Time: 0
> +Execute Time: 0
> +Begin Compilation Timestamp : null
> +End Compilation Timestamp : null
> +Begin Execution Timestamp : null
> +End Execution Timestamp : null
> +Statement Execution Plan Text: 
> +Table Scan ResultSet for T1 at read committed isolation level using exclusive row locking chosen by the optimizer
> +Number of opens = 1
> +Rows seen = 0
> +Rows filtered = 0
> +Fetch Size = 1
> +	constructor time (milliseconds) = 0
> +	open time (milliseconds) = 0
> +	next time (milliseconds) = 0
> +	close time (milliseconds) = 0
> +scan information: 
> +	Bit set of columns fetched=All
> +	Number of columns fetched=2
> +	Number of pages visited=0
> +	Number of rows qualified=0
> +	Number of rows visited=0
> +	Scan type=heap
> +	start position: 
> +null	stop position: 
> +null	qualifiers:
> +None
> +statement's fetch size is 200
> +Positive Test12a - make sure delete trigger gets fired when deleteRow is issued
> +Verify that before delete trigger got fired, row count is 0 in deleteTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{0}
> +column 1 on this row is 1
> +now try to delete row and make sure that trigger got fired
> +Verify that delete trigger got fired by verifying the row count to be 1 in deleteTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{1}
> +Positive Test12b - make sure update trigger gets fired when updateRow is issued
> +Verify that before update trigger got fired, row count is 0 in updateTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{0}
> +column 1 on this row is 1
> +now try to update row and make sure that trigger got fired
> +Verify that update trigger got fired by verifying the row count to be 1 in updateTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{1}
> +Positive Test13a - Another test case for delete trigger
> +column 1 on this row is 1
> +this delete row will fire the delete trigger which will delete all the rows from the table and from the resultset
> +SQL State : null
> +Got expected exception Invalid operation: result set closed
> +Verify that delete trigger got fired by verifying the row count to be 0 in table1WithTriggers
> +	 1
> +	 -
> +	{0}
> +Positive Test13b - Another test case for update trigger
> +Look at the current contents of table2WithTriggers
> +	 C1,C2
> +	 -- --
> +	{1,1}
> +	{2,2}
> +	{3,3}
> +	{4,4}
> +column 1 on this row is 2
> +this update row will fire the update trigger which will update all the rows in the table to have c1=1 and hence no more rows will qualify for the resultset
> +SQL State : null
> +Got expected exception Invalid operation: result set closed
> +Verify that update trigger got fired by verifying that all column c1s have value 1 in table2WithTriggers
> +	 C1,C2
> +	 -- --
> +	{1,1}
> +	{1,2}
> +	{1,3}
> +	{1,4}
> +Positive Test14a - make sure self referential delete cascade works when deleteRow is issued
> +	 C1,C2
> +	 -- --
> +	{e1,null}
> +	{e2,e1}
> +	{e3,e2}
> +	{e4,e3}
> +column 1 on this row is e1
> +this delete row will cause the delete cascade constraint to delete all the rows from the table and from the resultset
> +SQL State : null
> +Got expected exception Invalid operation: result set closed
> +Verify that delete trigger got fired by verifying the row count to be 0 in selfReferencingT1
> +	 1
> +	 -
> +	{0}
> +Positive Test14b - make sure self referential update restrict works when updateRow is issued
> +	 C1,C2
> +	 -- --
> +	{e1,null}
> +	{e2,e1}
> +	{e3,e2}
> +	{e4,e3}
> +column 1 on this row is e1
> +update row should fail because cascade constraint is update restrict
> +SQL State : 23503
> +Got expected exception UPDATE on table 'SELFREFERENCINGT2' caused a violation of foreign key constraint 'MANAGES2' for key (e1).  The statement has been rolled back.
> +Positive Test15 - With autocommit off, attempt to drop a table when there is an open updatable resultset on it
> +Opened an updatable resultset. Now trying to drop that table through another Statement
> +SQL State : X0X95
> +Got expected exception Operation 'DROP TABLE' cannot be performed on object 'T1' because there is an open ResultSet dependent on that object.
> +Since autocommit is off, the drop table exception will NOT result in a runtime rollback and hence updatable resultset object is still open
> +Positive Test16a - Do deleteRow within a transaction and then rollback the transaction
> +Verify that before delete trigger got fired, row count is 0 in deleteTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{0}
> +Verify that before deleteRow, row count is 4 in table0WithTriggers
> +	 1
> +	 -
> +	{4}
> +column 1 on this row is 1
> +now try to delete row and make sure that trigger got fired
> +Verify that delete trigger got fired by verifying the row count to be 1 in deleteTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{1}
> +Verify that deleteRow in transaction, row count is 3 in table0WithTriggers
> +	 1
> +	 -
> +	{3}
> +Verify that after rollback, row count is back to 0 in deleteTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{0}
> +Verify that after rollback, row count is back to 4 in table0WithTriggers
> +	 1
> +	 -
> +	{4}
> +Positive Test16b - Do updateRow within a transaction and then rollback the transaction
> +Verify that before update trigger got fired, row count is 0 in updateTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{0}
> +Look at the data in table0WithTriggers before trigger gets fired
> +	 C1,C2
> +	 -- --
> +	{1,1}
> +	{2,2}
> +	{3,3}
> +	{4,4}
> +column 1 on this row is 1
> +now try to update row and make sure that trigger got fired
> +Verify that update trigger got fired by verifying the row count to be 1 in updateTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{1}
> +Verify that new data in table0WithTriggers
> +	 C1,C2
> +	 -- --
> +	{123,1}
> +	{2,2}
> +	{3,3}
> +	{4,4}
> +Verify that after rollback, row count is back to 0 in updateTriggerInsertIntoThisTable
> +	 1
> +	 -
> +	{0}
> +Verify that after rollback, table0WithTriggers is back to its original contents
> +	 C1,C2
> +	 -- --
> +	{1,1}
> +	{2,2}
> +	{3,3}
> +	{4,4}
> +Positive Test17 - After deleteRow, resultset is positioned before the next row
> +getXXX right after deleteRow will fail because resultset is not positioned on a row, instead it is right before the next row
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
> +Positive Test18 - Test cancelRowUpdates method as the first updatable ResultSet api on a read-only resultset
> +SQL State : null
> +Got expected exception This method cannot be invoked while the cursor is on the insert row or if this ResultSet object has a concurrency of CONCUR_READ_ONLY.
> +Positive Test19 - Test updateRow method as the first updatable ResultSet api on a read-only resultset
> +  Got expected exception : This method cannot be invoked while the cursor is on the insert row or if the concurrency of this ResultSet object is CONCUR_READ_ONLY.
> +Positive Test20 - Test updateXXX methods as the first updatable ResultSet api on a read-only resultset
> +  Test updateShort on a readonly resultset
> +  Using column position as first parameter to updateShort
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateShort
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateInt on a readonly resultset
> +  Using column position as first parameter to updateInt
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateInt
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateLong on a readonly resultset
> +  Using column position as first parameter to updateLong
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateLong
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateBigDecimal on a readonly resultset
> +  Using column position as first parameter to updateBigDecimal
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateBigDecimal
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateFloat on a readonly resultset
> +  Using column position as first parameter to updateFloat
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateFloat
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateDouble on a readonly resultset
> +  Using column position as first parameter to updateDouble
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateDouble
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateString on a readonly resultset
> +  Using column position as first parameter to updateString
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateString
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateAsciiStream on a readonly resultset
> +  Using column position as first parameter to updateAsciiStream
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateAsciiStream
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateCharacterStream on a readonly resultset
> +  Using column position as first parameter to updateCharacterStream
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateCharacterStream
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateByte on a readonly resultset
> +  Using column position as first parameter to updateByte
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateByte
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateBytes on a readonly resultset
> +  Using column position as first parameter to updateBytes
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateBytes
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateBinaryStream on a readonly resultset
> +  Using column position as first parameter to updateBinaryStream
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateBinaryStream
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateClob on a readonly resultset
> +  Using column position as first parameter to updateClob
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Using column name as first parameter to updateClob
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Test updateDate on a readonly resultset
> +  Using column position as first parameter to updateDate
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateDate
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateTime on a readonly resultset
> +  Using column position as first parameter to updateTime
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateTime
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateTimestamp on a readonly resultset
> +  Using column position as first parameter to updateTimestamp
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateTimestamp
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateBlob on a readonly resultset
> +  Using column position as first parameter to updateBlob
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Using column name as first parameter to updateBlob
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Test updateBoolean on a readonly resultset
> +  Using column position as first parameter to updateBoolean
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateBoolean
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateNull on a readonly resultset
> +  Using column position as first parameter to updateNull
> +  Got expected exception : ResultSet is not updatable.
> +  Using column name as first parameter to updateNull
> +  Got expected exception : ResultSet is not updatable.
> +  Test updateArray on a readonly resultset
> +  Using column position as first parameter to updateArray
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Using column name as first parameter to updateArray
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Test updateRef on a readonly resultset
> +  Using column position as first parameter to updateRef
> +  Got expected exception : JDBC 3 method called - not yet supported
> +  Using column name as first parameter to updateRef
> +  Got expected exception : JDBC 3 method called - not yet supported
> +Positive Test21 - Test all updateXXX(excluding updateObject) methods on all the supported sql datatypes
> +Next datatype to test is SMALLINT
> +  Testing updateShort on SQL type SMALLINT
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type SMALLINT
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type SMALLINT
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type SMALLINT
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type SMALLINT
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type SMALLINT
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type SMALLINT
> +    Using column position as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +    Using column name as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  Testing updateAsciiStream on SQL type SMALLINT
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type SMALLINT
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type SMALLINT
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type SMALLINT
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type SMALLINT
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type SMALLINT
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type SMALLINT
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type SMALLINT
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type SMALLINT
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type SMALLINT
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type SMALLINT
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type SMALLINT
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type SMALLINT
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type SMALLINT
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is INTEGER
> +  Testing updateShort on SQL type INTEGER
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type INTEGER
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type INTEGER
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type INTEGER
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type INTEGER
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type INTEGER
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type INTEGER
> +    Using column position as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +    Using column name as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  Testing updateAsciiStream on SQL type INTEGER
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type INTEGER
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type INTEGER
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type INTEGER
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type INTEGER
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type INTEGER
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type INTEGER
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type INTEGER
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type INTEGER
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type INTEGER
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type INTEGER
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type INTEGER
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type INTEGER
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type INTEGER
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is BIGINT
> +  Testing updateShort on SQL type BIGINT
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type BIGINT
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type BIGINT
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type BIGINT
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type BIGINT
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type BIGINT
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type BIGINT
> +    Using column position as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +    Using column name as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  Testing updateAsciiStream on SQL type BIGINT
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type BIGINT
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type BIGINT
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type BIGINT
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type BIGINT
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type BIGINT
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type BIGINT
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type BIGINT
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type BIGINT
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type BIGINT
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type BIGINT
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type BIGINT
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type BIGINT
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type BIGINT
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is DECIMAL(10,5)
> +  Testing updateShort on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +    Using column name as first parameter to updateString
> +      Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  Testing updateAsciiStream on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type DECIMAL(10,5)
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is REAL
> +  Testing updateShort on SQL type REAL
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type REAL
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type REAL
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type REAL
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type REAL
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type REAL
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type REAL
> +    Using column position as first parameter to updateString
> +    Using column name as first parameter to updateString
> +  Testing updateAsciiStream on SQL type REAL
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type REAL
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type REAL
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type REAL
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type REAL
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type REAL
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type REAL
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type REAL
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type REAL
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type REAL
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type REAL
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type REAL
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type REAL
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type REAL
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is DOUBLE
> +  Testing updateShort on SQL type DOUBLE
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type DOUBLE
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type DOUBLE
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type DOUBLE
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type DOUBLE
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type DOUBLE
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type DOUBLE
> +    Using column position as first parameter to updateString
> +    Using column name as first parameter to updateString
> +  Testing updateAsciiStream on SQL type DOUBLE
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type DOUBLE
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type DOUBLE
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type DOUBLE
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type DOUBLE
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type DOUBLE
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type DOUBLE
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type DOUBLE
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type DOUBLE
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type DOUBLE
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type DOUBLE
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type DOUBLE
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type DOUBLE
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type DOUBLE
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is CHAR(60)
> +  Testing updateShort on SQL type CHAR(60)
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type CHAR(60)
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type CHAR(60)
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type CHAR(60)
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type CHAR(60)
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type CHAR(60)
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type CHAR(60)
> +    Using column position as first parameter to updateString
> +    Using column name as first parameter to updateString
> +  Testing updateAsciiStream on SQL type CHAR(60)
> +    Using column position as first parameter to updateAsciiStream
> +    Using column name as first parameter to updateAsciiStream
> +  Testing updateCharacterStream on SQL type CHAR(60)
> +    Using column position as first parameter to updateCharacterStream
> +    Using column name as first parameter to updateCharacterStream
> +  Testing updateByte on SQL type CHAR(60)
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type CHAR(60)
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type CHAR(60)
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type CHAR(60)
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type CHAR(60)
> +    Using column position as first parameter to updateDate
> +    Using column name as first parameter to updateDate
> +  Testing updateTime on SQL type CHAR(60)
> +    Using column position as first parameter to updateTime
> +    Using column name as first parameter to updateTime
> +  Testing updateTimestamp on SQL type CHAR(60)
> +    Using column position as first parameter to updateTimestamp
> +    Using column name as first parameter to updateTimestamp
> +  Testing updateBlob on SQL type CHAR(60)
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type CHAR(60)
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type CHAR(60)
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type CHAR(60)
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type CHAR(60)
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is VARCHAR(60)
> +  Testing updateShort on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateString
> +    Using column name as first parameter to updateString
> +  Testing updateAsciiStream on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateAsciiStream
> +    Using column name as first parameter to updateAsciiStream
> +  Testing updateCharacterStream on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateCharacterStream
> +    Using column name as first parameter to updateCharacterStream
> +  Testing updateByte on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateDate
> +    Using column name as first parameter to updateDate
> +  Testing updateTime on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateTime
> +    Using column name as first parameter to updateTime
> +  Testing updateTimestamp on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateTimestamp
> +    Using column name as first parameter to updateTimestamp
> +  Testing updateBlob on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type VARCHAR(60)
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is LONG VARCHAR
> +  Testing updateShort on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateShort
> +    Using column name as first parameter to updateShort
> +  Testing updateInt on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateInt
> +    Using column name as first parameter to updateInt
> +  Testing updateLong on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateLong
> +    Using column name as first parameter to updateLong
> +  Testing updateBigDecimal on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateBigDecimal
> +    Using column name as first parameter to updateBigDecimal
> +  Testing updateFloat on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateFloat
> +    Using column name as first parameter to updateFloat
> +  Testing updateDouble on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateDouble
> +    Using column name as first parameter to updateDouble
> +  Testing updateString on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateString
> +    Using column name as first parameter to updateString
> +  Testing updateAsciiStream on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateAsciiStream
> +    Using column name as first parameter to updateAsciiStream
> +  Testing updateCharacterStream on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateCharacterStream
> +    Using column name as first parameter to updateCharacterStream
> +  Testing updateByte on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateByte
> +    Using column name as first parameter to updateByte
> +  Testing updateBytes on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateDate
> +    Using column name as first parameter to updateDate
> +  Testing updateTime on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateTime
> +    Using column name as first parameter to updateTime
> +  Testing updateTimestamp on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateTimestamp
> +    Using column name as first parameter to updateTimestamp
> +  Testing updateBlob on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateBoolean
> +    Using column name as first parameter to updateBoolean
> +  Testing updateNull on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type LONG VARCHAR
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is CHAR(2) FOR BIT DATA
> +  Testing updateShort on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +  Testing updateAsciiStream on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBytes
> +    Using column name as first parameter to updateBytes
> +  Testing updateBinaryStream on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBinaryStream
> +    Using column name as first parameter to updateBinaryStream
> +  Testing updateClob on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type CHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is VARCHAR(2) FOR BIT DATA
> +  Testing updateShort on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +  Testing updateAsciiStream on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBytes
> +    Using column name as first parameter to updateBytes
> +  Testing updateBinaryStream on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBinaryStream
> +    Using column name as first parameter to updateBinaryStream
> +  Testing updateClob on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type VARCHAR(2) FOR BIT DATA
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is LONG VARCHAR FOR BIT DATA
> +  Testing updateShort on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +  Testing updateAsciiStream on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateBytes
> +    Using column name as first parameter to updateBytes
> +  Testing updateBinaryStream on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateBinaryStream
> +    Using column name as first parameter to updateBinaryStream
> +  Testing updateClob on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type LONG VARCHAR FOR BIT DATA
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is CLOB(1k)
> +  Testing updateShort on SQL type CLOB(1k)
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type CLOB(1k)
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type CLOB(1k)
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type CLOB(1k)
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type CLOB(1k)
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type CLOB(1k)
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type CLOB(1k)
> +    Using column position as first parameter to updateString
> +    Using column name as first parameter to updateString
> +  Testing updateAsciiStream on SQL type CLOB(1k)
> +    Using column position as first parameter to updateAsciiStream
> +    Using column name as first parameter to updateAsciiStream
> +  Testing updateCharacterStream on SQL type CLOB(1k)
> +    Using column position as first parameter to updateCharacterStream
> +    Using column name as first parameter to updateCharacterStream
> +  Testing updateByte on SQL type CLOB(1k)
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type CLOB(1k)
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type CLOB(1k)
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type CLOB(1k)
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type CLOB(1k)
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type CLOB(1k)
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type CLOB(1k)
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type CLOB(1k)
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type CLOB(1k)
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type CLOB(1k)
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type CLOB(1k)
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type CLOB(1k)
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is DATE
> +  Testing updateShort on SQL type DATE
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type DATE
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type DATE
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type DATE
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type DATE
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type DATE
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type DATE
> +    Using column position as first parameter to updateString
> +      Got expected exception : null
> +    Using column name as first parameter to updateString
> +      Got expected exception : null
> +  Testing updateAsciiStream on SQL type DATE
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type DATE
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type DATE
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type DATE
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type DATE
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type DATE
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type DATE
> +    Using column position as first parameter to updateDate
> +    Using column name as first parameter to updateDate
> +  Testing updateTime on SQL type DATE
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type DATE
> +    Using column position as first parameter to updateTimestamp
> +    Using column name as first parameter to updateTimestamp
> +  Testing updateBlob on SQL type DATE
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type DATE
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type DATE
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type DATE
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type DATE
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is TIME
> +  Testing updateShort on SQL type TIME
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type TIME
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type TIME
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type TIME
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type TIME
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type TIME
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type TIME
> +    Using column position as first parameter to updateString
> +      Got expected exception : null
> +    Using column name as first parameter to updateString
> +      Got expected exception : null
> +  Testing updateAsciiStream on SQL type TIME
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type TIME
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type TIME
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type TIME
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type TIME
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type TIME
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type TIME
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type TIME
> +    Using column position as first parameter to updateTime
> +    Using column name as first parameter to updateTime
> +  Testing updateTimestamp on SQL type TIME
> +    Using column position as first parameter to updateTimestamp
> +    Using column name as first parameter to updateTimestamp
> +  Testing updateBlob on SQL type TIME
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type TIME
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type TIME
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type TIME
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type TIME
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is TIMESTAMP
> +  Testing updateShort on SQL type TIMESTAMP
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type TIMESTAMP
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type TIMESTAMP
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type TIMESTAMP
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type TIMESTAMP
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type TIMESTAMP
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type TIMESTAMP
> +    Using column position as first parameter to updateString
> +      Got expected exception : Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff
> +    Using column name as first parameter to updateString
> +      Got expected exception : Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff
> +  Testing updateAsciiStream on SQL type TIMESTAMP
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type TIMESTAMP
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type TIMESTAMP
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type TIMESTAMP
> +    Using column position as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBytes
> +      Got expected exception : Illegal Conversion
> +  Testing updateBinaryStream on SQL type TIMESTAMP
> +    Using column position as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBinaryStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateClob on SQL type TIMESTAMP
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type TIMESTAMP
> +    Using column position as first parameter to updateDate
> +    Using column name as first parameter to updateDate
> +  Testing updateTime on SQL type TIMESTAMP
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type TIMESTAMP
> +    Using column position as first parameter to updateTimestamp
> +    Using column name as first parameter to updateTimestamp
> +  Testing updateBlob on SQL type TIMESTAMP
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type TIMESTAMP
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type TIMESTAMP
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type TIMESTAMP
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type TIMESTAMP
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Next datatype to test is BLOB(1k)
> +  Testing updateShort on SQL type BLOB(1k)
> +    Using column position as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateShort
> +      Got expected exception : Illegal Conversion
> +  Testing updateInt on SQL type BLOB(1k)
> +    Using column position as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateInt
> +      Got expected exception : Illegal Conversion
> +  Testing updateLong on SQL type BLOB(1k)
> +    Using column position as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateLong
> +      Got expected exception : Illegal Conversion
> +  Testing updateBigDecimal on SQL type BLOB(1k)
> +    Using column position as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBigDecimal
> +      Got expected exception : Illegal Conversion
> +  Testing updateFloat on SQL type BLOB(1k)
> +    Using column position as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateFloat
> +      Got expected exception : Illegal Conversion
> +  Testing updateDouble on SQL type BLOB(1k)
> +    Using column position as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDouble
> +      Got expected exception : Illegal Conversion
> +  Testing updateString on SQL type BLOB(1k)
> +    Using column position as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateString
> +      Got expected exception : Illegal Conversion
> +  Testing updateAsciiStream on SQL type BLOB(1k)
> +    Using column position as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateAsciiStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateCharacterStream on SQL type BLOB(1k)
> +    Using column position as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateCharacterStream
> +      Got expected exception : Illegal Conversion
> +  Testing updateByte on SQL type BLOB(1k)
> +    Using column position as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateByte
> +      Got expected exception : Illegal Conversion
> +  Testing updateBytes on SQL type BLOB(1k)
> +    Using column position as first parameter to updateBytes
> +    Using column name as first parameter to updateBytes
> +  Testing updateBinaryStream on SQL type BLOB(1k)
> +    Using column position as first parameter to updateBinaryStream
> +    Using column name as first parameter to updateBinaryStream
> +  Testing updateClob on SQL type BLOB(1k)
> +    Using column position as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateClob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateDate on SQL type BLOB(1k)
> +    Using column position as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateDate
> +      Got expected exception : Illegal Conversion
> +  Testing updateTime on SQL type BLOB(1k)
> +    Using column position as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTime
> +      Got expected exception : Illegal Conversion
> +  Testing updateTimestamp on SQL type BLOB(1k)
> +    Using column position as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateTimestamp
> +      Got expected exception : Illegal Conversion
> +  Testing updateBlob on SQL type BLOB(1k)
> +    Using column position as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateBlob
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateBoolean on SQL type BLOB(1k)
> +    Using column position as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +    Using column name as first parameter to updateBoolean
> +      Got expected exception : Illegal Conversion
> +  Testing updateNull on SQL type BLOB(1k)
> +    Using column position as first parameter to updateNull
> +    Using column name as first parameter to updateNull
> +  Testing updateArray on SQL type BLOB(1k)
> +    Using column position as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateArray
> +      Got expected exception : JDBC 3 method called - not yet supported
> +  Testing updateRef on SQL type BLOB(1k)
> +    Using column position as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +    Using column name as first parameter to updateRef
> +      Got expected exception : JDBC 3 method called - not yet supported
> +Positive Test22 - Test updateObject method
> +Next datatype to test is SMALLINT
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is INTEGER
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is BIGINT
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is DECIMAL(10,5)
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Invalid data conversion: Parameter instance 1992                                                         is invalid for requested conversion.
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is REAL
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +  updateObject with column name & String object as parameters
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is DOUBLE
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +  updateObject with column name & String object as parameters
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is CHAR(60)
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +  updateObject with column name & String object as parameters
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +  updateObject with column name & Clob object as parameters
> +  updateObject with column position & Date object as parameters
> +  updateObject with column name & Date object as parameters
> +  updateObject with column position & Time object as parameters
> +  updateObject with column name & Time object as parameters
> +  updateObject with column position & TimeStamp object as parameters
> +  updateObject with column name & TimeStamp object as parameters
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is VARCHAR(60)
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +  updateObject with column name & String object as parameters
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +  updateObject with column name & Clob object as parameters
> +  updateObject with column position & Date object as parameters
> +  updateObject with column name & Date object as parameters
> +  updateObject with column position & Time object as parameters
> +  updateObject with column name & Time object as parameters
> +  updateObject with column position & TimeStamp object as parameters
> +  updateObject with column name & TimeStamp object as parameters
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is LONG VARCHAR
> +  updateObject with column position & Short object as parameters
> +  updateObject with column name & Short object as parameters
> +  updateObject with column position & Integer object as parameters
> +  updateObject with column name & Integer object as parameters
> +  updateObject with column position & Long object as parameters
> +  updateObject with column name & Long object as parameters
> +  updateObject with column position & BigDecimal object as parameters
> +  updateObject with column name & BigDecimal object as parameters
> +  updateObject with column position & Float object as parameters
> +  updateObject with column name & Float object as parameters
> +  updateObject with column position & Double object as parameters
> +  updateObject with column name & Double object as parameters
> +  updateObject with column position & String object as parameters
> +  updateObject with column name & String object as parameters
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +  updateObject with column name & Clob object as parameters
> +  updateObject with column position & Date object as parameters
> +  updateObject with column name & Date object as parameters
> +  updateObject with column position & Time object as parameters
> +  updateObject with column name & Time object as parameters
> +  updateObject with column position & TimeStamp object as parameters
> +  updateObject with column name & TimeStamp object as parameters
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +  updateObject with column name & Boolean object as parameters
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is CHAR(2) FOR BIT DATA
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & bytes[] array as parameters
> +  updateObject with column name & bytes[] array as parameters
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : A truncation error was encountered trying to shrink CHAR () FOR BIT DATA 'XX-RESOLVE-XX' to length 2.
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : A truncation error was encountered trying to shrink CHAR () FOR BIT DATA 'XX-RESOLVE-XX' to length 2.
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is VARCHAR(2) FOR BIT DATA
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & bytes[] array as parameters
> +  updateObject with column name & bytes[] array as parameters
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : A truncation error was encountered trying to shrink VARCHAR () FOR BIT DATA 'XX-RESOLVE-XX' to length 2.
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : A truncation error was encountered trying to shrink VARCHAR () FOR BIT DATA 'XX-RESOLVE-XX' to length 2.
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is LONG VARCHAR FOR BIT DATA
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & bytes[] array as parameters
> +  updateObject with column name & bytes[] array as parameters
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +  updateObject with column name & Blob object as parameters
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is CLOB(1k)
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +  updateObject with column name & String object as parameters
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +  updateObject with column name & Clob object as parameters
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is DATE
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : null
> +  updateObject with column name & String object as parameters
> +    Got expected exception : null
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +  updateObject with column name & Date object as parameters
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +  updateObject with column name & TimeStamp object as parameters
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is TIME
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : null
> +  updateObject with column name & String object as parameters
> +    Got expected exception : null
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +  updateObject with column name & Time object as parameters
> +  updateObject with column position & TimeStamp object as parameters
> +  updateObject with column name & TimeStamp object as parameters
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is TIMESTAMP
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff
> +  updateObject with column position & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & bytes[] array as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +  updateObject with column name & Date object as parameters
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +  updateObject with column name & TimeStamp object as parameters
> +  updateObject with column position & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Blob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Next datatype to test is BLOB(1k)
> +  updateObject with column position & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Short object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Integer object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Long object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & BigDecimal object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Float object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Double object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & String object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & bytes[] array as parameters
> +  updateObject with column name & bytes[] array as parameters
> +  updateObject with column position & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Clob object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Date object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Time object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & TimeStamp object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & Blob object as parameters
> +  updateObject with column name & Blob object as parameters
> +  updateObject with column position & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column name & Boolean object as parameters
> +    Got expected exception : Illegal Conversion
> +  updateObject with column position & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +  updateObject with column name & null as parameters
> +   Got expected exception:Invalid data conversion: Parameter instance null is invalid for requested conversion.
> +Positive Test23 - Test cancelRowUpdates after updateXXX methods on all the supported sql datatypes
> +  updateShort and then cancelRowUpdates
> +  updateInt and then cancelRowUpdates
> +  updateLong and then cancelRowUpdates
> +  updateBigDecimal and then cancelRowUpdates
> +  updateFloat and then cancelRowUpdates
> +  updateDouble and then cancelRowUpdates
> +  updateString and then cancelRowUpdates
> +  updateAsciiStream and then cancelRowUpdates
> +  updateCharacterStream and then cancelRowUpdates
> +  updateByte and then cancelRowUpdates
> +  updateBytes and then cancelRowUpdates
> +  updateBinaryStream and then cancelRowUpdates
> +  updateDate and then cancelRowUpdates
> +  updateTime and then cancelRowUpdates
> +  updateTimestamp and then cancelRowUpdates
> +Positive Test24a - after updateXXX, try cancelRowUpdates and then deleteRow
> +column 1 on this row before updateInt is 1
> +column 1 on this row after updateInt is 234
> +now cancelRowUpdates on the row
> +Since after cancelRowUpdates(), ResultSet is positioned on the same row, getXXX will pass
> +column 1 on this row after cancelRowUpdates is 1
> +Since after cancelRowUpdates(), ResultSet is positioned on the same row, a deleteRow at this point will pass
> +PASS : deleteRow passed as expected
> +calling updateRow after deleteRow w/o first positioning the ResultSet on the next row will fail
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
> +Position the ResultSet with next()
> +Should be able to updateRow() on the current row now
> +Positive Test25 - issue cancelRowUpdates without any updateXXX
> +Positive Test26 - issue updateRow without any updateXXX will not move the resultset position
> +Positive Test27 - issue updateXXX and then deleteRow
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
> +SQL State : null
> +Got expected exception Invalid operation to update at current cursor position
> +SQL State : null
> +Got expected exception Invalid operation to read at current cursor position.
> +Positive Test28 - issue updateXXXs and then move off the row, the changes should be ignored
> +	 C1,C2
> +	 -- --
> +	{1,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +  column 1 on this row before updateInt is 1
> +  Issue updateInt to change the column's value to 2345
> +  Move to next row w/o issuing updateRow
> +  Make sure that changes didn't make it to the database
> +	 C1,C2
> +	 -- --
> +	{1,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test29 - issue multiple updateXXXs and then a updateRow
> +	 C1,C2
> +	 -- --
> +	{1,aa                  }
> +	{2,bb                  }
> +	{3,cc                  }
> +  column 1 on this row before updateInt is 1
> +  Issue updateInt to change the column's value to 2345
> +  Issue another updateInt on the same row and column to change the column's value to 9999
> +  Issue updateString to change the column's value to 'xxxxxxx'
> +  Now issue updateRow
> +  Make sure that changes made it to the database correctly
> +	 C1,C2
> +	 -- --
> +	{9999,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test30 - call updateXXX methods on only columns that correspond to a column in the table
> +	 C1,C2
> +	 -- --
> +	{9999,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +  Make sure that changes made it to the database correctly
> +	 C1,C2
> +	 -- --
> +	{22,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test31a - case sensitive table and column names
> +  Make sure that changes made it to the database correctly
> +	 c11,C12
> +	 --- ---
> +	{11,22}
> +Positive Test31b - table and column names with spaces in middle and end
> +  Make sure for table " t 11 " that changes made it to the database correctly
> +	  c 111 ,C112
> +	 ------- ----
> +	{11,22}
> +Positive Test32 - call updateXXX methods on column that is not in for update columns list
> +	 C1,C2
> +	 -- --
> +	{22,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +SQL State : null
> +Got expected exception Column not updatable
> +updateRow passed
> +  Make sure the contents of table are unchanged
> +	 C1,C2
> +	 -- --
> +	{22,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +Positive Test33 - try to update a table from another schema
> +  contents of table t1 from current schema
> +	 C1,C2
> +	 -- --
> +	{22,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +  contents of table t1 from schema s2
> +	 C1S2T1,C2S2T1,C3S2T2
> +	 ------ ------ ------
> +	{1,2,2.2}
> +	{1,3,3.3}
> +  Try to change contents of 2nd column of s2.t1 using updateRow
> +  Make sure that changes made to the right table t1
> +  contents of table t1 from current schema should have remained unchanged
> +	 C1,C2
> +	 -- --
> +	{22,xxxxxxx             }
> +	{2,bb                  }
> +	{3,cc                  }
> +  contents of table t1 from schema s2 should have changed
> +	 C1S2T1,C2S2T1,C3S2T2
> +	 ------ ------ ------
> +	{1,1,2.2}
> +	{1,1,3.3}
>  Finished testing updateable resultsets
> Index: java/testing/org/apache/derbyTesting/functionTests/master/updatableResultSet.out
> ===================================================================
> --- java/testing/org/apache/derbyTesting/functionTests/master/updatableResultSet.out	(revision 170535)
> +++ java/testing/org/apache/derbyTesting/functionTests/master/updatableResultSet.out	(working copy)
> @@ -13,6 +13,8 @@
>  SQL State : XJ083
>  Got expected exception 'updateRow' not allowed because the ResultSet is not an updatable ResultSet. 
>  Negative Test2 - request for scroll sensitive updatable resultset will give a read only scroll insensitive resultset
> +WARNING 01J02: Scroll sensitive cursors are not currently implemented.
> +WARNING 01J03: Scroll sensitive and scroll insensitive updatable ResultSets are not currently implemented.
>  requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE but that is not supported
>  Jira issue Derby-154 : When client connects to Network Server using JCC, it incorrectly shows support for scroll sensitive updatable resultsets
>  Make sure that we got TYPE_SCROLL_INSENSITIVE? true
> @@ -42,7 +44,7 @@
>  Make sure that we got CONCUR_READ_ONLY? true
>  Jira issue Derby-159 : Warnings raised by Derby are not getting passed to the Client in Network Server Mode
>  Will see the warnings in embedded mode only
> -Expected warnings on resultset = java.sql.SQLWarning: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
> +WARNING 01J06: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
>  Now attempting to send a delete on a sql with no FOR UPDATE clause.
>  SQL State : XJ083
>  Got expected exception 'deleteRow' not allowed because the ResultSet is not an updatable ResultSet. 
> @@ -53,7 +55,7 @@
>  Make sure that we got CONCUR_READ_ONLY? true
>  Jira issue Derby-159 : Warnings raised by Derby are not getting passed to the Client in Network Server Mode
>  Will see the warnings in embedded mode only
> -Expected warnings on resultset = java.sql.SQLWarning: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
> +WARNING 01J06: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
>  Now attempting to send a delete on a sql with FOR READ ONLY clause.
>  SQL State : XJ083
>  Got expected exception 'deleteRow' not allowed because the ResultSet is not an updatable ResultSet. 
> @@ -66,8 +68,7 @@
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  Now attempt a updateRow without first doing next on the resultset.
> -In embedded mode, updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX
> -In Network Server mode, if no updateXXX were issued before updateRow, then updateRow is a no-op and doesn't check if it is on a row or not
> +updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  ResultSet is positioned after the last row. attempt to deleteRow at this point should fail!
> @@ -126,8 +127,7 @@
>  JDBC 2.0 updatable resultset apis on this ResultSet object will pass because this is an updatable resultset
>  column 1 on this row before deleteRow is 1
>  column 2 on this row before deleteRow is aa                  
> -Since after deleteRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail
> -In Network Server mode, the ResultSet stays on the deleted row after deleteRow and hence no error for getXXX
> +Since after deleteRow(), in embedded mode and Network Server mode using Derby Net Client, ResultSet is positioned before the next row, getXXX will fail
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  calling deleteRow again w/o first positioning the ResultSet on the next row will fail
> @@ -140,8 +140,7 @@
>  column 1 on this row after updateInt is 234
>  column 2 on this row before updateString is aa                  
>  now updateRow on the row
> -Since after updateRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail
> -In Network Server mode, the ResultSet stays on the updated row after updateRow and hence no error for getXXX
> +Since after updateRow(), in embedded mode and Network Server mode using Derby Net Client, ResultSet is positioned before the next row, getXXX will fail
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  calling updateRow again w/o first positioning the ResultSet on the next row will fail
> @@ -150,11 +149,14 @@
>  Position the ResultSet with next()
>  Should be able to updateRow() on the current row now
>  Positive Test2 - even if no columns from table specified in the column list, we should be able to get updatable resultset
> +Will work in embedded mode because target table is not derived from the first column in the select list
> +Will not work in network server mode because it derives the target tabke from the first column in the select list
>  total number of rows in T1 
>  	 1
>  	 -
>  	{3}
>  column 1 on this row is 1
> +PASS!!! passed in embedded mode
>  total number of rows in T1 after one deleteRow is 
>  	 1
>  	 -
> @@ -244,16 +246,24 @@
>  	 --- ---
>  	{123,1}
>  	{123,1}
> -Positive Test8a - change the name of the resultset and see if deleteRow still works
> +Positive Test8a - change the name of the statement when the resultset is open and see if deleteRow still works
> +This test works in embedded mode since Derby can handle the change in the name of the statement with an open resultset
> +But it fails under Network Server mode because JCC and Derby Net Client do not allow statement name change when there an open resultset against it
>  change the cursor name(case sensitive name) with setCursorName and then try to deleteRow
>  change the cursor name one more time with setCursorName and then try to deleteRow
> -Positive Test8b - change the name of the resultset and see if updateRow still works
> +PASS!!! passed in embedded mode
> +Positive Test8b - change the name of the statement when the resultset is open and see if updateRow still works
> +This test works in embedded mode since Derby can handle the change in the name of the statement with an open resultset
> +But it fails under Network Server mode because JCC and Derby Net Client do not allow statement name change when there an open resultset against it
>  change the cursor name one more time with setCursorName and then try to updateRow
>  change the cursor name(case sensitive name) with setCursorName and then try to updateRow
> -Positive Test9a - using correlation name for the table in the select sql is not a problem
> +PASS!!! passed in embedded mode
> +Positive Test9a - using correlation name for the table in the select sql works in embedded mode and Network Server using Derby Net Client driver
> +Correlation name for table does not work in Network Server mode (using JCC) because the drivers construct the delete sql with the correlation name rather than the base table name
>  column 1 on this row is 1
>  now try to deleteRow
> -Positive Test9b - using correlation name for updatable column name is not allowed
> +PASS!!! passed in embedded mode
> +Positive Test9b - using correlation name for updatable columns is not allowed.
>  Table t1 has following rows
>  	 C1,C2
>  	 -- --
> @@ -283,18 +293,9 @@
>  	{11,aa                  }
>  	{2,bb                  }
>  	{3,cc                  }
> -Positive Test9c - try to updateXXX on a readonly column. Should get error
> -SQL State : 42X31
> -Got expected exception Column 'C2' is not in FOR UPDATE list of cursor 'SQLCUR17'.
> -Table t1 has following rows
> -	 C1,C2
> -	 -- --
> -	{1,aa                  }
> -	{2,bb                  }
> -	{3,cc                  }
>  Positive Test9d - try to updateXXX on a readonly column with correlation name. Should get error
>  SQL State : 42X31
> -Got expected exception Column 'COL2' is not in FOR UPDATE list of cursor 'SQLCUR18'.
> +Got expected exception Column 'COL2' is not in FOR UPDATE list of cursor 'SQLCUR17'.
>  Table t1 has following rows
>  	 C1,C2
>  	 -- --
> @@ -305,7 +306,7 @@
>  delete using first resultset
>  attempt to send deleteRow on the same row through a different resultset should throw an exception
>  SQL State : XCL08
> -Got expected exception Cursor 'SQLCUR20' is not on a row.
> +Got expected exception Cursor 'SQLCUR19' is not on a row.
>  Move to next row in the 2nd resultset and then delete using the second resultset
>  Positive Test11 - setting the fetch size to > 1 will be ignored by updatable resultset. Same as updatable cursors
>  Notice the Fetch Size in run time statistics output.
> @@ -314,7 +315,7 @@
>  Statement Name: 
>  	null
>  Statement Text: 
> -	SELECT 1, 2 FROM t1 FOR UPDATE of c1
> +	SELECT * FROM t1 FOR UPDATE of c1
>  Parse Time: 0
>  Bind Time: 0
>  Optimize Time: 0
> @@ -326,51 +327,25 @@
>  Begin Execution Timestamp : null
>  End Execution Timestamp : null
>  Statement Execution Plan Text: 
> -Project-Restrict ResultSet (3):
> +Table Scan ResultSet for T1 at read committed isolation level using exclusive row locking chosen by the optimizer
>  Number of opens = 1
>  Rows seen = 0
>  Rows filtered = 0
> -restriction = false
> -projection = true
> +Fetch Size = 1
>  	constructor time (milliseconds) = 0
>  	open time (milliseconds) = 0
>  	next time (milliseconds) = 0
>  	close time (milliseconds) = 0
> -	restriction time (milliseconds) = 0
> -	projection time (milliseconds) = 0
> -Source result set:
> -	Project-Restrict ResultSet (2):
> -	Number of opens = 1
> -	Rows seen = 0
> -	Rows filtered = 0
> -	restriction = false
> -	projection = true
> -		constructor time (milliseconds) = 0
> -		open time (milliseconds) = 0
> -		next time (milliseconds) = 0
> -		close time (milliseconds) = 0
> -		restriction time (milliseconds) = 0
> -		projection time (milliseconds) = 0
> -	Source result set:
> -		Table Scan ResultSet for T1 at read committed isolation level using exclusive row locking chosen by the optimizer
> -		Number of opens = 1
> -		Rows seen = 0
> -		Rows filtered = 0
> -		Fetch Size = 1
> -			constructor time (milliseconds) = 0
> -			open time (milliseconds) = 0
> -			next time (milliseconds) = 0
> -			close time (milliseconds) = 0
> -		scan information: 
> -			Bit set of columns fetched=All
> -			Number of columns fetched=2
> -			Number of pages visited=0
> -			Number of rows qualified=0
> -			Number of rows visited=0
> -			Scan type=heap
> -			start position: 
> -null			stop position: 
> -null			qualifiers:
> +scan information: 
> +	Bit set of columns fetched=All
> +	Number of columns fetched=2
> +	Number of pages visited=0
> +	Number of rows qualified=0
> +	Number of rows visited=0
> +	Scan type=heap
> +	start position: 
> +null	stop position: 
> +null	qualifiers:
>  None
>  statement's fetch size is 200
>  Positive Test12a - make sure delete trigger gets fired when deleteRow is issued
> @@ -589,9 +564,7 @@
>    Got expected exception : 'updateBinaryStream' not allowed because the ResultSet is not an updatable ResultSet. 
>    Test updateClob on a readonly resultset
>    Using column position as first parameter to updateClob
> -  Got expected exception : 'updateClob' not allowed because the ResultSet is not an updatable ResultSet. 
>    Using column name as first parameter to updateClob
> -  Got expected exception : 'updateClob' not allowed because the ResultSet is not an updatable ResultSet. 
>    Test updateDate on a readonly resultset
>    Using column position as first parameter to updateDate
>    Got expected exception : 'updateDate' not allowed because the ResultSet is not an updatable ResultSet. 
> @@ -609,9 +582,7 @@
>    Got expected exception : 'updateTimestamp' not allowed because the ResultSet is not an updatable ResultSet. 
>    Test updateBlob on a readonly resultset
>    Using column position as first parameter to updateBlob
> -  Got expected exception : 'updateBlob' not allowed because the ResultSet is not an updatable ResultSet. 
>    Using column name as first parameter to updateBlob
> -  Got expected exception : 'updateBlob' not allowed because the ResultSet is not an updatable ResultSet. 
>    Test updateBoolean on a readonly resultset
>    Using column position as first parameter to updateBoolean
>    Got expected exception : 'updateBoolean' not allowed because the ResultSet is not an updatable ResultSet. 
> @@ -624,14 +595,10 @@
>    Got expected exception : 'updateNull' not allowed because the ResultSet is not an updatable ResultSet. 
>    Test updateArray on a readonly resultset
>    Using column position as first parameter to updateArray
> -  Got expected exception : Feature not implemented: no details.
>    Using column name as first parameter to updateArray
> -  Got expected exception : Feature not implemented: no details.
>    Test updateRef on a readonly resultset
>    Using column position as first parameter to updateRef
> -  Got expected exception : Feature not implemented: no details.
>    Using column name as first parameter to updateRef
> -  Got expected exception : Feature not implemented: no details.
>  Positive Test21 - Test all updateXXX(excluding updateObject) methods on all the supported sql datatypes
>  Next datatype to test is SMALLINT
>    Testing updateShort on SQL type SMALLINT
> @@ -680,9 +647,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type SMALLINT
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type SMALLINT
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'SMALLINT'.
> @@ -700,9 +665,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'SMALLINT'.
>    Testing updateBlob on SQL type SMALLINT
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type SMALLINT
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -711,14 +674,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type SMALLINT
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type SMALLINT
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is INTEGER
>    Testing updateShort on SQL type INTEGER
>      Using column position as first parameter to updateShort
> @@ -766,9 +725,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type INTEGER
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type INTEGER
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'INTEGER'.
> @@ -786,9 +743,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'INTEGER'.
>    Testing updateBlob on SQL type INTEGER
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type INTEGER
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -797,14 +752,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type INTEGER
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type INTEGER
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is BIGINT
>    Testing updateShort on SQL type BIGINT
>      Using column position as first parameter to updateShort
> @@ -852,9 +803,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type BIGINT
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type BIGINT
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'BIGINT'.
> @@ -872,9 +821,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'BIGINT'.
>    Testing updateBlob on SQL type BIGINT
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type BIGINT
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -883,14 +830,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type BIGINT
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type BIGINT
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is DECIMAL(10,5)
>    Testing updateShort on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateShort
> @@ -938,9 +881,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'DECIMAL'.
> @@ -958,9 +899,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'DECIMAL'.
>    Testing updateBlob on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -969,14 +908,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type DECIMAL(10,5)
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is REAL
>    Testing updateShort on SQL type REAL
>      Using column position as first parameter to updateShort
> @@ -1024,9 +959,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type REAL
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type REAL
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'REAL'.
> @@ -1044,9 +977,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'REAL'.
>    Testing updateBlob on SQL type REAL
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type REAL
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -1055,14 +986,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type REAL
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type REAL
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is DOUBLE
>    Testing updateShort on SQL type DOUBLE
>      Using column position as first parameter to updateShort
> @@ -1110,9 +1037,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type DOUBLE
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type DOUBLE
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'DOUBLE'.
> @@ -1130,9 +1055,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'DOUBLE'.
>    Testing updateBlob on SQL type DOUBLE
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type DOUBLE
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -1141,14 +1064,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type DOUBLE
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type DOUBLE
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is CHAR(60)
>    Testing updateShort on SQL type CHAR(60)
>      Using column position as first parameter to updateShort
> @@ -1190,9 +1109,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type CHAR(60)
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type CHAR(60)
>      Using column position as first parameter to updateDate
>      Using column name as first parameter to updateDate
> @@ -1204,9 +1121,7 @@
>      Using column name as first parameter to updateTimestamp
>    Testing updateBlob on SQL type CHAR(60)
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type CHAR(60)
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -1215,14 +1130,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type CHAR(60)
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type CHAR(60)
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is VARCHAR(60)
>    Testing updateShort on SQL type VARCHAR(60)
>      Using column position as first parameter to updateShort
> @@ -1264,9 +1175,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type VARCHAR(60)
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type VARCHAR(60)
>      Using column position as first parameter to updateDate
>      Using column name as first parameter to updateDate
> @@ -1278,9 +1187,7 @@
>      Using column name as first parameter to updateTimestamp
>    Testing updateBlob on SQL type VARCHAR(60)
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type VARCHAR(60)
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -1289,14 +1196,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type VARCHAR(60)
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type VARCHAR(60)
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is LONG VARCHAR
>    Testing updateShort on SQL type LONG VARCHAR
>      Using column position as first parameter to updateShort
> @@ -1338,9 +1241,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type LONG VARCHAR
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type LONG VARCHAR
>      Using column position as first parameter to updateDate
>      Using column name as first parameter to updateDate
> @@ -1352,9 +1253,7 @@
>      Using column name as first parameter to updateTimestamp
>    Testing updateBlob on SQL type LONG VARCHAR
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type LONG VARCHAR
>      Using column position as first parameter to updateBoolean
>      Using column name as first parameter to updateBoolean
> @@ -1363,14 +1262,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type LONG VARCHAR
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type LONG VARCHAR
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is CHAR(2) FOR BIT DATA
>    Testing updateShort on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateShort
> @@ -1430,9 +1325,7 @@
>      Using column name as first parameter to updateBinaryStream
>    Testing updateClob on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'CHAR () FOR BIT DATA'.
> @@ -1450,9 +1343,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'CHAR () FOR BIT DATA'.
>    Testing updateBlob on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'CHAR () FOR BIT DATA'.
> @@ -1463,14 +1354,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type CHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is VARCHAR(2) FOR BIT DATA
>    Testing updateShort on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateShort
> @@ -1530,9 +1417,7 @@
>      Using column name as first parameter to updateBinaryStream
>    Testing updateClob on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'VARCHAR () FOR BIT DATA'.
> @@ -1550,9 +1435,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'VARCHAR () FOR BIT DATA'.
>    Testing updateBlob on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'VARCHAR () FOR BIT DATA'.
> @@ -1563,14 +1446,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type VARCHAR(2) FOR BIT DATA
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is LONG VARCHAR FOR BIT DATA
>    Testing updateShort on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateShort
> @@ -1630,9 +1509,7 @@
>      Using column name as first parameter to updateBinaryStream
>    Testing updateClob on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
> @@ -1650,9 +1527,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
>    Testing updateBlob on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
> @@ -1663,14 +1538,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type LONG VARCHAR FOR BIT DATA
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is CLOB(1k)
>    Testing updateShort on SQL type CLOB(1k)
>      Using column position as first parameter to updateShort
> @@ -1746,9 +1617,7 @@
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'CLOB'.
>    Testing updateBlob on SQL type CLOB(1k)
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'CLOB' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'CLOB' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type CLOB(1k)
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'CLOB'.
> @@ -1759,14 +1628,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type CLOB(1k)
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type CLOB(1k)
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is DATE
>    Testing updateShort on SQL type DATE
>      Using column position as first parameter to updateShort
> @@ -1830,9 +1695,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type DATE
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type DATE
>      Using column position as first parameter to updateDate
>      Using column name as first parameter to updateDate
> @@ -1846,9 +1709,7 @@
>      Using column name as first parameter to updateTimestamp
>    Testing updateBlob on SQL type DATE
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type DATE
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'DATE'.
> @@ -1859,14 +1720,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type DATE
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type DATE
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is TIME
>    Testing updateShort on SQL type TIME
>      Using column position as first parameter to updateShort
> @@ -1930,9 +1787,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type TIME
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type TIME
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'TIME'.
> @@ -1946,9 +1801,7 @@
>      Using column name as first parameter to updateTimestamp
>    Testing updateBlob on SQL type TIME
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type TIME
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'TIME'.
> @@ -1959,14 +1812,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type TIME
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type TIME
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is TIMESTAMP
>    Testing updateShort on SQL type TIMESTAMP
>      Using column position as first parameter to updateShort
> @@ -2030,9 +1879,7 @@
>        Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.io.InputStream'.
>    Testing updateClob on SQL type TIMESTAMP
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type TIMESTAMP
>      Using column position as first parameter to updateDate
>      Using column name as first parameter to updateDate
> @@ -2044,9 +1891,7 @@
>      Using column name as first parameter to updateTimestamp
>    Testing updateBlob on SQL type TIMESTAMP
>      Using column position as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Blob'.
>      Using column name as first parameter to updateBlob
> -      Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Blob'.
>    Testing updateBoolean on SQL type TIMESTAMP
>      Using column position as first parameter to updateBoolean
>        Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'TIMESTAMP'.
> @@ -2057,14 +1902,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type TIMESTAMP
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type TIMESTAMP
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Next datatype to test is BLOB(1k)
>    Testing updateShort on SQL type BLOB(1k)
>      Using column position as first parameter to updateShort
> @@ -2124,9 +1965,7 @@
>      Using column name as first parameter to updateBinaryStream
>    Testing updateClob on SQL type BLOB(1k)
>      Using column position as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'BLOB' from a data value of type 'java.sql.Clob'.
>      Using column name as first parameter to updateClob
> -      Got expected exception : An attempt was made to get a data value of type 'BLOB' from a data value of type 'java.sql.Clob'.
>    Testing updateDate on SQL type BLOB(1k)
>      Using column position as first parameter to updateDate
>        Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'BLOB'.
> @@ -2155,14 +1994,10 @@
>      Using column name as first parameter to updateNull
>    Testing updateArray on SQL type BLOB(1k)
>      Using column position as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateArray
> -      Got expected exception : Feature not implemented: no details.
>    Testing updateRef on SQL type BLOB(1k)
>      Using column position as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>      Using column name as first parameter to updateRef
> -      Got expected exception : Feature not implemented: no details.
>  Positive Test22 - Test updateObject method
>  Next datatype to test is SMALLINT
>    updateObject with column position & Short object as parameters
> @@ -2183,10 +2018,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'SMALLINT'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'SMALLINT'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'SMALLINT'.
>    updateObject with column name & Date object as parameters
> @@ -2199,10 +2030,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'SMALLINT'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'SMALLINT'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'SMALLINT' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2226,10 +2053,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'INTEGER'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'INTEGER'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'INTEGER'.
>    updateObject with column name & Date object as parameters
> @@ -2242,10 +2065,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'INTEGER'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'INTEGER'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'INTEGER' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2269,10 +2088,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'BIGINT'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'BIGINT'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'BIGINT'.
>    updateObject with column name & Date object as parameters
> @@ -2285,10 +2100,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'BIGINT'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'BIGINT'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'BIGINT' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2312,10 +2123,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'DECIMAL'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'DECIMAL'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'DECIMAL'.
>    updateObject with column name & Date object as parameters
> @@ -2328,10 +2135,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'DECIMAL'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'DECIMAL'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DECIMAL' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2355,10 +2158,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'REAL'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'REAL'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'REAL'.
>    updateObject with column name & Date object as parameters
> @@ -2371,10 +2170,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'REAL'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'REAL'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'REAL' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2398,10 +2193,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'DOUBLE'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'DOUBLE'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'DOUBLE'.
>    updateObject with column name & Date object as parameters
> @@ -2414,10 +2205,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'DOUBLE'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'DOUBLE'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DOUBLE' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2439,20 +2226,12 @@
>    updateObject with column name & String object as parameters
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>    updateObject with column name & Date object as parameters
>    updateObject with column position & Time object as parameters
>    updateObject with column name & Time object as parameters
>    updateObject with column position & TimeStamp object as parameters
>    updateObject with column name & TimeStamp object as parameters
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2474,20 +2253,12 @@
>    updateObject with column name & String object as parameters
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>    updateObject with column name & Date object as parameters
>    updateObject with column position & Time object as parameters
>    updateObject with column name & Time object as parameters
>    updateObject with column position & TimeStamp object as parameters
>    updateObject with column name & TimeStamp object as parameters
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2509,20 +2280,12 @@
>    updateObject with column name & String object as parameters
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>    updateObject with column name & Date object as parameters
>    updateObject with column position & Time object as parameters
>    updateObject with column name & Time object as parameters
>    updateObject with column position & TimeStamp object as parameters
>    updateObject with column name & TimeStamp object as parameters
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>    updateObject with column name & Boolean object as parameters
>    updateObject with column position & null as parameters
> @@ -2558,10 +2321,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.lang.String' into a data value of type 'CHAR () FOR BIT DATA'.
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'CHAR () FOR BIT DATA'.
>    updateObject with column name & Date object as parameters
> @@ -2574,10 +2333,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'CHAR () FOR BIT DATA'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'CHAR () FOR BIT DATA'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'CHAR () FOR BIT DATA'.
>    updateObject with column name & Boolean object as parameters
> @@ -2615,10 +2370,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.lang.String' into a data value of type 'VARCHAR () FOR BIT DATA'.
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'VARCHAR () FOR BIT DATA'.
>    updateObject with column name & Date object as parameters
> @@ -2631,10 +2382,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'VARCHAR () FOR BIT DATA'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'VARCHAR () FOR BIT DATA'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'VARCHAR () FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'VARCHAR () FOR BIT DATA'.
>    updateObject with column name & Boolean object as parameters
> @@ -2672,10 +2419,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.lang.String' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
>    updateObject with column name & Date object as parameters
> @@ -2688,10 +2431,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'LONG VARCHAR FOR BIT DATA' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
>    updateObject with column name & Boolean object as parameters
> @@ -2729,8 +2468,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'CLOB'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'CLOB'.
> -  updateObject with column position & Clob object as parameters
> -  updateObject with column name & Clob object as parameters
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'CLOB'.
>    updateObject with column name & Date object as parameters
> @@ -2743,10 +2480,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'CLOB'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'CLOB'.
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CLOB' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'CLOB' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'CLOB'.
>    updateObject with column name & Boolean object as parameters
> @@ -2786,10 +2519,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'DATE'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'DATE'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>    updateObject with column name & Date object as parameters
>    updateObject with column position & Time object as parameters
> @@ -2798,10 +2527,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Time' into a data value of type 'DATE'.
>    updateObject with column position & TimeStamp object as parameters
>    updateObject with column name & TimeStamp object as parameters
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'DATE' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'DATE'.
>    updateObject with column name & Boolean object as parameters
> @@ -2841,10 +2566,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'TIME'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'TIME'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'TIME'.
>    updateObject with column name & Date object as parameters
> @@ -2853,10 +2574,6 @@
>    updateObject with column name & Time object as parameters
>    updateObject with column position & TimeStamp object as parameters
>    updateObject with column name & TimeStamp object as parameters
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIME' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'TIME'.
>    updateObject with column name & Boolean object as parameters
> @@ -2896,20 +2613,12 @@
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'TIMESTAMP'.
>    updateObject with column name & bytes[] array as parameters
>      Got expected exception : An attempt was made to put a data value of type 'byte[]' into a data value of type 'TIMESTAMP'.
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>    updateObject with column name & Date object as parameters
>    updateObject with column position & Time object as parameters
>    updateObject with column name & Time object as parameters
>    updateObject with column position & TimeStamp object as parameters
>    updateObject with column name & TimeStamp object as parameters
> -  updateObject with column position & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Blob'.
> -  updateObject with column name & Blob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'TIMESTAMP' from a data value of type 'java.sql.Blob'.
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'TIMESTAMP'.
>    updateObject with column name & Boolean object as parameters
> @@ -2947,10 +2656,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.lang.String' into a data value of type 'BLOB'.
>    updateObject with column position & bytes[] array as parameters
>    updateObject with column name & bytes[] array as parameters
> -  updateObject with column position & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'BLOB' from a data value of type 'java.sql.Clob'.
> -  updateObject with column name & Clob object as parameters
> -    Got expected exception : An attempt was made to get a data value of type 'BLOB' from a data value of type 'java.sql.Clob'.
>    updateObject with column position & Date object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Date' into a data value of type 'BLOB'.
>    updateObject with column name & Date object as parameters
> @@ -2963,8 +2668,6 @@
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'BLOB'.
>    updateObject with column name & TimeStamp object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'java.sql.Timestamp' into a data value of type 'BLOB'.
> -  updateObject with column position & Blob object as parameters
> -  updateObject with column name & Blob object as parameters
>    updateObject with column position & Boolean object as parameters
>      Got expected exception : An attempt was made to put a data value of type 'boolean' into a data value of type 'BLOB'.
>    updateObject with column name & Boolean object as parameters
> @@ -2987,8 +2690,6 @@
>    updateDate and then cancelRowUpdates
>    updateTime and then cancelRowUpdates
>    updateTimestamp and then cancelRowUpdates
> -  updateClob and then cancelRowUpdates
> -  updateBlob and then cancelRowUpdates
>  Positive Test24a - after updateXXX, try cancelRowUpdates and then deleteRow
>  column 1 on this row before updateInt is 1
>  column 1 on this row after updateInt is 234
> @@ -3072,7 +2773,8 @@
>  	{2,bb                  }
>  	{3,cc                  }
>  SQL State : 42X31
> -Got expected exception Column 'C2' is not in FOR UPDATE list of cursor 'SQLCUR539'.
> +Got expected exception Column 'C2' is not in FOR UPDATE list of cursor 'SQLCUR37'.
> +updateRow passed
>    Make sure the contents of table are unchanged
>  	 C1,C2
>  	 -- --
> Index: java/testing/org/apache/derbyTesting/functionTests/master/jdk14/updatableResultSet.out
> ===================================================================
> --- java/testing/org/apache/derbyTesting/functionTests/master/jdk14/updatableResultSet.out	(revision 170535)
> +++ java/testing/org/apache/derbyTesting/functionTests/master/jdk14/updatableResultSet.out	(working copy)
> @@ -13,6 +13,8 @@
>  SQL State : XJ083
>  Got expected exception 'updateRow' not allowed because the ResultSet is not an updatable ResultSet. 
>  Negative Test2 - request for scroll sensitive updatable resultset will give a read only scroll insensitive resultset
> +WARNING 01J02: Scroll sensitive cursors are not currently implemented.
> +WARNING 01J03: Scroll sensitive and scroll insensitive updatable ResultSets are not currently implemented.
>  requested TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE but that is not supported
>  Jira issue Derby-154 : When client connects to Network Server using JCC, it incorrectly shows support for scroll sensitive updatable resultsets
>  Make sure that we got TYPE_SCROLL_INSENSITIVE? true
> @@ -42,7 +44,7 @@
>  Make sure that we got CONCUR_READ_ONLY? true
>  Jira issue Derby-159 : Warnings raised by Derby are not getting passed to the Client in Network Server Mode
>  Will see the warnings in embedded mode only
> -Expected warnings on resultset = java.sql.SQLWarning: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
> +WARNING 01J06: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
>  Now attempting to send a delete on a sql with no FOR UPDATE clause.
>  SQL State : XJ083
>  Got expected exception 'deleteRow' not allowed because the ResultSet is not an updatable ResultSet. 
> @@ -53,7 +55,7 @@
>  Make sure that we got CONCUR_READ_ONLY? true
>  Jira issue Derby-159 : Warnings raised by Derby are not getting passed to the Client in Network Server Mode
>  Will see the warnings in embedded mode only
> -Expected warnings on resultset = java.sql.SQLWarning: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
> +WARNING 01J06: ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.
>  Now attempting to send a delete on a sql with FOR READ ONLY clause.
>  SQL State : XJ083
>  Got expected exception 'deleteRow' not allowed because the ResultSet is not an updatable ResultSet. 
> @@ -66,8 +68,7 @@
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  Now attempt a updateRow without first doing next on the resultset.
> -In embedded mode, updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX
> -In Network Server mode, if no updateXXX were issued before updateRow, then updateRow is a no-op and doesn't check if it is on a row or not
> +updateRow will check if it is on a row or not even though no changes have been made to the row using updateXXX
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  ResultSet is positioned after the last row. attempt to deleteRow at this point should fail!
> @@ -126,8 +127,7 @@
>  JDBC 2.0 updatable resultset apis on this ResultSet object will pass because this is an updatable resultset
>  column 1 on this row before deleteRow is 1
>  column 2 on this row before deleteRow is aa                  
> -Since after deleteRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail
> -In Network Server mode, the ResultSet stays on the deleted row after deleteRow and hence no error for getXXX
> +Since after deleteRow(), in embedded mode and Network Server mode using Derby Net Client, ResultSet is positioned before the next row, getXXX will fail
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  calling deleteRow again w/o first positioning the ResultSet on the next row will fail
> @@ -140,8 +140,7 @@
>  column 1 on this row after updateInt is 234
>  column 2 on this row before updateString is aa                  
>  now updateRow on the row
> -Since after updateRow(), in embedded mode, ResultSet is positioned before the next row, getXXX will fail
> -In Network Server mode, the ResultSet stays on the updated row after updateRow and hence no error for getXXX
> +Since after updateRow(), in embedded mode and Network Server mode using Derby Net Client, ResultSet is positioned before the next row, getXXX will fail
>  SQL State : 24000
>  Got expected exception Invalid cursor state - no current row.
>  calling updateRow again w/o first positioning the ResultSet on the next row will fail
> @@ -150,11 +149,14 @@
>  Position the ResultSet with next()
>  Should be able to updateRow() on the current row now
>  Positive Test2 - even if no columns from table specified in the column list, we should be able to get updatable resultset
> +Will work in embedded mode because target table is not derived from the first column in the select list
> +Will not work in network server mode because it derives the target tabke from the first column in the select list
>  total number of rows in T1 
>  	 1
>  	 -
>  	{3}
>  column 1 on this row is 1
> +PASS!!! passed in embedded mode
>  total number of rows in T1 after one deleteRow is 
>  	 1
>  	 -
> @@ -244,16 +246,24 @@
>  	 --- ---
>  	{123,1}
>  	{123,1}
> -Positive Test8a - change the name of the resultset and see if deleteRow still works
> +Positive Test8a - change the name of the statement when the resultset is open and see if deleteRow still works
> +This test works in embedded mode since Derby can handle the change in the name of the statement with an open resultset
> +But it fails under Network Server mode because JCC and Derby Net Client do not allow statement name change when there an open resultset against it
>  change the cursor name(case sensitive name) with setCursorName and then try to deleteRow
>  change the cursor name one more time with setCursorName and then try to deleteRow
> -Positive Test8b - change the name of the resultset and see if updateRow still works
> +PASS!!! passed in embedded mode
> +Positive Test8b - change the name of the statement when the resultset is open and see if updateRow still works
> +This test works in embedded mode since Derby can handle the change in the name of the statement with an open resultset
> +But it fails under Network Server mode because JCC and Derby Net Client do not allow statement name change when there an open resultset against it
>  change the cursor name one more time with setCursorName and then try to updateRow
>  change the cursor name(case sensitive name) with setCursorName and then try to updateRow
> -Positive Test9a - using correlation name for the table in the select sql is not a problem
> +PASS!!! passed in embedded mode
> +Positive Test9a - using correlation name for the table in the select sql works in embedded mode and Network Server using Derby Net Client driver
> +Correlation name for table does not work in Network Server mode (using JCC) because the drivers construct the delete sql with the correlation name rather than the base table name
>  column 1 on this row is 1
>  now try to deleteRow
> -Positive Test9b - using correlation name for updatable column name is not allowed
> +PASS!!! passed in embedded mode
> +Positive Test9b - using correlation name for updatable columns is not allowed.
>  Table t1 has following rows
>  	 C1,C2
>  	 -- --
> @@ -283,18 +293,9 @@
>  	{11,aa                  }
>  	{2,bb                  }
>  	{3,cc                  }
> -Positive Test9c - try to updateXXX on a readonly column. Should get error
> -SQL State : 42X31
> -Got expected exception Column 'C2' is not in FOR UPDATE list of cursor 'SQLCUR17'.
> -Table t1 has following rows
> -	 C1,C2
> -	 -- --
> -	{1,aa                  }
> -	{2,bb                  }
> -	{3,cc                  }
>  Positive Test9d - try to updateXXX on a readonly column with correlation name. Should get error
>  SQL State : 42X31
> -Got expected exception Column 'COL2' is not in FOR UPDATE list of cursor 'SQLCUR18'.
> +Got expected exception Column 'COL2' is not in FOR UPDATE list of cursor 'SQLCUR17'.
>  Table t1 has following rows
>  	 C1,C2
>  	 -- --
> @@ -305,7 +306,7 @@
>  delete using first resultset
>  attempt to send deleteRow on the same row through a different resultset should throw an exception
>  SQL State : XCL08
> -Got expected exception Cursor 'SQLCUR20' is not on a row.
> +Got expected exception Cursor 'SQLCUR19' is not on a row.
>  Move to next row in the 2nd resultset and then delete using the second resultset
>  Positive Test11 - setting the fetch size to > 1 will be ignored by updatable resultset. Same as updatable cursors
>  Notice the Fetch Size in run time statistics output.
> @@ -314,7 +315,7 @@
>  Statement Name: 
>  	null
>  Statement Text: 
> -	SELECT 1, 2 FROM t1 FOR UPDATE of c1
> +	SELECT * FROM t1 FOR UPDATE of c1
>  Parse Time: 0
>  Bind Time: 0
>  Optimize Time: 0
> @@ -326,51 +327,25 @@
>  Begin Execution Timestamp : null
>  End Execution Timestamp : null
>  Statement Execution Plan Text: 
> -Project-Restrict ResultSet (3):
> +Table Scan ResultSet for T1 at read committed isolation level using exclusive row locking chosen by the optimizer
>  Number of opens = 1
>  Rows seen = 0
>  Rows filtered = 0
> -restriction = false
> -projection = true
> +Fetch Size = 1
>  	constructor time (milliseconds) = 0
>  	open time (milliseconds) = 0
>  	next time (milliseconds) = 0
>  	close time (milliseconds) = 0
> -	restriction time (milliseconds) = 0
> -	projection time (milliseconds) = 0
> -Source result set:
> -	Project-Restrict ResultSet (2):
> -	Number of opens = 1
> -	Rows seen = 0
> -	Rows filtered = 0
> -	restriction = false
> -	projection = true
> -		constructor time (milliseconds) = 0
> -		open time (milliseconds) = 0
> -		next time (milliseconds) = 0
> -		close time (milliseconds) = 0
> -		restriction time (milliseconds) = 0
> -		projection time (milliseconds) = 0
> -	Source result set:
> -		Table Scan ResultSet for T1 at read committed isolation level using exclusive row locking chosen by the optimizer
> -		Number of opens = 1
> -		Rows seen = 0
> -		Rows filtered = 0
> -		Fetch Size = 1
> -			constructor time (milliseconds) = 0
> -			open time (milliseconds) = 0
> -			next time (milliseconds) = 0
> -			close time (milliseconds) = 0
> -		scan information: 
> -			Bit set of columns fetched=All
> -			Number of columns fetched=2
> -			Number of pages visited=0
> -			Number of rows qualified=0
> -			Number of rows visited=0
> -			Scan type=heap
> -			start position: 
> -null			stop position: 
> -null			qualifiers:
> +scan information: 
> +	Bit set of columns fetched=All
> +	Number of columns fetched=2
> +	Number of pages visited=0
> +	Number of rows qualified=0
> +	Number of rows visited=0
> +	Scan type=heap
> +	start position: 
> +null	stop position: 
> +null	qualifiers:
>  None
>  statement's fetch size is 200
>  Positive Test12a - make sure delete trigger gets fired when deleteRow is issued
> @@ -3072,7 +3047,8 @@
>  	{2,bb                  }
>  	{3,cc                  }
>  SQL State : 42X31
> -Got expected exception Column 'C2' is not in FOR UPDATE list of cursor 'SQLCUR539'.
> +Got expected exception Column 'C2' is not in FOR UPDATE list of cursor 'SQLCUR37'.
> +updateRow passed
>    Make sure the contents of table are unchanged
>  	 C1,C2
>  	 -- --
> Index: java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude
> ===================================================================
> --- java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude	(revision 170535)
> +++ java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude	(working copy)
> @@ -3,8 +3,10 @@
>  # excluding batchUpdate.java for it hits a problem in networkserver ('beetle' 5561)
>  # excluding statementJdbc20.java because this tests fetch_reverse throughout the test
>  # excluding jdbcapi/testRelative.java because this is a new test contributed by Shreyas Kaushik and needs to be debugged with JCC  in order to get it running with network server
> +# excluding lang/updatableResultSet.java because changes are required in JCC Driver for this test to run correctly
>  jdbcapi/resultsetStream.java
>  lang/scrollCursors2.java
>  jdbcapi/batchUpdate.java
>  jdbcapi/statementJdbc20.java
>  jdbcapi/testRelative.java
> +lang/updatableResultSet.java
> Index: java/client/org/apache/derby/client/am/ResultSet.java
> ===================================================================
> --- java/client/org/apache/derby/client/am/ResultSet.java	(revision 170535)
> +++ java/client/org/apache/derby/client/am/ResultSet.java	(working copy)
> @@ -2368,43 +2368,75 @@
>              if (agent_.loggingEnabled()) {
>                  agent_.logWriter_.traceEntry(this, "updateRow");
>              }
> -            updateRowX();
> +            //If updateXXX were issued on the row before updateRow, then
> +            //position the ResultSet to right before the next row after updateRow
> +            if (updateRowX())
> +                isValidCursorPosition_ = false;
>          }
>      }
>  
> -    private void updateRowX() throws java.sql.SQLException {
> +    //if no updateXXX were issued before this updateRow, then return false
> +    private boolean updateRowX() throws java.sql.SQLException {
>          checkForClosedResultSet();
>          if (isOnInsertRow_ || resultSetConcurrency_ == java.sql.ResultSet.CONCUR_READ_ONLY) {
>              throw new SqlException(agent_.logWriter_, "This method cannot be invoked while the cursor is on the insert " +
>                      "row or if the concurrency of this ResultSet object is CONCUR_READ_ONLY.");
>          }
>  
> -        // No-op if none of the columns were updated and updateRow() is called, just return.
> +        //if not on a valid row, then do not accept updateXXX calls
> +        if (!isValidCursorPosition_)
> +            throw new SqlException(agent_.logWriter_, "Invalid operation to " +
> +                    "update at current cursor position");
> +
> +        // If no updateXXX has been called on this ResultSet object, then
> +        // updatedColumns_ will be null and hence no action required
>          if (updatedColumns_ == null) {
> -            return;
> +            return false;
>          }
>  
> -        if (preparedStatementForUpdate_ == null) {
> -            getPreparedStatementForUpdate();
> +        // updateXXX has been called on this ResultSet object, but check if it
> +        // has been called on the current row. If no column got updated on this
> +        // current row, then just return.
> +        boolean didAnyColumnGetUpdated = false;
> +        for (int i=0; i < updatedColumns_.length; i++) {
> +            if (columnUpdated_[i]) {
> +                didAnyColumnGetUpdated = true;
> +                break;
> +            }
>          }
> +        if (didAnyColumnGetUpdated == false)
> +            return false;
>  
> +        // User might not be updating all the updatable columns selected in the
> +        // select sql and hence every updateRow on the same ResultSet can be
> +        // potentially different than the previous one. Because of that, we
> +        // should get a new prepared statement to do updates every time
> +        getPreparedStatementForUpdate();
> +
>          // build the inputs array for the prepared statement for update
> +        int paramNumber = 0;
>          for (int i = 0; i < updatedColumns_.length; i++) {
>              if (resultSetMetaData_.sqlxUpdatable_[i] == 1) {
> +                // Since user may choose not to update all the columns in the
> +                // select list, check first if the column has been updated
> +                if (columnUpdated_[i] == false)
> +                    continue;
> +                paramNumber++;
> +
>                  // column is updated either if the updatedColumns_ entry is not null,
>                  // or if the updatedColumns_ entry is null, but columnUpdated_ boolean is
>                  // set to true, which means columns is updated to a null.
>                  if (updatedColumns_[i] != null ||
>                          (updatedColumns_[i] == null && columnUpdated_[i])) {
> -                    preparedStatementForUpdate_.setInput(i + 1, updatedColumns_[i]);
> +                    preparedStatementForUpdate_.setInput(paramNumber, updatedColumns_[i]);
>                  } else {
>                      // Check if the original column is null.  Calling CrossConverters.setObject on a null
>                      // column causes "Data Conversion" Exception.
>                      Object originalObj = getObject(i + 1);
>                      if (originalObj == null) {
> -                        preparedStatementForUpdate_.setInput(i + 1, null);
> +                        preparedStatementForUpdate_.setInput(paramNumber, null);
>                      } else {
> -                        preparedStatementForUpdate_.setInput(i + 1, agent_.crossConverters_.setObject(resultSetMetaData_.types_[i], originalObj));
> +                        preparedStatementForUpdate_.setInput(paramNumber, agent_.crossConverters_.setObject(resultSetMetaData_.types_[i], originalObj));
>                      }
>                  }
>              }
> @@ -2423,6 +2455,7 @@
>              cancelRowUpdates();
>              throw e;
>          }
> +        return true;
>      }
>  
>      public void deleteRow() throws java.sql.SQLException {
> @@ -2431,6 +2464,10 @@
>                  agent_.logWriter_.traceEntry(this, "deleteRow");
>              }
>              deleteRowX();
> +            //the cursor is not positioned on the deleted row after deleteRow.
> +            //User needs to issue ResultSet.next to reposition the ResultSet
> +            //on a valid row
> +            isValidCursorPosition_ = false;
>          }
>      }
>  
> @@ -2502,6 +2539,11 @@
>                          "row or if this ResultSet object has a concurrency of CONCUR_READ_ONLY.");
>              }
>  
> +            // if not on a valid row, then do not accept cancelRowUpdates call
> +            if (!isValidCursorPosition_)
> +                throw new SqlException(agent_.logWriter_, "Invalid operation " +
> +                        "at current cursor position.");
> +
>              // if updateRow() has already been called, then cancelRowUpdates should have
>              // no effect.  updateRowCalled_ is reset to false as soon as the cursor moves to a new row.
>              if (!updateRowCalled_) {
> @@ -3041,8 +3083,6 @@
>          boolean foundOneUpdatedColumnAlready = false;
>          String updateString = "UPDATE " + getTableName() + " SET ";
>  
> -        // The update tablename ... where current of cursorname for Cloudscape has
> -        // to provide columns as columnname1 = ?, columnname2 = ?
>          for (column = 1; column <= resultSetMetaData_.columns_; column++) {
>              if (columnUpdated_[column - 1]) {
>                  if (foundOneUpdatedColumnAlready) {
> @@ -3069,8 +3109,8 @@
>      private String buildDeleteString() throws SqlException {
>          String deleteString = "DELETE FROM ";
>  
> -        // build the update string using the server's cursor name
> -        deleteString += (getTableName() + " WHERE CURRENT OF " + getServerCursorName());
> +        // build the delete string using the server's cursor name
> +        deleteString += (getTableName() + " WHERE CURRENT OF \"" + getServerCursorName() + "\"");
>  
>          if (isRowsetCursor_) {
>              deleteString += " FOR ROW ? OF ROWSET";
> @@ -3084,12 +3124,15 @@
>          if (resultSetMetaData_.sqlxRdbnam_[0] != null &&
>                  !resultSetMetaData_.sqlxRdbnam_[0].equals(""))      // catalog
>          {
> -            tableName += resultSetMetaData_.sqlxRdbnam_[0].trim() + ".";
> +            tableName += "\"" + resultSetMetaData_.sqlxRdbnam_[0] + "\".";
>          }
> -        if (!resultSetMetaData_.sqlxSchema_[0].equals("")) {
> -            tableName += resultSetMetaData_.sqlxSchema_[0].trim() + ".";
> +        //dervied column like select 2 from t1, has null schema and table name
> +        if (resultSetMetaData_.sqlxSchema_[0] != null && !resultSetMetaData_.sqlxSchema_[0].equals("")) {
> +            tableName += "\"" + resultSetMetaData_.sqlxSchema_[0] + "\".";
>          }
> -        tableName += resultSetMetaData_.sqlxBasename_[0].trim();
> +        if (resultSetMetaData_.sqlxBasename_[0] != null) {
> +            tableName += "\"" + resultSetMetaData_.sqlxBasename_[0] + "\"";
> +        }
>          return tableName;
>      }
>  
> @@ -3157,6 +3200,11 @@
>          if (resultSetMetaData_.sqlxUpdatable_ == null || resultSetMetaData_.sqlxUpdatable_[column - 1] != 1) {
>              throw new SqlException(agent_.logWriter_, "Column not updatable");
>          }
> +
> +        //if not on a valid row, then do not accept updateXXX calls
> +        if (!isValidCursorPosition_)
> +            throw new SqlException(agent_.logWriter_, "Invalid operation to " +
> +                    "update at current cursor position");
>      }
>  
>      final void checkForValidColumnIndex(int column) throws SqlException {