This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to tag REL7_4_1
in repository libpostgresql-jdbc-java.

commit 0fe5c1a42ddc9db3d397ad259384ae11fc77c7c7
Author: Dave Cramer <[email protected]>
Date:   Fri Dec 12 18:38:19 2003 +0000

    cancel row updates sets values to null by Kris Jurka
---
 org/postgresql/jdbc2/AbstractJdbc2ResultSet.java   | 13 ++--
 .../test/jdbc2/UpdateableResultTest.java           | 76 ++++++++++++++++++----
 2 files changed, 73 insertions(+), 16 deletions(-)

diff --git a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java 
b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
index 9d4a1d7..3ebd764 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
@@ -518,7 +518,7 @@ public abstract class AbstractJdbc2ResultSet extends 
org.postgresql.jdbc1.Abstra
                {
                        doingUpdates = false;
 
-                       clearRowBuffer();
+                       clearRowBuffer(true);
                }
        }
 
@@ -661,7 +661,7 @@ public abstract class AbstractJdbc2ResultSet extends 
org.postgresql.jdbc1.Abstra
                        this_row = rowBuffer;
 
                        // need to clear this in case of another insert
-                       clearRowBuffer();
+                       clearRowBuffer(false);
 
 
                }
@@ -706,7 +706,7 @@ public abstract class AbstractJdbc2ResultSet extends 
org.postgresql.jdbc1.Abstra
 
 
                // make sure the underlying data is null
-               clearRowBuffer();
+               clearRowBuffer(false);
 
                onInsertRow = true;
                doingUpdates = false;
@@ -714,12 +714,17 @@ public abstract class AbstractJdbc2ResultSet extends 
org.postgresql.jdbc1.Abstra
        }
 
 
-       private synchronized void clearRowBuffer()
+       private synchronized void clearRowBuffer(boolean copyCurrentRow)
        throws SQLException
        {
                // rowBuffer is the temporary storage for the row
                rowBuffer = new byte[fields.length][];
 
+               // inserts want an empty array while updates want a copy of the 
current row
+               if (copyCurrentRow) {
+                       System.arraycopy(this_row, 0, rowBuffer, 0, 
this_row.length);
+               }
+
                // clear the updateValues hashTable for the next set of updates
                updateValues.clear();
 
diff --git a/org/postgresql/test/jdbc2/UpdateableResultTest.java 
b/org/postgresql/test/jdbc2/UpdateableResultTest.java
index fcd6321..362f3ac 100644
--- a/org/postgresql/test/jdbc2/UpdateableResultTest.java
+++ b/org/postgresql/test/jdbc2/UpdateableResultTest.java
@@ -15,25 +15,79 @@ import org.postgresql.test.TestUtil;
 
 public class UpdateableResultTest extends TestCase
 {
+       private Connection con;
 
        public UpdateableResultTest( String name )
        {
                super( name );
        }
 
+       protected void setUp() throws Exception
+       {
+               con = TestUtil.openDB();
+               TestUtil.createTable(con, "updateable", "id int primary key, 
name text, notselected text");
+               TestUtil.createTable(con, "second", "id1 int primary key, name1 
text");
+
+               // put some dummy data into second
+               Statement st2 = con.createStatement();
+               st2.execute( "insert into second values (1,'anyvalue' )");
+               st2.close();
+               
+       }
+
+       protected void tearDown() throws Exception
+       {
+               TestUtil.dropTable(con, "updateable");
+               TestUtil.dropTable(con, "second");
+               TestUtil.closeDB(con);
+       }
+
+       public void testCancelRowUpdates() throws Exception
+       {
+               Statement st = con.createStatement( 
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
+               ResultSet rs = st.executeQuery( "select * from second");
+
+               // make sure we're dealing with the correct row.
+               rs.first();
+               assertEquals(1,rs.getInt(1));
+               assertEquals("anyvalue",rs.getString(2));
+
+               // update, cancel and make sure nothings changed.
+               rs.updateInt(1,99);
+               rs.cancelRowUpdates();
+               assertEquals(1,rs.getInt(1));
+               assertEquals("anyvalue",rs.getString(2));
+
+               // real update
+               rs.updateInt(1,999);
+               rs.updateRow();
+               assertEquals(999,rs.getInt(1));
+               assertEquals("anyvalue",rs.getString(2));
+
+               // scroll some and make sure the update is still there
+               rs.beforeFirst();
+               rs.next();
+               assertEquals(999,rs.getInt(1));
+               assertEquals("anyvalue",rs.getString(2));
+
+
+               // make sure the update got to the db and the driver isn't 
lying to us.
+               rs.close();
+               rs = st.executeQuery( "select * from second");
+               rs.first();
+               assertEquals(999,rs.getInt(1));
+               assertEquals("anyvalue",rs.getString(2));
+
+               rs.close();
+               st.close();
+       }
+
+
+
        public void testUpdateable()
        {
                try
                {
-                       Connection con = TestUtil.openDB();
-                       TestUtil.createTable(con, "updateable", "id int primary 
key, name text, notselected text");
-                       TestUtil.createTable(con, "second", "id1 int primary 
key, name1 text");
-
-                       // put some dummy data into second
-                       Statement st2 = con.createStatement();
-                       st2.execute( "insert into second values (1,'anyvalue' 
)");
-                       st2.close();
-
                        Statement st = con.createStatement( 
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
                        ResultSet rs = st.executeQuery( "select * from 
updateable");
                        assertNotNull( rs );
@@ -123,12 +177,10 @@ public class UpdateableResultTest extends TestCase
 
                        st.close();
 
-                       TestUtil.dropTable( con, "updateable" );
-                       TestUtil.dropTable( con, "second" );
-                       TestUtil.closeDB( con );
                }
                catch (Exception ex)
                {
+                       ex.printStackTrace();
                        fail(ex.getMessage());
                }
        }

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to