db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mamta Satoor <msat...@gmail.com>
Subject Re: [PATCH] Updatable Resultset JDBC api (update and delete for forward only updatable resultsets) support for Network Server
Date Fri, 20 May 2005 21:53:25 GMT
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());
> > + 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]

Mime
View raw message