Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Fix resultset results after updateBinaryStream



Hi,

The current UpdateableResultSet tests did not properly test more complex binary data updating.
The following patch makes the test a bit harder and fixes the driver to pass the test.

Index: org/postgresql/test/jdbc2/UpdateableResultTest.java
===================================================================
RCS file: /usr/local/cvsroot/pgjdbc/pgjdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java,v
retrieving revision 1.24
diff -u -r1.24 UpdateableResultTest.java
--- org/postgresql/test/jdbc2/UpdateableResultTest.java	16 Apr 2007 16:36:41 -0000	1.24
+++ org/postgresql/test/jdbc2/UpdateableResultTest.java	20 Jul 2007 22:28:21 -0000
@@ -10,6 +10,8 @@
 package org.postgresql.test.jdbc2;
 
 import java.sql.*;
+import java.util.Arrays;
+
 import junit.framework.TestCase;
 
 import java.io.InputStream;
@@ -238,25 +240,26 @@
         String string = "Hello";
         InputStream asi = new ByteArrayInputStream(string.getBytes("US-ASCII"));
         Reader chr = new StringReader(string);
-        InputStream bin = new ByteArrayInputStream(string.getBytes("US-ASCII"));
+        byte[] bytes = new byte[]{0,'\\',(byte) 128,(byte) 255};
+        InputStream bin = new ByteArrayInputStream(bytes);
 
         rs.updateInt("id", 2);
         rs.updateAsciiStream("asi", asi, 5);
         rs.updateCharacterStream("chr", chr, 5);
-        rs.updateBinaryStream("bin", bin, 5);
+        rs.updateBinaryStream("bin", bin, bytes.length);
         rs.updateRow();
 
         assertEquals(2, rs.getInt(1));
         assertEquals(string, rs.getString(2));
         assertEquals(string, rs.getString(3));
-        assertEquals(string, rs.getString(4));
+        assertEquals("Got wrong bytes immediately after update", Arrays.toString(bytes), Arrays.toString(rs.getBytes(4)));
 
         rs.refreshRow();
 
         assertEquals(2, rs.getInt(1));
         assertEquals(string, rs.getString(2));
         assertEquals(string, rs.getString(3));
-        assertEquals(string, rs.getString(4));
+        assertEquals("Got wrong bytes from database", Arrays.toString(bytes), Arrays.toString(rs.getBytes(4)));
 
         rs.close();
         stmt.close();
Index: org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
===================================================================
RCS file: /usr/local/cvsroot/pgjdbc/pgjdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java,v
retrieving revision 1.94
diff -u -r1.94 AbstractJdbc2ResultSet.java
--- org/postgresql/jdbc2/AbstractJdbc2ResultSet.java	16 Apr 2007 16:36:41 -0000	1.94
+++ org/postgresql/jdbc2/AbstractJdbc2ResultSet.java	20 Jul 2007 22:28:21 -0000
@@ -1205,6 +1205,7 @@
 
         if ( rs.next() )
         {
+            System.arraycopy(rs.fields, 0, fields, 0, numColumns);
             rowBuffer = rs.rowBuffer;
         }
 
@@ -1657,6 +1658,7 @@
         {
             String columnName = (String) columns.next();
             int columnIndex = findColumn( columnName ) - 1;
+            fields[columnIndex].setFormat(Field.TEXT_FORMAT);
 
             Object valueObject = updateValues.get(columnName);
             if (valueObject instanceof NullObject)
@@ -1709,6 +1711,13 @@
                     // Should never happen?
                     break;
 
+                case Types.BINARY:
+                case Types.LONGVARBINARY:
+                case Types.VARBINARY:
+                    fields[columnIndex].setFormat(Field.BINARY_FORMAT);
+                    rowBuffer[columnIndex] = (byte[]) valueObject;
+                    break;
+ 
                 default:
                     rowBuffer[columnIndex] = (byte[]) valueObject;
                 }





Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group