You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2013/12/09 22:19:17 UTC

svn commit: r1549685 - in /commons/proper/dbcp/trunk/src: changes/ java/org/apache/commons/dbcp2/ test/org/apache/commons/dbcp2/

Author: markt
Date: Mon Dec  9 21:19:17 2013
New Revision: 1549685

URL: http://svn.apache.org/r1549685
Log:
Fix DBCP-347
Correct implementation of DelegatingStatement.isWrapperFor(). Also fix DelegatingDatabaseMetaData.isWrapperFor() and DelegatingResultSet.isWrapperFor() that had the same problem.
Based on a patch by Robert Poskrobek

Modified:
    commons/proper/dbcp/trunk/src/changes/changes.xml
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingResultSet.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingStatement.java
    commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestDelegatingStatement.java

Modified: commons/proper/dbcp/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/changes/changes.xml?rev=1549685&r1=1549684&r2=1549685&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/changes/changes.xml (original)
+++ commons/proper/dbcp/trunk/src/changes/changes.xml Mon Dec  9 21:19:17 2013
@@ -100,6 +100,11 @@ The <action> type attribute can be add,u
         Correct implementation of DelegatingConnection.isWrapperFor() so it
         works correctly with older JDBC drivers.
       </action>
+      <action dev="markt" issue="DBCP-347" type="fix" due-to="Robert Poskrobek">
+        Correct implementation of DelegatingStatement.isWrapperFor(). Also fix
+        DelegatingDatabaseMetaData.isWrapperFor() and
+        DelegatingResultSet.isWrapperFor() that had the same problem.
+      </action>
     </release>
     <release version="1.4.1" date="TBD" description="TBD">
       <action dev="psteitz" issue="DBCP-334" type="update" due-to="Alberto Mozzone">

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java?rev=1549685&r1=1549684&r2=1549685&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingDatabaseMetaData.java Mon Dec  9 21:19:17 2013
@@ -1287,7 +1287,13 @@ public class DelegatingDatabaseMetaData 
 
     @Override
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
-        return iface.isAssignableFrom(getClass()) || _meta.isWrapperFor(iface);
+        if (iface.isAssignableFrom(getClass())) {
+            return true;
+        } else if (iface.isAssignableFrom(_meta.getClass())) {
+            return true;
+        } else {
+            return _meta.isWrapperFor(iface);
+        }
     }
 
     @Override

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingResultSet.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingResultSet.java?rev=1549685&r1=1549684&r2=1549685&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingResultSet.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingResultSet.java Mon Dec  9 21:19:17 2013
@@ -775,7 +775,13 @@ public class DelegatingResultSet extends
 
     @Override
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
-        return iface.isAssignableFrom(getClass()) || _res.isWrapperFor(iface);
+        if (iface.isAssignableFrom(getClass())) {
+            return true;
+        } else if (iface.isAssignableFrom(_res.getClass())) {
+            return true;
+        } else {
+            return _res.isWrapperFor(iface);
+        }
     }
 
     @Override

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingStatement.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingStatement.java?rev=1549685&r1=1549684&r2=1549685&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingStatement.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingStatement.java Mon Dec  9 21:19:17 2013
@@ -495,7 +495,13 @@ public class DelegatingStatement extends
 
     @Override
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
-        return iface.isAssignableFrom(getClass()) || _stmt.isWrapperFor(iface);
+        if (iface.isAssignableFrom(getClass())) {
+            return true;
+        } else if (iface.isAssignableFrom(_stmt.getClass())) {
+            return true;
+        } else {
+            return _stmt.isWrapperFor(iface);
+        }
     }
 
     @Override

Modified: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestDelegatingStatement.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestDelegatingStatement.java?rev=1549685&r1=1549684&r2=1549685&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestDelegatingStatement.java (original)
+++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestDelegatingStatement.java Mon Dec  9 21:19:17 2013
@@ -17,6 +17,7 @@
 
 package org.apache.commons.dbcp2;
 
+import java.lang.reflect.Proxy;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -108,4 +109,33 @@ public class TestDelegatingStatement ext
             // expected
         }
     }
+    
+    public void testIsWrapperFor() throws Exception {
+        TesterConnection tstConn = new TesterConnection("test", "test");
+        TesterStatement tstStmt = new TesterStatementNonWrapping(tstConn);
+        DelegatingConnection<TesterConnection> conn = new DelegatingConnection<>(tstConn);
+        DelegatingStatement stmt = new DelegatingStatement(conn, tstStmt);
+
+        Class<?> stmtProxyClass = Proxy.getProxyClass(
+                this.getClass().getClassLoader(), 
+                Statement.class);
+        
+        assertTrue(stmt.isWrapperFor(DelegatingStatement.class));
+        assertTrue(stmt.isWrapperFor(TesterStatement.class));
+        assertFalse(stmt.isWrapperFor(stmtProxyClass));
+        
+        stmt.close();
+    }
+    
+    private static class TesterStatementNonWrapping extends TesterStatement {
+
+        public TesterStatementNonWrapping(Connection conn) {
+            super(conn);
+        }
+     
+        @Override
+        public boolean isWrapperFor(Class<?> iface) throws SQLException {
+            return false;
+        }
+    }
 }