From e2ad5816e2edc9eca4fdd74fc0a214c256e1815a Mon Sep 17 00:00:00 2001
From: Dave Cramer <davec@fastcrypt.com>
Date: Fri, 20 Dec 2002 14:10:34 +0000
Subject: [PATCH] mike beachy's patch for statement handling

---
 .../jdbc2/optional/PooledConnectionImpl.java  | 20 +++++-
 .../jdbc2/optional/ConnectionPoolTest.java    | 66 ++++++++++++++++++-
 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
 {
@@ -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
-- 
GitLab