From 777acbb34502adca987683aaa795a3fc98b56c2d Mon Sep 17 00:00:00 2001 From: Dave Cramer Date: Fri, 12 Dec 2003 18:05:34 +0000 Subject: [PATCH] fix casting pooled connections to PGStatement problem patch by JariP --- .../jdbc2/optional/PooledConnectionImpl.java | 8 +++--- .../jdbc2/optional/ConnectionPoolTest.java | 25 ++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java b/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java index 2a5190e0e6..687441fecf 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java @@ -14,7 +14,7 @@ import org.postgresql.PGConnection; * * @author Aaron Mulder (ammulder@chariotsolutions.com) * @author Csaba Nagy (ncsaba@yahoo.com) - * @version $Revision: 1.7 $ + * @version $Revision: 1.8 $ */ public class PooledConnectionImpl implements PooledConnection { @@ -266,17 +266,17 @@ public class PooledConnectionImpl implements PooledConnection else if(method.getName().equals("createStatement")) { Statement st = (Statement)method.invoke(con, args); - return Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{Statement.class}, new StatementHandler(this, st)); + return Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{Statement.class, org.postgresql.PGStatement.class}, new StatementHandler(this, st)); } else if(method.getName().equals("prepareCall")) { Statement st = (Statement)method.invoke(con, args); - return Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{CallableStatement.class}, new StatementHandler(this, st)); + return Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{CallableStatement.class, org.postgresql.PGStatement.class}, new StatementHandler(this, st)); } else if(method.getName().equals("prepareStatement")) { Statement st = (Statement)method.invoke(con, args); - return Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{PreparedStatement.class}, new StatementHandler(this, st)); + return Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{PreparedStatement.class, org.postgresql.PGStatement.class}, new StatementHandler(this, st)); } else { diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java index caac23d18b..d49f73c8be 100644 --- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java +++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java @@ -11,7 +11,7 @@ import java.sql.*; * interface to the PooledConnection is through the CPDS. * * @author Aaron Mulder (ammulder@chariotsolutions.com) - * @version $Revision: 1.7 $ + * @version $Revision: 1.8 $ */ public class ConnectionPoolTest extends BaseDataSourceTest { @@ -422,6 +422,29 @@ public class ConnectionPoolTest extends BaseDataSourceTest } } + /** + * Ensure that a statement created from a pool can be used + * like any other statement in regard to pg extensions. + */ + public void testStatementsProxyPGStatement() { + try { + PooledConnection pc = getPooledConnection(); + con = pc.getConnection(); + + Statement s = con.createStatement(); + boolean b = ((org.postgresql.PGStatement)s).isUseServerPrepare(); + + PreparedStatement ps = con.prepareStatement("select 'x'"); + b = ((org.postgresql.PGStatement)ps).isUseServerPrepare(); + + CallableStatement cs = con.prepareCall("select 'x'"); + b = ((org.postgresql.PGStatement)cs).isUseServerPrepare(); + + } catch (SQLException e) { + fail(e.getMessage()); + } + } + /** * Helper class to remove a listener during event dispatching. */