From 8a273600a53318167ffc2de85e51ac0eee9b39c8 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 19 Aug 2012 16:41:29 +0800 Subject: [PATCH] add testcase --- .../alibaba/druid/filter/FilterChainImpl.java | 24 +++++- .../bvt/filter/FilterChainTest_ResultSet.java | 83 ++++++++++++++++++ .../filter/FilterChainTest_ResultSet_2.java | 85 +++++++++++++++++++ 3 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet_2.java diff --git a/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java b/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java index c6e9e48f20..cd6e886221 100644 --- a/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java +++ b/src/main/java/com/alibaba/druid/filter/FilterChainImpl.java @@ -972,6 +972,10 @@ public class FilterChainImpl implements FilterChain { Object obj = resultSet.getResultSetRaw().getObject(columnIndex); + if (obj instanceof ResultSet) { + return wrap(resultSet.getStatementProxy(), (ResultSet) obj); + } + if (obj instanceof Clob) { return wrap(resultSet.getStatementProxy().getConnectionProxy(), (Clob) obj); } @@ -987,6 +991,10 @@ public class FilterChainImpl implements FilterChain { Object obj = resultSet.getResultSetRaw().getObject(columnLabel); + if (obj instanceof ResultSet) { + return wrap(resultSet.getStatementProxy(), (ResultSet) obj); + } + if (obj instanceof Clob) { return wrap(resultSet.getStatementProxy().getConnectionProxy(), (Clob) obj); } @@ -1640,6 +1648,10 @@ public class FilterChainImpl implements FilterChain { Object obj = resultSet.getResultSetRaw().getObject(columnIndex, map); + if (obj instanceof ResultSet) { + return wrap(resultSet.getStatementProxy(), (ResultSet) obj); + } + if (obj instanceof Clob) { return wrap(resultSet.getStatementProxy().getConnectionProxy(), (Clob) obj); } @@ -1691,9 +1703,13 @@ public class FilterChainImpl implements FilterChain { if (this.pos < filterSize) { return nextFilter().resultSet_getObject(this, resultSet, columnLabel, map); } - + Object obj = resultSet.getResultSetRaw().getObject(columnLabel, map); + if (obj instanceof ResultSet) { + return wrap(resultSet.getStatementProxy(), (ResultSet) obj); + } + if (obj instanceof Clob) { return wrap(resultSet.getStatementProxy().getConnectionProxy(), (Clob) obj); } @@ -3416,7 +3432,7 @@ public class FilterChainImpl implements FilterChain { if (obj instanceof ResultSet) { return wrap(statement, (ResultSet) obj); } - + if (obj instanceof Clob) { return wrap(statement.getConnectionProxy(), (Clob) obj); } @@ -3436,7 +3452,7 @@ public class FilterChainImpl implements FilterChain { if (obj instanceof ResultSet) { return wrap(statement, (ResultSet) obj); } - + if (obj instanceof Clob) { return wrap(statement.getConnectionProxy(), (Clob) obj); } @@ -4458,7 +4474,7 @@ public class FilterChainImpl implements FilterChain { if (clob == null) { return null; } - + if (clob instanceof NClob) { return wrap(connection, (NClob) clob); } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet.java b/src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet.java new file mode 100644 index 0000000000..c6f4a766d0 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet.java @@ -0,0 +1,83 @@ +package com.alibaba.druid.bvt.filter; + +import java.sql.Clob; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collections; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.filter.FilterChainImpl; +import com.alibaba.druid.mock.MockResultSet; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.proxy.jdbc.ResultSetProxy; +import com.alibaba.druid.proxy.jdbc.ResultSetProxyImpl; +import com.alibaba.druid.proxy.jdbc.StatementProxy; +import com.alibaba.druid.proxy.jdbc.StatementProxyImpl; +import com.alibaba.druid.util.JdbcUtils; + +public class FilterChainTest_ResultSet extends TestCase { + + private DruidDataSource dataSource; + private StatementProxy statement; + private MockResultSet mockResultSet; + + private int invokeCount = 0; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + statement = new StatementProxyImpl(null, null, 1); + + mockResultSet = new MockResultSet(null) { + + public Object getObject(int columnIndex) throws SQLException { + invokeCount++; + return new MockResultSet(null); + } + }; + } + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + + invokeCount = 0; + } + + public void test_resultSet_getObject() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.resultSet_getObject(new ResultSetProxyImpl(statement, mockResultSet, 1, null), 1); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } + + public void test_resultSet_getObject_1() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.resultSet_getObject(new ResultSetProxyImpl(statement, mockResultSet, 1, null), "1"); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } + + public void test_resultSet_getObject_2() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.resultSet_getObject(new ResultSetProxyImpl(statement, mockResultSet, 1, null), 1, Collections.>emptyMap()); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } + + public void test_resultSet_getObject_3() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.resultSet_getObject(new ResultSetProxyImpl(statement, mockResultSet, 1, null), "1", Collections.>emptyMap()); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet_2.java b/src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet_2.java new file mode 100644 index 0000000000..77caeae871 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/FilterChainTest_ResultSet_2.java @@ -0,0 +1,85 @@ +package com.alibaba.druid.bvt.filter; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collections; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.filter.FilterChainImpl; +import com.alibaba.druid.mock.MockCallableStatement; +import com.alibaba.druid.mock.MockResultSet; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.proxy.jdbc.CallableStatementProxy; +import com.alibaba.druid.proxy.jdbc.CallableStatementProxyImpl; +import com.alibaba.druid.proxy.jdbc.ClobProxy; +import com.alibaba.druid.proxy.jdbc.ResultSetProxy; +import com.alibaba.druid.util.JdbcUtils; + +public class FilterChainTest_ResultSet_2 extends TestCase { + + private DruidDataSource dataSource; + private CallableStatementProxy statement; + + private int invokeCount = 0; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + + MockCallableStatement mockStmt = new MockCallableStatement(null, "") { + + @Override + public Object getObject(int parameterIndex) throws SQLException { + invokeCount++; + return new MockResultSet(null); + } + }; + + statement = new CallableStatementProxyImpl(null, mockStmt, "", 1); + + } + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + + invokeCount = 0; + } + + public void test_getObject() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.callableStatement_getObject(statement, 1); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } + + public void test_getObject_1() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.callableStatement_getObject(statement, "1"); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } + + public void test_getObject_2() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.callableStatement_getObject(statement, 1, Collections.> emptyMap()); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } + + public void test_getObject_3() throws Exception { + FilterChainImpl chain = new FilterChainImpl(dataSource); + + ResultSet clob = (ResultSet) chain.callableStatement_getObject(statement, "1", Collections.> emptyMap()); + + Assert.assertTrue(clob instanceof ResultSetProxy); + Assert.assertEquals(1, invokeCount); + } +}