You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2006/06/27 20:26:29 UTC
svn commit: r417548 [2/2] - in /db/derby/code/trunk/java:
client/org/apache/derby/client/am/ client/org/apache/derby/client/net/
engine/org/apache/derby/iapi/jdbc/ engine/org/apache/derby/impl/jdbc/
engine/org/apache/derby/loc/ shared/org/apache/derby/...
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ResultSetTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ResultSetTest.java?rev=417548&r1=417547&r2=417548&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ResultSetTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ResultSetTest.java Tue Jun 27 11:26:28 2006
@@ -20,10 +20,12 @@
package org.apache.derbyTesting.functionTests.tests.jdbc4;
+import javax.xml.transform.Result;
import junit.framework.*;
import org.apache.derbyTesting.functionTests.util.BaseJDBCTestCase;
+import java.io.*;
import java.sql.*;
/**
@@ -51,14 +53,18 @@
public void setUp()
throws SQLException {
con = getConnection();
- stmt = con.createStatement();
+ stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_UPDATABLE);
+
rs = stmt.executeQuery("SELECT * FROM SYS.SYSTABLES");
+
// Position on first result.
rs.next();
}
public void tearDown()
throws SQLException {
+
if (rs != null) {
rs.close();
}
@@ -247,8 +253,910 @@
}
}
+ /**
+ * This methods tests the ResultSet interface method
+ * updateBinaryStream
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+
+ public void testUpdateBinaryStream()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol LONG VARCHAR FOR BIT DATA)");
+ //Initial set of bytes used to create the Binary Stream that has to
+ //be inserted
+ byte[] bytes = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the BinaryStream that will be used in
+ //the updateAsciiStream method
+ byte[] bytes_for_update = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //Input Stream inserted initially
+ InputStream is = new java.io.ByteArrayInputStream(bytes);
+
+ //InputStream that is used for update
+ InputStream is_for_update = new
+ java.io.ByteArrayInputStream(bytes_for_update);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+ ps_sb.setInt(1,1);
+ ps_sb.setBinaryStream(2,is,bytes.length);
+ ps_sb.executeUpdate();
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ rs1.updateBinaryStream(2,is_for_update,(int)bytes_for_update.length);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateBinaryStream method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ InputStream is_ret = rs1.getBinaryStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes_for_update.length;i++) {
+ assertEquals("Error in updateBinaryStream",bytes_for_update[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateAsciiStream
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+
+ public void testUpdateAsciiStream()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol LONG VARCHAR)");
+ //Initial set of bytes used to create the Ascii Stream that has to
+ //be inserted
+ byte[] bytes = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the AsciiStream that will be used in
+ //the updateAsciiStream method
+ byte[] bytes_for_update = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //Input Stream inserted initially
+ InputStream is = new java.io.ByteArrayInputStream(bytes);
+
+ //InputStream that is used for update
+ InputStream is_for_update = new
+ java.io.ByteArrayInputStream(bytes_for_update);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+ ps_sb.setInt(1,1);
+ ps_sb.setAsciiStream(2,is,bytes.length);
+ ps_sb.executeUpdate();
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ rs1.updateAsciiStream(2,is_for_update,(int)bytes_for_update.length);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateAsciiStream method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ InputStream is_ret = rs1.getAsciiStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes_for_update.length;i++) {
+ assertEquals("Error in updateAsciiStream",bytes_for_update[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateCharacterStream
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+
+ public void testUpdateCharacterStream()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol LONG VARCHAR)");
+
+ String str = "Test data";
+ String str_for_update = "Test data used for update";
+
+ StringReader r = new StringReader(str);
+ StringReader r_for_update = new StringReader
+ (str_for_update);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+ ps_sb.setInt(1,1);
+ ps_sb.setCharacterStream(2,r,str.length());
+ ps_sb.executeUpdate();
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ rs1.updateCharacterStream(2,r_for_update,str_for_update.length());
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateAsciiStream method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+
+ StringReader r_ret = (StringReader)rs1.getCharacterStream(2);
+
+ char [] c_ret = new char[str_for_update.length()];
+
+ try {
+ r_ret.read(c_ret);
+ }
+ catch(IOException ioe) {
+ fail("Error in reading the InputStream");
+ }
+
+ String str_ret = new String(c_ret);
+
+ assertEquals("Error in updateCharacterStream" +
+ str_ret,str_for_update,str_ret);
+
+
+ rs1.close();
+
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateBinaryStream
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+
+ public void testUpdateBinaryStreamStringParameterName()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol LONG VARCHAR FOR BIT DATA)");
+ //Initial set of bytes used to create the Binary Stream that has to
+ //be inserted
+ byte[] bytes = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the BinaryStream that will be used in
+ //the updateAsciiStream method
+ byte[] bytes_for_update = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //Input Stream inserted initially
+ InputStream is = new java.io.ByteArrayInputStream(bytes);
+
+ //InputStream that is used for update
+ InputStream is_for_update = new
+ java.io.ByteArrayInputStream(bytes_for_update);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+ ps_sb.setInt(1,1);
+ ps_sb.setBinaryStream(2,is,bytes.length);
+ ps_sb.executeUpdate();
+ ps_sb.close();
+
+ //Update operation
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ rs1.updateBinaryStream("datacol",is_for_update,(int)bytes_for_update.length);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateBinaryStream method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ InputStream is_ret = rs1.getBinaryStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes_for_update.length;i++) {
+ assertEquals("Error in updateBinaryStream",bytes_for_update[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateAsciiStream
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+
+ public void testUpdateAsciiStreamStringParameterName()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol LONG VARCHAR)");
+ //Initial set of bytes used to create the Ascii Stream that has to
+ //be inserted
+ byte[] bytes = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the AsciiStream that will be used in
+ //the updateAsciiStream method
+ byte[] bytes_for_update = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //Input Stream inserted initially
+ InputStream is = new java.io.ByteArrayInputStream(bytes);
+
+ //InputStream that is used for update
+ InputStream is_for_update = new
+ java.io.ByteArrayInputStream(bytes_for_update);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+ ps_sb.setInt(1,1);
+ ps_sb.setAsciiStream(2,is,bytes.length);
+ ps_sb.executeUpdate();
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ rs1.updateAsciiStream("datacol",is_for_update,(int)bytes_for_update.length);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateAsciiStream method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ InputStream is_ret = rs1.getAsciiStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes_for_update.length;i++) {
+ assertEquals("Error in updateAsciiStream",bytes_for_update[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateCharacterStream
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+
+ public void testUpdateCharacterStreamStringParameterName()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol LONG VARCHAR)");
+
+ String str = "Test data";
+ String str_for_update = "Test data used for update";
+
+ StringReader r = new StringReader(str);
+ StringReader r_for_update = new StringReader
+ (str_for_update);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+ ps_sb.setInt(1,1);
+ ps_sb.setCharacterStream(2,r,str.length());
+ ps_sb.executeUpdate();
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ rs1.updateCharacterStream("datacol",r_for_update,str_for_update.length());
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateAsciiStream method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+
+ StringReader r_ret = (StringReader)rs1.getCharacterStream(2);
+
+ char [] c_ret = new char[str_for_update.length()];
+
+ try {
+ r_ret.read(c_ret);
+ }
+ catch(IOException ioe) {
+ fail("Error in reading the InputStream");
+ }
+
+ String str_ret = new String(c_ret);
+
+ assertEquals("Error in updateCharacterStream" + str_ret,str_for_update,
+ str_ret);
+
+ rs1.close();
+
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateClob
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+ public void embeddedUpdateClob()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol Clob)");
+ //Initial set of bytes used to create the Ascii Stream for the Clob
+ //that has to be inserted
+ byte[] bytes1 = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the AsciiStream for the Clob
+ //that will be used in the updateClob method
+ byte[] bytes2 = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //1 Input Stream for insertion
+ InputStream is1 = new java.io.ByteArrayInputStream(bytes1);
+
+ //2 Input Stream for insertion
+ InputStream is2 = new java.io.ByteArrayInputStream(bytes2);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+
+ //first insert
+ ps_sb.setInt(1,1);
+ ps_sb.setAsciiStream(2,is1,bytes1.length);
+ ps_sb.executeUpdate();
+
+ //second insert
+ ps_sb.setInt(1,2);
+ ps_sb.setAsciiStream(2,is2,bytes2.length);
+ ps_sb.executeUpdate();
+
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+ //we do not have set methods on Clob and Blob implemented
+ //So query the first Clob from the database
+ //update the second result set with this
+ //Clob value
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ Clob clob = rs1.getClob(2);
+
+ rs1.next();
+ rs1.updateClob(2,clob);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateClob method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ rs1.next();
+ InputStream is_ret = rs1.getAsciiStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes1.length;i++) {
+ assertEquals("Error in updateAsciiStream",bytes1[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateBlob
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+ public void embeddedUpdateBlob()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol Blob)");
+ //Initial set of bytes used to create the Binary Stream that has to
+ //be inserted
+ byte[] bytes1 = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the BinaryStream for the Blob
+ //that will be used in the updateBlob method
+ byte[] bytes2 = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //1 Input Stream for insertion
+ InputStream is1 = new java.io.ByteArrayInputStream(bytes1);
+
+ //2 Input Stream for insertion
+ InputStream is2 = new java.io.ByteArrayInputStream(bytes2);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+
+ //first insert
+ ps_sb.setInt(1,1);
+ ps_sb.setBinaryStream(2,is1,bytes1.length);
+ ps_sb.executeUpdate();
+
+ //second insert
+ ps_sb.setInt(1,2);
+ ps_sb.setBinaryStream(2,is2,bytes2.length);
+ ps_sb.executeUpdate();
+
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+ //we do not have set methods on Clob and Blob implemented
+ //So query the first Clob from the database
+ //update the second result set with this
+ //Clob value
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ Blob blob = rs1.getBlob(2);
+
+ rs1.next();
+ rs1.updateBlob(2,blob);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateBlob method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ rs1.next();
+ InputStream is_ret = rs1.getBinaryStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes1.length;i++) {
+ assertEquals("Error in updateBlob",bytes1[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateClob
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+ public void embeddedUpdateClobStringParameterName()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol Clob)");
+ //Initial set of bytes used to create the Ascii Stream for the Clob
+ //that has to be inserted
+ byte[] bytes1 = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the AsciiStream for the Clob
+ //that will be used in the updateClob method
+ byte[] bytes2 = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //1 Input Stream for insertion
+ InputStream is1 = new java.io.ByteArrayInputStream(bytes1);
+
+ //2 Input Stream for insertion
+ InputStream is2 = new java.io.ByteArrayInputStream(bytes2);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+
+ //first insert
+ ps_sb.setInt(1,1);
+ ps_sb.setAsciiStream(2,is1,bytes1.length);
+ ps_sb.executeUpdate();
+
+ //second insert
+ ps_sb.setInt(1,2);
+ ps_sb.setAsciiStream(2,is2,bytes2.length);
+ ps_sb.executeUpdate();
+
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+ //we do not have set methods on Clob and Blob implemented
+ //So query the first Clob from the database
+ //update the second result set with this
+ //Clob value
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ Clob clob = rs1.getClob(2);
+
+ rs1.next();
+ rs1.updateClob("datacol",clob);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateClob method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ rs1.next();
+ InputStream is_ret = rs1.getAsciiStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes1.length;i++) {
+ assertEquals("Error in updateAsciiStream",bytes1[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * This methods tests the ResultSet interface method
+ * updateBlob
+ *
+ * @throws SQLException if some error occurs while calling the method
+ */
+ public void embeddedUpdateBlobStringParameterName()
+ throws SQLException {
+ //create the table
+ stmt.execute("create table UpdateTestTable_ResultSet (sno int, " +
+ "datacol Blob)");
+ //Initial set of bytes used to create the Binary Stream that has to
+ //be inserted
+ byte[] bytes1 = new byte[] {
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x69, 0x68, 0x67, 0x66, 0x65
+ };
+
+ //Bytes that are used to create the BinaryStream for the Blob
+ //that will be used in the updateBlob method
+ byte[] bytes2 = new byte[] {
+ 0x69, 0x68, 0x67, 0x66, 0x65,
+ 0x65, 0x66, 0x67, 0x68, 0x69
+ };
+
+ //Byte array in which the returned bytes from
+ //the Database after the update are stored. This
+ //array is then checked to determine if it
+ //has the same elements of the Byte array used for
+ //the update operation
+
+ byte[] bytes_ret = new byte[10];
+
+ //1 Input Stream for insertion
+ InputStream is1 = new java.io.ByteArrayInputStream(bytes1);
+
+ //2 Input Stream for insertion
+ InputStream is2 = new java.io.ByteArrayInputStream(bytes2);
+
+ //Prepared Statement used to insert the data
+ PreparedStatement ps_sb = con.prepareStatement
+ ("insert into UpdateTestTable_ResultSet values(?,?)");
+
+ //first insert
+ ps_sb.setInt(1,1);
+ ps_sb.setBinaryStream(2,is1,bytes1.length);
+ ps_sb.executeUpdate();
+
+ //second insert
+ ps_sb.setInt(1,2);
+ ps_sb.setBinaryStream(2,is2,bytes2.length);
+ ps_sb.executeUpdate();
+
+ ps_sb.close();
+
+ //Update operation
+ //use a different ResultSet variable so that the
+ //other tests can go on unimpacted
+ //we do not have set methods on Clob and Blob implemented
+ //So query the first Clob from the database
+ //update the second result set with this
+ //Clob value
+
+ ResultSet rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet for update");
+ rs1.next();
+ Blob blob = rs1.getBlob(2);
+
+ rs1.next();
+ rs1.updateBlob("datacol",blob);
+ rs1.updateRow();
+ rs1.close();
+
+ //Query to see whether the data that has been updated
+ //using the updateBlob method is the same
+ //data that we expected
+
+ rs1 = stmt.executeQuery
+ ("select * from UpdateTestTable_ResultSet");
+ rs1.next();
+ rs1.next();
+ InputStream is_ret = rs1.getBinaryStream(2);
+
+ try {
+ is_ret.read(bytes_ret);
+ is_ret.close();
+ } catch(IOException ioe) {
+ fail("Error in the InputStream");
+ }
+
+ for(int i=0;i<bytes1.length;i++) {
+ assertEquals("Error in updateBlob",bytes1[i],bytes_ret[i]);
+ }
+ rs1.close();
+ //delete the table
+ stmt .execute("drop table UpdateTestTable_ResultSet");
+ }
+
+ /**
+ * Create suite containing client-only tests.
+ */
+ private static TestSuite clientSuite(String name) {
+ TestSuite clientSuite = new TestSuite(name);
+ return clientSuite;
+ }
+
+ /**
+ * Create suite containing embedded-only tests.
+ */
+ private static TestSuite embeddedSuite(String name) {
+ TestSuite embeddedSuite = new TestSuite(name);
+ embeddedSuite.addTest(new ResultSetTest(
+ "embeddedUpdateBlob"));
+ embeddedSuite.addTest(new ResultSetTest(
+ "embeddedUpdateClob"));
+ embeddedSuite.addTest(new ResultSetTest(
+ "embeddedUpdateBlobStringParameterName"));
+ embeddedSuite.addTest(new ResultSetTest(
+ "embeddedUpdateClobStringParameterName"));
+ return embeddedSuite;
+ }
+
public static Test suite() {
- return new TestSuite(ResultSetTest.class,
- "ResultSetTest suite");
+ TestSuite rsSuite =
+ new TestSuite(ResultSetTest.class, "ResultSetTest suite");
+ // Add client only tests
+ // NOTE: JCC is excluded
+ if (usingDerbyNetClient()) {
+ rsSuite.addTest(
+ clientSuite("ResultSetTest client-only suite"));
+ }
+ // Add embedded only tests
+ if (usingEmbedded()) {
+ rsSuite.addTest(
+ embeddedSuite("ResultSetTest embedded-only suite"));
+ }
+ return rsSuite;
}
}
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/UnsupportedVetter.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/UnsupportedVetter.java?rev=417548&r1=417547&r2=417548&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/UnsupportedVetter.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/UnsupportedVetter.java Tue Jun 27 11:26:28 2006
@@ -172,14 +172,17 @@
new MD( "registerOutParameter", new Class[] { int.class, int.class, String.class } ),
new MD( "setArray", new Class[] { int.class, java.sql.Array.class } ),
new MD( "setAsciiStream", new Class[] { String.class, java.io.InputStream.class, int.class } ),
+ new MD( "setAsciiStream", new Class[] { String.class, java.io.InputStream.class, long.class } ),
new MD( "setBigDecimal", new Class[] { String.class, java.math.BigDecimal.class } ),
new MD( "setBinaryStream", new Class[] { String.class, java.io.InputStream.class, int.class } ),
+ new MD( "setBinaryStream", new Class[] { String.class, java.io.InputStream.class, long.class } ),
new MD( "setBlob", new Class[] { String.class, java.io.InputStream.class, long.class } ),
new MD( "setBlob", new Class[] { String.class, Blob.class } ),
new MD( "setBoolean", new Class[] { String.class, boolean.class } ),
new MD( "setByte", new Class[] { String.class, byte.class } ),
new MD( "setBytes", new Class[] { String.class, byte[].class } ),
new MD( "setCharacterStream", new Class[] { String.class, java.io.Reader.class, int.class } ),
+ new MD( "setCharacterStream", new Class[] { String.class, java.io.Reader.class, long.class } ),
new MD( "setClob", new Class[] { String.class, java.io.Reader.class, long.class } ),
new MD( "setClob", new Class[] { String.class, Clob.class } ),
new MD( "setDate", new Class[] { String.class, java.sql.Date.class } ),
@@ -228,8 +231,14 @@
//
new FD( "updateBlob", new Class[] { int.class, Blob.class } ),
new FD( "updateBlob", new Class[] { String.class, Blob.class } ),
+ new FD( "updateBlob", new Class[] { int.class, InputStream.class ,long.class } ),
+ new FD( "updateBlob", new Class[] { String.class, InputStream.class ,long.class } ),
new FD( "updateClob", new Class[] { int.class, Clob.class } ),
new FD( "updateClob", new Class[] { String.class, Clob.class } ),
+ new FD( "updateClob", new Class[] { int.class, Reader.class ,long.class } ),
+ new FD( "updateClob", new Class[] { String.class, Reader.class ,long.class } ),
+ new FD( "updateNClob",new Class[] { int.class,Reader.class,long.class}),
+ new FD( "updateNClob",new Class[] { String.class,Reader.class,long.class}),
//