aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java20
-rw-r--r--src/interfaces/jdbc/org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java66
2 files changed, 82 insertions, 4 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java b/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java
index f6717f71b61..50996d22b54 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 06f455ea3c7..da467bc22f5 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
{
@@ -360,6 +360,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
* connection].