Author: psteitz Date: Sun Oct 29 13:48:02 2006 New Revision: 469008 URL: http://svn.apache.org/viewvc?view=rev&rev=469008 Log: Added tests and fixed errors remaining in DelegatingConnection, PoolGuardConnectionWrapper equals implementations. JIRA: DBCP-198
Modified: jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/DelegatingConnection.java jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/PoolingDataSource.java jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestDelegatingConnection.java jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestPoolingDataSource.java Modified: jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/DelegatingConnection.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/DelegatingConnection.java?view=diff&rev=469008&r1=469007&r2=469008 ============================================================================== --- jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/DelegatingConnection.java (original) +++ jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/DelegatingConnection.java Sun Oct 29 13:48:02 2006 @@ -120,15 +120,30 @@ public Connection getDelegate() { return _conn; } + + public boolean innermostDelegateEquals(Connection c) { + Connection innerCon = getInnermostDelegate(); + if (innerCon == null) { + return c == null; + } else { + return innerCon.equals(c); + } + } public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj == this) { + return true; + } Connection delegate = getInnermostDelegate(); if (delegate == null) { return false; } - if (obj instanceof DelegatingConnection) { + if (obj instanceof DelegatingConnection) { DelegatingConnection c = (DelegatingConnection) obj; - return delegate.equals(c.getInnermostDelegate()); + return c.innermostDelegateEquals(delegate); } else { return delegate.equals(obj); Modified: jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/PoolingDataSource.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/PoolingDataSource.java?view=diff&rev=469008&r1=469007&r2=469008 ============================================================================== --- jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/PoolingDataSource.java (original) +++ jakarta/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/PoolingDataSource.java Sun Oct 29 13:48:02 2006 @@ -209,25 +209,15 @@ return delegate.createStatement(resultSetType, resultSetConcurrency); } - - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (obj == this) { - return true; - } - if (delegate == null) { - return false; - } - if (obj instanceof PoolGuardConnectionWrapper) { - PoolGuardConnectionWrapper w = (PoolGuardConnectionWrapper) obj; - return delegate.equals(w.delegate); + public boolean innermostDelegateEquals(Connection c) { + Connection innerCon = super.getInnermostDelegate(); + if (innerCon == null) { + return c == null; } else { - return delegate.equals(obj); + return innerCon.equals(c); } } - + public boolean getAutoCommit() throws SQLException { checkOpen(); return delegate.getAutoCommit(); @@ -263,6 +253,27 @@ return 0; } return delegate.hashCode(); + } + + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj == this) { + return true; + } + // Use superclass accessor to skip access test + Connection delegate = super.getInnermostDelegate(); + if (delegate == null) { + return false; + } + if (obj instanceof DelegatingConnection) { + DelegatingConnection c = (DelegatingConnection) obj; + return c.innermostDelegateEquals(delegate); + } + else { + return delegate.equals(obj); + } } public boolean isReadOnly() throws SQLException { Modified: jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestDelegatingConnection.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestDelegatingConnection.java?view=diff&rev=469008&r1=469007&r2=469008 ============================================================================== --- jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestDelegatingConnection.java (original) +++ jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestDelegatingConnection.java Sun Oct 29 13:48:02 2006 @@ -77,6 +77,7 @@ assertTrue(!conn.equals(null)); assertTrue(conn.equals(conn2)); assertTrue(!conn.equals(conn3)); + assertTrue(conn.equals(conn)); } public void testCheckOpen() throws Exception { Modified: jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestPoolingDataSource.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestPoolingDataSource.java?view=diff&rev=469008&r1=469007&r2=469008 ============================================================================== --- jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestPoolingDataSource.java (original) +++ jakarta/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestPoolingDataSource.java Sun Oct 29 13:48:02 2006 @@ -143,6 +143,18 @@ con1.close(); } + public void testestPoolGuardConnectionWrapperEqualInnermost() throws Exception { + ds.setAccessToUnderlyingConnectionAllowed(true); + DelegatingConnection con = (DelegatingConnection) ds.getConnection(); + Connection inner = con.getInnermostDelegate(); + ds.setAccessToUnderlyingConnectionAllowed(false); + DelegatingConnection con2 = new DelegatingConnection(inner); + assertTrue(con2.equals(con)); + assertTrue(con.innermostDelegateEquals(con2.getInnermostDelegate())); + assertTrue(con2.innermostDelegateEquals(inner)); + assertTrue(con.equals(con2)); + } + /** Factory to return non-delegating connections for DBCP-198 test */ private class NonDelegatingPoolableConnectionFactory extends PoolableConnectionFactory { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]