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]