postgresql-jdbc.git / summary / log / commit / refs
commit bd1eef1b0ed0ad12e14a0f4d8b680fb752fa90a0
Author: Kris Jurka <books@ejurka.com>
Date: Fri Aug 12 18:21:11 2005 +0000
Every execution of a Statement clears the warning chain from the
previous execution. This was causing a memory leak by endlessly
chaining warnings together that should have been discarded.
Report and analysis by Albe Laurenz.
org/postgresql/jdbc2/AbstractJdbc2Statement.java | 8 +++++++-
org/postgresql/test/jdbc2/BatchExecuteTest.java | 14 +++++++++++++-
org/postgresql/test/jdbc2/StatementTest.java | 15 +++++++++++++--
3 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/org/postgresql/jdbc2/AbstractJdbc2Statement.java b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
index 4b3626e2..2bf9908b 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2Statement.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v 1.80 2005/08/01 06:54:14 oliver Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v 1.81 2005/08/12 17:43:28 jurka Exp $
*
*-------------------------------------------------------------------------
*/
@@ -394,6 +394,9 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
}
protected void execute(Query queryToExecute, ParameterList queryParameters, int flags) throws SQLException {
+ // Every statement execution clears any previous warnings.
+ clearWarnings();
+
// Close any existing resultsets associated with this statement.
while (firstUnclosedResult != null)
{
@@ -2467,6 +2470,9 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
{
checkClosed();
+ // Every statement execution clears any previous warnings.
+ clearWarnings();
+
if (batchStatements == null || batchStatements.isEmpty())
return new int[0];
diff --git a/org/postgresql/test/jdbc2/BatchExecuteTest.java b/org/postgresql/test/jdbc2/BatchExecuteTest.java
index 90c15fa6..61746274 100644
--- a/org/postgresql/test/jdbc2/BatchExecuteTest.java
+++ b/org/postgresql/test/jdbc2/BatchExecuteTest.java
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/BatchExecuteTest.java,v 1.12 2005/01/11 08:25:48 jurka Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/BatchExecuteTest.java,v 1.13 2005/07/04 18:50:29 davec Exp $
*
*-------------------------------------------------------------------------
*/
@@ -246,4 +246,16 @@ public class BatchExecuteTest extends TestCase
stmt.close();
}
+
+ public void testWarningsAreCleared() throws SQLException
+ {
+ Statement stmt = con.createStatement();
+ stmt.addBatch("CREATE TEMP TABLE unused (a int primary key)");
+ stmt.executeBatch();
+ // Execute an empty batch to clear warnings.
+ stmt.executeBatch();
+ assertNull(stmt.getWarnings());
+ stmt.close();
+ }
+
}
diff --git a/org/postgresql/test/jdbc2/StatementTest.java b/org/postgresql/test/jdbc2/StatementTest.java
index 44ad2e68..781dc26a 100644
--- a/org/postgresql/test/jdbc2/StatementTest.java
+++ b/org/postgresql/test/jdbc2/StatementTest.java
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/StatementTest.java,v 1.14 2005/01/18 21:33:18 oliver Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/StatementTest.java,v 1.15 2005/01/27 11:30:48 jurka Exp $
*
*-------------------------------------------------------------------------
*/
@@ -306,5 +306,16 @@ public class StatementTest extends TestCase
assertEquals(TestUtil.getDatabase(),rs.getString(1));
}
}
-
+
+ public void testWarningsAreCleared() throws SQLException
+ {
+ Statement stmt = con.createStatement();
+ // Will generate a NOTICE: for primary key index creation
+ stmt.execute("CREATE TEMP TABLE unused (a int primary key)");
+ stmt.executeQuery("SELECT 1");
+ // Executing another query should clear the warning from the first one.
+ assertNull(stmt.getWarnings());
+ stmt.close();
+ }
+
}
[parent: b97bc3f469f3]