diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java b/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java index f6717f71b6..50996d22b5 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java @@ -12,7 +12,7 @@ import java.lang.reflect.*; * @see ConnectionPool * * @author Aaron Mulder (ammulder@chariotsolutions.com) - * @version $Revision: 1.4 $ + * @version $Revision: 1.5 $ */ public class PooledConnectionImpl implements PooledConnection { @@ -204,7 +204,14 @@ public class PooledConnectionImpl implements PooledConnection return Boolean.FALSE; } } - return method.invoke(con, args); + try + { + return method.invoke(con, args); + } + catch (InvocationTargetException e) + { + throw e.getTargetException(); + } } // All the rest is from the Connection interface if (method.getName().equals("isClosed")) @@ -355,7 +362,14 @@ public class PooledConnectionImpl implements PooledConnection } else { - return method.invoke(st, args); + try + { + return method.invoke(st, args); + } + catch (InvocationTargetException e) + { + throw e.getTargetException(); + } } } } 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 06f455ea3c..da467bc22f 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.4 $ + * @version $Revision: 1.5 $ */ public class ConnectionPoolTest extends BaseDataSourceTest { @@ -359,6 +359,70 @@ public class ConnectionPoolTest extends BaseDataSourceTest } } + /** + * Ensures that the Statement proxy generated by the Connection handle + * throws the correct kind of exception. + */ + public void testStatementProxy() { + Statement s = null; + try + { + PooledConnection pc = getPooledConnection(); + Connection con = pc.getConnection(); + s = con.createStatement(); + } + catch (SQLException e) + { + fail(e.getMessage()); + } + try + { + s.executeQuery("SELECT * FROM THIS_TABLE_SHOULD_NOT_EXIST"); + fail("An SQL exception was not thrown that should have been"); + } + catch (SQLException e) + { + ; // This is the expected and correct path + } + catch (Exception e) + { + fail("bad exception; was expecting SQLException, not" + + e.getClass().getName()); + } + } + + /** + * Ensures that the Statement proxy generated by the Connection handle + * throws the correct kind of exception. + */ + public void testStatementProxy() { + Statement s = null; + try + { + PooledConnection pc = getPooledConnection(); + Connection con = pc.getConnection(); + s = con.createStatement(); + } + catch (SQLException e) + { + fail(e.getMessage()); + } + try + { + s.executeQuery("SELECT * FROM THIS_TABLE_SHOULD_NOT_EXIST"); + fail("An SQL exception was not thrown that should have been"); + } + catch (SQLException e) + { + ; // This is the expected and correct path + } + catch (Exception e) + { + fail("bad exception; was expecting SQLException, not" + + e.getClass().getName()); + } + } + /** * Ensures that a prepared statement generated by a proxied connection * returns the proxied connection from getConnection() [not the physical