From 4787fe586fdb579765c8c4cbadfb0e9de9d024be Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 19 Sep 2011 03:17:54 +0000 Subject: [PATCH] =?UTF-8?q?FilterAdapter=E7=9A=84connection=5FcreateStatem?= =?UTF-8?q?ent=E4=BC=A0=E9=80=92=E5=8F=82=E6=95=B0=E5=87=BA=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@850 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/filter/FilterEventAdapter.java | 4 +- .../alibaba/druid/mock/MockConnection.java | 7 ++- .../com/alibaba/druid/mock/MockStatement.java | 31 +++++++++---- .../druid/proxy/jdbc/ConnectionProxyImpl.java | 4 +- .../druid/bvt/bug/Bug_for_happyday517.java | 44 +++++++++++++++++++ 5 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517.java diff --git a/src/main/java/com/alibaba/druid/filter/FilterEventAdapter.java b/src/main/java/com/alibaba/druid/filter/FilterEventAdapter.java index 301e5d5cdf..624b11159a 100644 --- a/src/main/java/com/alibaba/druid/filter/FilterEventAdapter.java +++ b/src/main/java/com/alibaba/druid/filter/FilterEventAdapter.java @@ -79,7 +79,7 @@ public abstract class FilterEventAdapter extends FilterAdapter { @Override public StatementProxy connection_createStatement(FilterChain chain, ConnectionProxy connection, int resultSetType, int resultSetConcurrency) throws SQLException { - StatementProxy statement = super.connection_createStatement(chain, connection, resultSetType, resultSetType); + StatementProxy statement = super.connection_createStatement(chain, connection, resultSetType, resultSetConcurrency); statementCreateAfter(statement); @@ -90,7 +90,7 @@ public abstract class FilterEventAdapter extends FilterAdapter { public StatementProxy connection_createStatement(FilterChain chain, ConnectionProxy connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { - StatementProxy statement = super.connection_createStatement(chain, connection, resultSetType, resultSetType, + StatementProxy statement = super.connection_createStatement(chain, connection, resultSetType, resultSetConcurrency, resultSetHoldability); statementCreateAfter(statement); diff --git a/src/main/java/com/alibaba/druid/mock/MockConnection.java b/src/main/java/com/alibaba/druid/mock/MockConnection.java index 8f86a8bcc7..e848a4e92d 100644 --- a/src/main/java/com/alibaba/druid/mock/MockConnection.java +++ b/src/main/java/com/alibaba/druid/mock/MockConnection.java @@ -246,7 +246,12 @@ public class MockConnection implements Connection { throw new MockConnectionClosedException(); } - return new MockStatement(this); + MockStatement stmt = new MockStatement(this); + + stmt.setResultSetType(resultSetType); + stmt.setResultSetConcurrency(resultSetConcurrency); + + return stmt; } @Override diff --git a/src/main/java/com/alibaba/druid/mock/MockStatement.java b/src/main/java/com/alibaba/druid/mock/MockStatement.java index 5283909c41..fbcec08ff4 100644 --- a/src/main/java/com/alibaba/druid/mock/MockStatement.java +++ b/src/main/java/com/alibaba/druid/mock/MockStatement.java @@ -25,7 +25,7 @@ public class MockStatement implements Statement { public final static String ERROR_SQL = "THROW ERROR"; - protected boolean closed = false; + protected boolean closed = false; private Connection connection; protected MockConnection mockConnection; @@ -39,6 +39,9 @@ public class MockStatement implements Statement { private int fetchDirection; private int fetchSize; + private int resultSetType; + private int resultSetConcurrency; + public MockStatement(Connection connection){ super(); this.connection = connection; @@ -48,6 +51,23 @@ public class MockStatement implements Statement { } } + public int getResultSetType() throws SQLException { + if (closed) { + throw new SQLException("stmt closed."); + } + + return resultSetType; + } + + public void setResultSetType(int resultType) { + this.resultSetType = resultType; + } + + public void setResultSetConcurrency(int resultSetConcurrency) { + this.resultSetConcurrency = resultSetConcurrency; + } + + public MockConnection getMockConnection() { return mockConnection; } @@ -300,16 +320,9 @@ public class MockStatement implements Statement { if (closed) { throw new SQLException("stmt closed."); } - return 0; + return resultSetConcurrency; } - @Override - public int getResultSetType() throws SQLException { - if (closed) { - throw new SQLException("stmt closed."); - } - return 0; - } @Override public void addBatch(String sql) throws SQLException { 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 585a02f82a..8583e00faf 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/ConnectionProxyImpl.java @@ -125,13 +125,13 @@ public class ConnectionProxyImpl extends WrapperProxyImpl implements ConnectionP @Override public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException { - return createChain().connection_createStatement(this, resultSetType, resultSetType); + return createChain().connection_createStatement(this, resultSetType, resultSetConcurrency); } @Override public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { - return createChain().connection_createStatement(this, resultSetType, resultSetType, resultSetHoldability); + return createChain().connection_createStatement(this, resultSetType, resultSetConcurrency, resultSetHoldability); } @Override diff --git a/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517.java b/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517.java new file mode 100644 index 0000000000..5119a24662 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_happyday517.java @@ -0,0 +1,44 @@ +package com.alibaba.druid.bvt.bug; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.mock.MockStatement; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.stat.DruidDataSourceStatManager; + +public class Bug_for_happyday517 extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setFilters("stat"); + + } + + protected void tearDown() throws Exception { + dataSource.close(); + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + } + + public void test_for_happyday517() throws Exception { + Connection conn = dataSource.getConnection(); + + Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); + + MockStatement mockStmt = stmt.unwrap(MockStatement.class); + + Assert.assertEquals(ResultSet.TYPE_SCROLL_SENSITIVE, mockStmt.getResultSetType()); + Assert.assertEquals(ResultSet.CONCUR_UPDATABLE, mockStmt.getResultSetConcurrency()); + + stmt.close(); + + conn.close(); + } +}