diff --git a/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java b/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java index b4c47875e7..1cf3434489 100644 --- a/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java +++ b/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java @@ -105,7 +105,7 @@ public class FilterChainImpl implements FilterChain { } // // if driver is for jdbc 3.0 - if (iface.isAssignableFrom(wrapper.getClass())) { + if (iface.isInstance(wrapper)) { return true; } diff --git a/src/main/java/com/alibaba/druid/mock/MockConnection.java b/src/main/java/com/alibaba/druid/mock/MockConnection.java index 7b0ebc1407..f0d4a38408 100644 --- a/src/main/java/com/alibaba/druid/mock/MockConnection.java +++ b/src/main/java/com/alibaba/druid/mock/MockConnection.java @@ -98,7 +98,7 @@ public class MockConnection extends ConnectionBase implements Connection { @SuppressWarnings("unchecked") @Override public T unwrap(Class iface) throws SQLException { - if (iface == MockConnection.class) { + if (iface.isInstance(this)) { return (T) this; } @@ -107,7 +107,7 @@ public class MockConnection extends ConnectionBase implements Connection { @Override public boolean isWrapperFor(Class iface) throws SQLException { - return iface == MockConnection.class; + return iface.isInstance(this); } @Override diff --git a/src/main/java/com/alibaba/druid/mock/MockDriver.java b/src/main/java/com/alibaba/druid/mock/MockDriver.java index 4dcc6710cd..2b1b562b08 100644 --- a/src/main/java/com/alibaba/druid/mock/MockDriver.java +++ b/src/main/java/com/alibaba/druid/mock/MockDriver.java @@ -234,6 +234,10 @@ public class MockDriver implements Driver, MockDriverMBean { public boolean jdbcCompliant() { return true; } + + public MockResultSet createMockResultSet(MockStatementBase stmt) { + return new MockResultSet(stmt); + } public ResultSet executeQuery(MockStatementBase stmt, String sql) throws SQLException { if (logExecuteQueryEnable && LOG.isDebugEnabled()) { @@ -252,7 +256,7 @@ public class MockDriver implements Driver, MockDriverMBean { handleSleep(conn); if ("SELECT value FROM _int_1000_".equalsIgnoreCase(sql)) { - MockResultSet rs = new MockResultSet(stmt); + MockResultSet rs = createMockResultSet(stmt); for (int i = 0; i < 1000; ++i) { rs.getRows().add(new Object[] { i }); diff --git a/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java b/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java index 14e4f0cc96..295341e262 100644 --- a/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java +++ b/src/main/java/com/alibaba/druid/mock/MockPreparedStatement.java @@ -50,6 +50,8 @@ public class MockPreparedStatement extends PreparedStatementBase implements Mock if (conn != null) { conn.handleSleep(); + + return conn.getDriver().createMockResultSet(this); } return new MockResultSet(this); diff --git a/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java b/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java index 805a7884b9..2afd376938 100644 --- a/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java +++ b/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java @@ -120,7 +120,7 @@ public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler { } public ResultSet executeQueryFromDual(MockStatementBase statement, SQLSelectQueryBlock query) throws SQLException { - MockResultSet rs = new MockResultSet(statement); + MockResultSet rs = statement.getConnection().getDriver().createMockResultSet(statement); MockResultSetMetaData metaData = rs.getMockMetaData(); Object[] row = new Object[query.getSelectList().size()]; diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java index 37a39161de..00404f0643 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java @@ -44,7 +44,6 @@ import com.alibaba.druid.filter.Filter; import com.alibaba.druid.filter.FilterChainImpl; import com.alibaba.druid.pool.DruidPooledPreparedStatement.PreparedStatementKey; import com.alibaba.druid.pool.PreparedStatementPool.MethodType; -import com.alibaba.druid.proxy.jdbc.ConnectionProxy; import com.alibaba.druid.proxy.jdbc.TransactionInfo; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; @@ -52,7 +51,7 @@ import com.alibaba.druid.support.logging.LogFactory; /** * @author wenshao */ -public class DruidPooledConnection implements javax.sql.PooledConnection, Connection { +public class DruidPooledConnection extends PoolableWrapper implements javax.sql.PooledConnection, Connection { private final static Log LOG = LogFactory.getLog(DruidPooledConnection.class); @@ -73,6 +72,8 @@ public class DruidPooledConnection implements javax.sql.PooledConnection, Connec private StackTraceElement[] connectStackTrace; public DruidPooledConnection(DruidConnectionHolder holder){ + super(holder.getConnection()); + this.conn = holder.getConnection(); this.holder = holder; dupCloseLogEnable = holder.getDataSource().isDupCloseLogEnable(); @@ -645,47 +646,6 @@ public class DruidPooledConnection implements javax.sql.PooledConnection, Connec return poolableStatement; } - // //////////////////// - - @SuppressWarnings("unchecked") - @Override - public T unwrap(Class iface) throws SQLException { - if (iface == null) { - return null; - } - - if (iface == Connection.class) { - if (conn instanceof ConnectionProxy) { - return conn.unwrap(iface); - } - - return (T) conn; - } - - if (iface.isInstance(conn)) { - return (T) conn; - } - - if (iface.isInstance(this)) { - return (T) this; - } - - return conn.unwrap(iface); - } - - @Override - public boolean isWrapperFor(Class iface) throws SQLException { - if (iface == null) { - return false; - } - - if (iface.isInstance(this)) { - return true; - } - - return conn.isWrapperFor(iface); - } - @Override public String nativeSQL(String sql) throws SQLException { checkState(); diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledPreparedStatement.java b/src/main/java/com/alibaba/druid/pool/DruidPooledPreparedStatement.java index 88cc47c7dd..0e77d11ce9 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledPreparedStatement.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledPreparedStatement.java @@ -38,7 +38,6 @@ import java.util.Arrays; import java.util.Calendar; import com.alibaba.druid.pool.PreparedStatementPool.MethodType; -import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.OracleUtils; @@ -1035,20 +1034,21 @@ public class DruidPooledPreparedStatement extends DruidPooledStatement implement } } - + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + if (iface == PreparedStatementHolder.class) { + return true; + } + + return super.isWrapperFor(iface); + } + @SuppressWarnings("unchecked") public T unwrap(Class iface) throws SQLException { - if (iface == PreparedStatement.class) { - if (stmt instanceof PreparedStatementProxy) { - return stmt.unwrap(iface); - } - return (T) stmt; - } - if (iface == PreparedStatementHolder.class) { - return (T) this.holder; + return (T) holder; } - return super.unwrap(iface); } } diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledResultSet.java b/src/main/java/com/alibaba/druid/pool/DruidPooledResultSet.java index 6c80236c7f..a8c0d61771 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledResultSet.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledResultSet.java @@ -33,8 +33,6 @@ import java.sql.SQLXML; import java.sql.Statement; import java.util.Calendar; -import com.alibaba.druid.proxy.jdbc.ResultSetProxy; - /** * @author wenshao */ @@ -1772,17 +1770,4 @@ public final class DruidPooledResultSet extends PoolableWrapper implements Resul public T getObject(String columnLabel, Class type) throws SQLException { throw new SQLFeatureNotSupportedException(); } - - @SuppressWarnings("unchecked") - public T unwrap(Class iface) throws SQLException { - if (iface == ResultSet.class) { - if (rs instanceof ResultSetProxy) { - return rs.unwrap(iface); - } - - return (T) rs; - } - - return super.unwrap(iface); - } } diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java b/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java index 7d5c243ec7..6a3498e5f6 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java @@ -24,7 +24,6 @@ import java.sql.Statement; import java.util.ArrayList; import java.util.List; -import com.alibaba.druid.proxy.jdbc.StatementProxy; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; @@ -628,16 +627,4 @@ public class DruidPooledStatement extends PoolableWrapper implements Statement { public boolean isCloseOnCompletion() throws SQLException { throw new SQLFeatureNotSupportedException(); } - - @SuppressWarnings("unchecked") - public T unwrap(Class iface) throws SQLException { - if (iface == Statement.class) { - if (stmt instanceof StatementProxy) { - return stmt.unwrap(iface); - } - return (T) stmt; - } - - return super.unwrap(iface); - } } diff --git a/src/main/java/com/alibaba/druid/pool/PoolableWrapper.java b/src/main/java/com/alibaba/druid/pool/PoolableWrapper.java index 579e7c4cf7..3b1a974d95 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableWrapper.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableWrapper.java @@ -18,6 +18,8 @@ package com.alibaba.druid.pool; import java.sql.SQLException; import java.sql.Wrapper; +import com.alibaba.druid.proxy.jdbc.WrapperProxy; + /** * @author wenshao */ @@ -35,13 +37,19 @@ public class PoolableWrapper implements Wrapper { return false; } - if (iface.isInstance(wrapper)) { + if (wrapper != null && iface == wrapper.getClass()) { return true; } - if (iface.isInstance(this)) { + if (iface == this.getClass()) { return true; } + + if (!(wrapper instanceof WrapperProxy)) { + if (iface.isInstance(wrapper)) { + return true; + } + } return wrapper.isWrapperFor(iface); } @@ -53,13 +61,20 @@ public class PoolableWrapper implements Wrapper { return null; } - if (iface.isInstance(wrapper)) { + if (wrapper != null && iface == wrapper.getClass()) { return (T) wrapper; } - if (iface.isInstance(this)) { + if (iface == this.getClass()) { return (T) this; } + + if (!(wrapper instanceof WrapperProxy)) { + if (iface.isInstance(wrapper)) { + return (T) wrapper; + } + } + return wrapper.unwrap(iface); } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java index 7f7eabd362..8ef50d705e 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java @@ -375,10 +375,10 @@ public class ConnectionProxyImpl extends WrapperProxyImpl implements ConnectionP @SuppressWarnings("unchecked") public T unwrap(Class iface) throws SQLException { - if (iface == Connection.class) { - return (T) connection; + if (iface == this.getClass() || iface == ConnectionProxy.class) { + return (T) this; } - + return super.unwrap(iface); } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java index e2fbb7ec55..ebf5d7dd8e 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java @@ -473,13 +473,4 @@ public class PreparedStatementProxyImpl extends StatementProxyImpl implements Pr public String getLastExecuteSql() { return this.sql; } - - @SuppressWarnings("unchecked") - public T unwrap(Class iface) throws SQLException { - if (iface == PreparedStatement.class) { - return (T) statement; - } - - return super.unwrap(iface); - } } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/ResultSetProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/ResultSetProxyImpl.java index ab54e36ada..0d54ca9c79 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/ResultSetProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/ResultSetProxyImpl.java @@ -1071,15 +1071,6 @@ public class ResultSetProxyImpl extends WrapperProxyImpl implements ResultSetPro throw new SQLFeatureNotSupportedException(); } - @SuppressWarnings("unchecked") - public T unwrap(Class iface) throws SQLException { - if (iface == ResultSet.class) { - return (T) resultSet; - } - - return super.unwrap(iface); - } - public int getCloseCount() { return closeCount; } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java index 9be747d2fa..9be7d4e91c 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java @@ -393,15 +393,6 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro throw new SQLFeatureNotSupportedException(); } - @SuppressWarnings("unchecked") - public T unwrap(Class iface) throws SQLException { - if (iface == Statement.class) { - return (T) statement; - } - - return super.unwrap(iface); - } - @Override public Map getParameters() { return Collections.emptyMap(); diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/WrapperProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/WrapperProxyImpl.java index abb042e003..4afc514d25 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/WrapperProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/WrapperProxyImpl.java @@ -54,7 +54,7 @@ public abstract class WrapperProxyImpl implements WrapperProxy { return false; } - if (iface.isInstance(this)) { + if (iface == this.getClass()) { return true; } @@ -67,8 +67,8 @@ public abstract class WrapperProxyImpl implements WrapperProxy { if (iface == null) { return null; } - - if (iface.isInstance(this)) { + + if (iface == this.getClass()) { return (T) this; } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestOraclePrefetch.java b/src/test/java/com/alibaba/druid/bvt/pool/TestOraclePrefetch.java index 1551fb74a3..c7b406c7af 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestOraclePrefetch.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestOraclePrefetch.java @@ -67,6 +67,7 @@ public class TestOraclePrefetch extends TestCase { oracleStmt = stmt.unwrap(OraclePreparedStatement.class); Assert.assertEquals(50, oracleStmt.getRowPrefetch()); + Assert.assertTrue(stmt.isWrapperFor(PreparedStatementHolder.class)); stmtHolder = stmt.unwrap(PreparedStatementHolder.class); Assert.assertNotNull(stmtHolder); Assert.assertEquals(0, stmtHolder.getHitCount()); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall2.java b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall2.java index 6e27447e37..68c89288fd 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall2.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall2.java @@ -23,6 +23,9 @@ import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; +import com.alibaba.druid.pool.DruidPooledPreparedStatement; +import com.alibaba.druid.pool.DruidPooledResultSet; import com.alibaba.druid.test.util.OracleMockDriver; import com.alibaba.druid.util.JdbcUtils; import com.alibaba.druid.wall.WallConfig; @@ -61,9 +64,39 @@ public class TestOracleWall2 extends TestCase { { Connection conn = dataSource.getConnection(); + Assert.assertTrue(conn.isWrapperFor(DruidPooledConnection.class)); + Assert.assertNotNull(conn.unwrap(DruidPooledConnection.class)); + + Assert.assertFalse(conn.isWrapperFor(oracle.jdbc.OracleConnection.class)); + Assert.assertNull(conn.unwrap(oracle.jdbc.OracleConnection.class)); + + Assert.assertFalse(conn.isWrapperFor(java.sql.Connection.class)); + Assert.assertNull(conn.unwrap(java.sql.Connection.class)); + + // ///////////// + PreparedStatement stmt = conn.prepareStatement(sql); + Assert.assertNull(stmt.unwrap(oracle.jdbc.OraclePreparedStatement.class)); + Assert.assertFalse(stmt.isWrapperFor(oracle.jdbc.OraclePreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(DruidPooledPreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(DruidPooledPreparedStatement.class)); + + Assert.assertFalse(stmt.isWrapperFor(java.sql.PreparedStatement.class)); + Assert.assertNull(stmt.unwrap(java.sql.PreparedStatement.class)); + ResultSet rs = stmt.executeQuery(); + + Assert.assertNull(rs.unwrap(oracle.jdbc.OracleResultSet.class)); + Assert.assertFalse(rs.isWrapperFor(oracle.jdbc.OracleResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(DruidPooledResultSet.class)); + Assert.assertNotNull(rs.unwrap(DruidPooledResultSet.class)); + + Assert.assertFalse(rs.isWrapperFor(java.sql.ResultSet.class)); + Assert.assertNull(rs.unwrap(java.sql.ResultSet.class)); + rs.next(); rs.close(); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall3.java b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall3.java new file mode 100644 index 0000000000..ffe3b2961e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWall3.java @@ -0,0 +1,123 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; +import com.alibaba.druid.pool.DruidPooledPreparedStatement; +import com.alibaba.druid.pool.DruidPooledResultSet; +import com.alibaba.druid.test.util.OracleMockDriver; +import com.alibaba.druid.util.JdbcUtils; +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallFilter; + +public class TestOracleWall3 extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + + WallFilter wall = new WallFilter(); + wall.setConfig(new WallConfig()); + wall.getConfig().setWrapAllow(true); + + dataSource.setOracle(true); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setDriver(new OracleMockDriver()); + dataSource.setPoolPreparedStatements(true); + dataSource.setConnectionProperties("defaultRowPrefetch=50"); + dataSource.setFilters("stat"); + dataSource.getProxyFilters().add(wall); + dataSource.setDbType("oracle"); + // dataSource.setFilters("log4j"); + } + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + } + + public void test_oracle() throws Exception { + + String sql = "SELECT 1"; + + { + Connection conn = dataSource.getConnection(); + + Assert.assertTrue(conn.isWrapperFor(DruidPooledConnection.class)); + Assert.assertNotNull(conn.unwrap(DruidPooledConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(oracle.jdbc.OracleConnection.class)); + Assert.assertNotNull(conn.unwrap(oracle.jdbc.OracleConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(java.sql.Connection.class)); + Assert.assertNotNull(conn.unwrap(java.sql.Connection.class)); + + // ///////////// + + PreparedStatement stmt = conn.prepareStatement(sql); + + Assert.assertNotNull(stmt.unwrap(oracle.jdbc.OraclePreparedStatement.class)); + Assert.assertTrue(stmt.isWrapperFor(oracle.jdbc.OraclePreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(DruidPooledPreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(DruidPooledPreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(java.sql.PreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(java.sql.PreparedStatement.class)); + + ResultSet rs = stmt.executeQuery(); + + Assert.assertNotNull(rs.unwrap(oracle.jdbc.OracleResultSet.class)); + Assert.assertTrue(rs.isWrapperFor(oracle.jdbc.OracleResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(DruidPooledResultSet.class)); + Assert.assertNotNull(rs.unwrap(DruidPooledResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(java.sql.ResultSet.class)); + Assert.assertNotNull(rs.unwrap(java.sql.ResultSet.class)); + + rs.next(); + + rs.close(); + stmt.close(); + conn.close(); + } + + for (int i = 0; i < 10; ++i) { + Connection conn = dataSource.getConnection(); + + PreparedStatement stmt = conn.prepareStatement(sql); + + ResultSet rs = stmt.executeQuery(); + rs.next(); + rs.close(); + stmt.close(); + + conn.close(); + } + + Assert.assertEquals(1, dataSource.getCachedPreparedStatementCount()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWallJdbc3.java b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWallJdbc3.java new file mode 100644 index 0000000000..debb55bcdd --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWallJdbc3.java @@ -0,0 +1,123 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; +import com.alibaba.druid.pool.DruidPooledPreparedStatement; +import com.alibaba.druid.pool.DruidPooledResultSet; +import com.alibaba.druid.test.util.OracleMockDriverJdbc3; +import com.alibaba.druid.util.JdbcUtils; +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallFilter; + +public class TestOracleWallJdbc3 extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + + WallFilter wall = new WallFilter(); + wall.setConfig(new WallConfig()); + wall.getConfig().setWrapAllow(true); + + dataSource.setOracle(true); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setDriver(new OracleMockDriverJdbc3()); + dataSource.setPoolPreparedStatements(true); + dataSource.setConnectionProperties("defaultRowPrefetch=50"); + dataSource.setFilters("stat"); + dataSource.getProxyFilters().add(wall); + dataSource.setDbType("oracle"); + // dataSource.setFilters("log4j"); + } + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + } + + public void test_oracle() throws Exception { + + String sql = "SELECT 1"; + + { + Connection conn = dataSource.getConnection(); + + Assert.assertTrue(conn.isWrapperFor(DruidPooledConnection.class)); + Assert.assertNotNull(conn.unwrap(DruidPooledConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(oracle.jdbc.OracleConnection.class)); + Assert.assertNotNull(conn.unwrap(oracle.jdbc.OracleConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(java.sql.Connection.class)); + Assert.assertNotNull(conn.unwrap(java.sql.Connection.class)); + + // ///////////// + + PreparedStatement stmt = conn.prepareStatement(sql); + + Assert.assertNotNull(stmt.unwrap(oracle.jdbc.OraclePreparedStatement.class)); + Assert.assertTrue(stmt.isWrapperFor(oracle.jdbc.OraclePreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(DruidPooledPreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(DruidPooledPreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(java.sql.PreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(java.sql.PreparedStatement.class)); + + ResultSet rs = stmt.executeQuery(); + + Assert.assertNotNull(rs.unwrap(oracle.jdbc.OracleResultSet.class)); + Assert.assertTrue(rs.isWrapperFor(oracle.jdbc.OracleResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(DruidPooledResultSet.class)); + Assert.assertNotNull(rs.unwrap(DruidPooledResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(java.sql.ResultSet.class)); + Assert.assertNotNull(rs.unwrap(java.sql.ResultSet.class)); + + rs.next(); + + rs.close(); + stmt.close(); + conn.close(); + } + + for (int i = 0; i < 10; ++i) { + Connection conn = dataSource.getConnection(); + + PreparedStatement stmt = conn.prepareStatement(sql); + + ResultSet rs = stmt.executeQuery(); + rs.next(); + rs.close(); + stmt.close(); + + conn.close(); + } + + Assert.assertEquals(1, dataSource.getCachedPreparedStatementCount()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWrap.java b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWrap.java new file mode 100644 index 0000000000..56fa984a26 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWrap.java @@ -0,0 +1,115 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; +import com.alibaba.druid.pool.DruidPooledPreparedStatement; +import com.alibaba.druid.pool.DruidPooledResultSet; +import com.alibaba.druid.test.util.OracleMockDriver; +import com.alibaba.druid.util.JdbcUtils; + +public class TestOracleWrap extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + + dataSource.setOracle(true); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setDriver(new OracleMockDriver()); + dataSource.setPoolPreparedStatements(true); + dataSource.setConnectionProperties("defaultRowPrefetch=50"); + dataSource.setDbType("oracle"); + // dataSource.setFilters("log4j"); + } + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + } + + public void test_oracle() throws Exception { + + String sql = "SELECT 1"; + + { + Connection conn = dataSource.getConnection(); + + Assert.assertTrue(conn.isWrapperFor(DruidPooledConnection.class)); + Assert.assertNotNull(conn.unwrap(DruidPooledConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(oracle.jdbc.OracleConnection.class)); + Assert.assertNotNull(conn.unwrap(oracle.jdbc.OracleConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(java.sql.Connection.class)); + Assert.assertNotNull(conn.unwrap(java.sql.Connection.class)); + + // ///////////// + + PreparedStatement stmt = conn.prepareStatement(sql); + + Assert.assertNotNull(stmt.unwrap(oracle.jdbc.OraclePreparedStatement.class)); + Assert.assertTrue(stmt.isWrapperFor(oracle.jdbc.OraclePreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(DruidPooledPreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(DruidPooledPreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(java.sql.PreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(java.sql.PreparedStatement.class)); + + ResultSet rs = stmt.executeQuery(); + + Assert.assertNotNull(rs.unwrap(oracle.jdbc.OracleResultSet.class)); + Assert.assertTrue(rs.isWrapperFor(oracle.jdbc.OracleResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(DruidPooledResultSet.class)); + Assert.assertNotNull(rs.unwrap(DruidPooledResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(java.sql.ResultSet.class)); + Assert.assertNotNull(rs.unwrap(java.sql.ResultSet.class)); + + rs.next(); + + rs.close(); + stmt.close(); + conn.close(); + } + + for (int i = 0; i < 10; ++i) { + Connection conn = dataSource.getConnection(); + + PreparedStatement stmt = conn.prepareStatement(sql); + + ResultSet rs = stmt.executeQuery(); + rs.next(); + rs.close(); + stmt.close(); + + conn.close(); + } + + Assert.assertEquals(1, dataSource.getCachedPreparedStatementCount()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWrap2.java b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWrap2.java new file mode 100644 index 0000000000..f77ed3acbe --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestOracleWrap2.java @@ -0,0 +1,115 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; +import com.alibaba.druid.pool.DruidPooledPreparedStatement; +import com.alibaba.druid.pool.DruidPooledResultSet; +import com.alibaba.druid.test.util.OracleMockDriverJdbc3; +import com.alibaba.druid.util.JdbcUtils; + +public class TestOracleWrap2 extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + + dataSource.setOracle(true); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setDriver(new OracleMockDriverJdbc3()); + dataSource.setPoolPreparedStatements(true); + dataSource.setConnectionProperties("defaultRowPrefetch=50"); + dataSource.setDbType("oracle"); + // dataSource.setFilters("log4j"); + } + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + } + + public void test_oracle() throws Exception { + + String sql = "SELECT 1"; + + { + Connection conn = dataSource.getConnection(); + + Assert.assertTrue(conn.isWrapperFor(DruidPooledConnection.class)); + Assert.assertNotNull(conn.unwrap(DruidPooledConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(oracle.jdbc.OracleConnection.class)); + Assert.assertNotNull(conn.unwrap(oracle.jdbc.OracleConnection.class)); + + Assert.assertTrue(conn.isWrapperFor(java.sql.Connection.class)); + Assert.assertNotNull(conn.unwrap(java.sql.Connection.class)); + + // ///////////// + + PreparedStatement stmt = conn.prepareStatement(sql); + + Assert.assertNotNull(stmt.unwrap(oracle.jdbc.OraclePreparedStatement.class)); + Assert.assertTrue(stmt.isWrapperFor(oracle.jdbc.OraclePreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(DruidPooledPreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(DruidPooledPreparedStatement.class)); + + Assert.assertTrue(stmt.isWrapperFor(java.sql.PreparedStatement.class)); + Assert.assertNotNull(stmt.unwrap(java.sql.PreparedStatement.class)); + + ResultSet rs = stmt.executeQuery(); + + Assert.assertNotNull(rs.unwrap(oracle.jdbc.OracleResultSet.class)); + Assert.assertTrue(rs.isWrapperFor(oracle.jdbc.OracleResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(DruidPooledResultSet.class)); + Assert.assertNotNull(rs.unwrap(DruidPooledResultSet.class)); + + Assert.assertTrue(rs.isWrapperFor(java.sql.ResultSet.class)); + Assert.assertNotNull(rs.unwrap(java.sql.ResultSet.class)); + + rs.next(); + + rs.close(); + stmt.close(); + conn.close(); + } + + for (int i = 0; i < 10; ++i) { + Connection conn = dataSource.getConnection(); + + PreparedStatement stmt = conn.prepareStatement(sql); + + ResultSet rs = stmt.executeQuery(); + rs.next(); + rs.close(); + stmt.close(); + + conn.close(); + } + + Assert.assertEquals(1, dataSource.getCachedPreparedStatementCount()); + + } +} diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockConnection.java b/src/test/java/com/alibaba/druid/test/util/OracleMockConnection.java index 51ae4aa95e..3a6b6867a4 100644 --- a/src/test/java/com/alibaba/druid/test/util/OracleMockConnection.java +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockConnection.java @@ -730,7 +730,7 @@ public class OracleMockConnection extends MockConnection implements oracle.jdbc. throw new MockConnectionClosedException(); } - return new OracleMockPreparedStatement(this, sql); + return this.getDriver().createMockPreparedStatement(this, sql); } @Override diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockConnectionJdbc3.java b/src/test/java/com/alibaba/druid/test/util/OracleMockConnectionJdbc3.java new file mode 100644 index 0000000000..4bb883af82 --- /dev/null +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockConnectionJdbc3.java @@ -0,0 +1,24 @@ +package com.alibaba.druid.test.util; + +import java.sql.SQLException; +import java.util.Properties; + +import com.alibaba.druid.mock.MockDriver; + + +public class OracleMockConnectionJdbc3 extends OracleMockConnection { + + public OracleMockConnectionJdbc3(MockDriver driver, String url, Properties connectProperties){ + super(driver, url, connectProperties); + } + + @Override + public T unwrap(Class iface) throws SQLException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + throw new UnsupportedOperationException(); + } +} diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockDriver.java b/src/test/java/com/alibaba/druid/test/util/OracleMockDriver.java index 044480f644..05b02d6e46 100644 --- a/src/test/java/com/alibaba/druid/test/util/OracleMockDriver.java +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockDriver.java @@ -19,7 +19,10 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; +import com.alibaba.druid.mock.MockConnection; import com.alibaba.druid.mock.MockDriver; +import com.alibaba.druid.mock.MockResultSet; +import com.alibaba.druid.mock.MockStatementBase; public class OracleMockDriver extends MockDriver { @@ -36,4 +39,12 @@ public class OracleMockDriver extends MockDriver { public int getMinorVersion() { return 0; } + + public MockResultSet createMockResultSet(MockStatementBase stmt) { + return new OracleMockResultSet(stmt); + } + + public OracleMockPreparedStatement createMockPreparedStatement(MockConnection conn, String sql) { + return new OracleMockPreparedStatement((OracleMockConnection) conn, sql); + } } diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockDriverJdbc3.java b/src/test/java/com/alibaba/druid/test/util/OracleMockDriverJdbc3.java new file mode 100644 index 0000000000..df747541bb --- /dev/null +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockDriverJdbc3.java @@ -0,0 +1,50 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.test.util; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Properties; + +import com.alibaba.druid.mock.MockConnection; +import com.alibaba.druid.mock.MockDriver; +import com.alibaba.druid.mock.MockResultSet; +import com.alibaba.druid.mock.MockStatementBase; + + +public class OracleMockDriverJdbc3 extends MockDriver { + public Connection connect(String url, Properties info) throws SQLException { + return new OracleMockConnectionJdbc3(this, url, info); + } + + @Override + public int getMajorVersion() { + return 10; + } + + @Override + public int getMinorVersion() { + return 0; + } + + public MockResultSet createMockResultSet(MockStatementBase stmt) { + return new OracleMockResultSetJdbc3(stmt); + } + + public OracleMockPreparedStatement createMockPreparedStatement(MockConnection conn, String sql) { + return new OracleMockPreparedStatementJdbc3((OracleMockConnection) conn, sql); + } +} diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockPreparedStatementJdbc3.java b/src/test/java/com/alibaba/druid/test/util/OracleMockPreparedStatementJdbc3.java new file mode 100644 index 0000000000..feb9fae76b --- /dev/null +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockPreparedStatementJdbc3.java @@ -0,0 +1,21 @@ +package com.alibaba.druid.test.util; + +import java.sql.SQLException; + + +public class OracleMockPreparedStatementJdbc3 extends OracleMockPreparedStatement { + + public OracleMockPreparedStatementJdbc3(OracleMockConnection conn, String sql){ + super(conn, sql); + } + + @Override + public T unwrap(Class iface) throws SQLException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + throw new UnsupportedOperationException(); + } +} diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockResultSet.java b/src/test/java/com/alibaba/druid/test/util/OracleMockResultSet.java new file mode 100644 index 0000000000..f78668b9bc --- /dev/null +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockResultSet.java @@ -0,0 +1,514 @@ +package com.alibaba.druid.test.util; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import oracle.jdbc.OracleResultSet; +import oracle.sql.ARRAY; +import oracle.sql.BFILE; +import oracle.sql.BLOB; +import oracle.sql.CHAR; +import oracle.sql.CLOB; +import oracle.sql.CustomDatum; +import oracle.sql.CustomDatumFactory; +import oracle.sql.DATE; +import oracle.sql.Datum; +import oracle.sql.INTERVALDS; +import oracle.sql.INTERVALYM; +import oracle.sql.NUMBER; +import oracle.sql.OPAQUE; +import oracle.sql.ORAData; +import oracle.sql.ORADataFactory; +import oracle.sql.RAW; +import oracle.sql.REF; +import oracle.sql.ROWID; +import oracle.sql.STRUCT; +import oracle.sql.TIMESTAMP; +import oracle.sql.TIMESTAMPLTZ; +import oracle.sql.TIMESTAMPTZ; + +import com.alibaba.druid.mock.MockResultSet; + + +public class OracleMockResultSet extends MockResultSet implements OracleResultSet { + + public OracleMockResultSet(Statement statement){ + super(statement); + } + + @Override + public ARRAY getARRAY(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ARRAY getARRAY(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public BFILE getBFILE(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public BFILE getBFILE(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public BLOB getBLOB(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public BLOB getBLOB(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public BFILE getBfile(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public BFILE getBfile(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CHAR getCHAR(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CHAR getCHAR(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CLOB getCLOB(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CLOB getCLOB(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultSet getCursor(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultSet getCursor(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CustomDatum getCustomDatum(int arg0, CustomDatumFactory arg1) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CustomDatum getCustomDatum(String arg0, CustomDatumFactory arg1) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public DATE getDATE(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public DATE getDATE(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public INTERVALDS getINTERVALDS(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public INTERVALDS getINTERVALDS(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public INTERVALYM getINTERVALYM(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public INTERVALYM getINTERVALYM(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public NUMBER getNUMBER(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public NUMBER getNUMBER(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public OPAQUE getOPAQUE(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public OPAQUE getOPAQUE(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ORAData getORAData(int arg0, ORADataFactory arg1) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ORAData getORAData(String arg0, ORADataFactory arg1) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Datum getOracleObject(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Datum getOracleObject(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public RAW getRAW(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public RAW getRAW(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public REF getREF(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public REF getREF(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ROWID getROWID(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ROWID getROWID(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public STRUCT getSTRUCT(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public STRUCT getSTRUCT(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public TIMESTAMP getTIMESTAMP(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public TIMESTAMP getTIMESTAMP(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public TIMESTAMPLTZ getTIMESTAMPLTZ(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public TIMESTAMPLTZ getTIMESTAMPLTZ(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public TIMESTAMPTZ getTIMESTAMPTZ(int arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public TIMESTAMPTZ getTIMESTAMPTZ(String arg0) throws SQLException { + // TODO Auto-generated method stub + return null; + } + + @Override + public void updateARRAY(int arg0, ARRAY arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateARRAY(String arg0, ARRAY arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateBFILE(int arg0, BFILE arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateBFILE(String arg0, BFILE arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateBLOB(int arg0, BLOB arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateBLOB(String arg0, BLOB arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateBfile(int arg0, BFILE arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateBfile(String arg0, BFILE arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateCHAR(int arg0, CHAR arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateCHAR(String arg0, CHAR arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateCLOB(int arg0, CLOB arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateCLOB(String arg0, CLOB arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateCustomDatum(int arg0, CustomDatum arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateCustomDatum(String arg0, CustomDatum arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateDATE(int arg0, DATE arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateDATE(String arg0, DATE arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateINTERVALDS(int arg0, INTERVALDS arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateINTERVALYM(int arg0, INTERVALYM arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateNUMBER(int arg0, NUMBER arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateNUMBER(String arg0, NUMBER arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateORAData(int arg0, ORAData arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateORAData(String arg0, ORAData arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateOracleObject(int arg0, Datum arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateOracleObject(String arg0, Datum arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateRAW(int arg0, RAW arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateRAW(String arg0, RAW arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateREF(int arg0, REF arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateREF(String arg0, REF arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateROWID(int arg0, ROWID arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateROWID(String arg0, ROWID arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateSTRUCT(int arg0, STRUCT arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateSTRUCT(String arg0, STRUCT arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateTIMESTAMP(int arg0, TIMESTAMP arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateTIMESTAMPLTZ(int arg0, TIMESTAMPLTZ arg1) throws SQLException { + // TODO Auto-generated method stub + + } + + @Override + public void updateTIMESTAMPTZ(int arg0, TIMESTAMPTZ arg1) throws SQLException { + // TODO Auto-generated method stub + + } + +} diff --git a/src/test/java/com/alibaba/druid/test/util/OracleMockResultSetJdbc3.java b/src/test/java/com/alibaba/druid/test/util/OracleMockResultSetJdbc3.java new file mode 100644 index 0000000000..a97164e921 --- /dev/null +++ b/src/test/java/com/alibaba/druid/test/util/OracleMockResultSetJdbc3.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.test.util; + +import java.sql.SQLException; +import java.sql.Statement; + + +public class OracleMockResultSetJdbc3 extends OracleMockResultSet { + + public OracleMockResultSetJdbc3(Statement statement){ + super(statement); + } + + @Override + public T unwrap(Class iface) throws SQLException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + throw new UnsupportedOperationException(); + } +}