Commit 777acbb3 authored by Dave Cramer's avatar Dave Cramer

fix casting pooled connections to PGStatement problem patch by JariP

parent ef6a8043
...@@ -14,7 +14,7 @@ import org.postgresql.PGConnection; ...@@ -14,7 +14,7 @@ import org.postgresql.PGConnection;
* *
* @author Aaron Mulder (ammulder@chariotsolutions.com) * @author Aaron Mulder (ammulder@chariotsolutions.com)
* @author Csaba Nagy (ncsaba@yahoo.com) * @author Csaba Nagy (ncsaba@yahoo.com)
* @version $Revision: 1.7 $ * @version $Revision: 1.8 $
*/ */
public class PooledConnectionImpl implements PooledConnection public class PooledConnectionImpl implements PooledConnection
{ {
...@@ -266,17 +266,17 @@ public class PooledConnectionImpl implements PooledConnection ...@@ -266,17 +266,17 @@ public class PooledConnectionImpl implements PooledConnection
else if(method.getName().equals("createStatement")) else if(method.getName().equals("createStatement"))
{ {
Statement st = (Statement)method.invoke(con, args); 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")) else if(method.getName().equals("prepareCall"))
{ {
Statement st = (Statement)method.invoke(con, args); 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")) else if(method.getName().equals("prepareStatement"))
{ {
Statement st = (Statement)method.invoke(con, args); 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 else
{ {
......
...@@ -11,7 +11,7 @@ import java.sql.*; ...@@ -11,7 +11,7 @@ import java.sql.*;
* interface to the PooledConnection is through the CPDS. * interface to the PooledConnection is through the CPDS.
* *
* @author Aaron Mulder (ammulder@chariotsolutions.com) * @author Aaron Mulder (ammulder@chariotsolutions.com)
* @version $Revision: 1.7 $ * @version $Revision: 1.8 $
*/ */
public class ConnectionPoolTest extends BaseDataSourceTest public class ConnectionPoolTest extends BaseDataSourceTest
{ {
...@@ -422,6 +422,29 @@ 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. * Helper class to remove a listener during event dispatching.
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment