[libpostgresql-jdbc-java] 11/19: cancel row updates sets values to null by Kris Jurka
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:19:08 UTC 2017
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 <davec at fastcrypt.com>
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
More information about the pkg-java-commits
mailing list