This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to tag REL7_3_2 in repository libpostgresql-jdbc-java.
commit 27daf5ae6065e56cc8e2d58d76987b543988508e Author: Barry Lind <[email protected]> Date: Wed Nov 20 07:54:27 2002 +0000 Backport bug with executeBatch. This bug was a regression from 7.2 and has been reported by Marko Strukelj and Keith Wannamaker Modified Files: Tag: REL7_3_STABLE jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java jdbc/org/postgresql/test/jdbc2/BatchExecuteTest.java --- org/postgresql/jdbc1/AbstractJdbc1Statement.java | 2 +- org/postgresql/jdbc2/AbstractJdbc2Statement.java | 40 +++++++++++++++++++++--- org/postgresql/test/jdbc2/BatchExecuteTest.java | 12 +++++-- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/org/postgresql/jdbc1/AbstractJdbc1Statement.java b/org/postgresql/jdbc1/AbstractJdbc1Statement.java index 6f08ebd..c107a8c 100644 --- a/org/postgresql/jdbc1/AbstractJdbc1Statement.java +++ b/org/postgresql/jdbc1/AbstractJdbc1Statement.java @@ -47,7 +47,7 @@ public abstract class AbstractJdbc1Statement implements org.postgresql.PGStateme private String[] m_origSqlFragments; private String[] m_executeSqlFragments; protected Object[] m_binds = new Object[0]; - private String[] m_bindTypes = new String[0]; + protected String[] m_bindTypes = new String[0]; private String m_statementName = null; private boolean m_useServerPrepare = false; private static int m_preparedCount = 1; diff --git a/org/postgresql/jdbc2/AbstractJdbc2Statement.java b/org/postgresql/jdbc2/AbstractJdbc2Statement.java index 4815950..a77fc50 100644 --- a/org/postgresql/jdbc2/AbstractJdbc2Statement.java +++ b/org/postgresql/jdbc2/AbstractJdbc2Statement.java @@ -59,7 +59,8 @@ public abstract class AbstractJdbc2Statement extends org.postgresql.jdbc1.Abstra { if (batch == null) batch = new Vector(); - batch.addElement(p_sql); + Object[] l_statement = new Object[] {new String[] {p_sql}, new Object[0], new String[0]}; + batch.addElement(l_statement); } public void clearBatch() throws SQLException @@ -76,8 +77,25 @@ public abstract class AbstractJdbc2Statement extends org.postgresql.jdbc1.Abstra int i = 0; try { - for (i = 0;i < size;i++) - result[i] = this.executeUpdate((String)batch.elementAt(i)); + //copy current state of statement + String[] l_origSqlFragments = m_sqlFragments; + Object[] l_origBinds = m_binds; + String[] l_origBindTypes = m_bindTypes; + + for (i = 0;i < size;i++) { + //set state from batch + Object[] l_statement = (Object[])batch.elementAt(i); + this.m_sqlFragments = (String[])l_statement[0]; + this.m_binds = (Object[])l_statement[1]; + this.m_bindTypes = (String[])l_statement[2]; + result[i] = this.executeUpdate(); + } + + //restore state of statement + String[] m_sqlFragments = l_origSqlFragments; + Object[] m_binds = l_origBinds; + String[] m_bindTypes = l_origBindTypes; + } catch (SQLException e) { @@ -150,7 +168,21 @@ public abstract class AbstractJdbc2Statement extends org.postgresql.jdbc1.Abstra public void addBatch() throws SQLException { - addBatch(this.toString()); + if (batch == null) + batch = new Vector(); + + //we need to create copies, otherwise the values can be changed + Object[] l_newSqlFragments = null; + if (m_sqlFragments != null) { + l_newSqlFragments = new String[m_sqlFragments.length]; + System.arraycopy(m_sqlFragments,0,l_newSqlFragments,0,m_sqlFragments.length); + } + Object[] l_newBinds = new String[m_binds.length]; + System.arraycopy(m_binds,0,l_newBinds,0,m_binds.length); + String[] l_newBindTypes = new String[m_bindTypes.length]; + System.arraycopy(m_bindTypes,0,l_newBindTypes,0,m_bindTypes.length); + Object[] l_statement = new Object[] {l_newSqlFragments, l_newBinds, l_newBindTypes}; + batch.addElement(l_statement); } public java.sql.ResultSetMetaData getMetaData() throws SQLException diff --git a/org/postgresql/test/jdbc2/BatchExecuteTest.java b/org/postgresql/test/jdbc2/BatchExecuteTest.java index 1c25692..e7f27ed 100644 --- a/org/postgresql/test/jdbc2/BatchExecuteTest.java +++ b/org/postgresql/test/jdbc2/BatchExecuteTest.java @@ -157,11 +157,19 @@ public class BatchExecuteTest extends TestCase pstmt.executeBatch(); assertCol1HasValue(7); - con.commit(); + //now test to see that we can still use the statement after the execute + pstmt.setInt(1, 3); + pstmt.addBatch(); assertCol1HasValue(7); + pstmt.executeBatch(); + assertCol1HasValue(10); + + con.commit(); + assertCol1HasValue(10); + con.rollback(); - assertCol1HasValue(7); + assertCol1HasValue(10); pstmt.close(); } -- 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

