diff --git a/src/main/java/com/alibaba/druid/mock/MockConnection.java b/src/main/java/com/alibaba/druid/mock/MockConnection.java index e848a4e92d..5a81cb85d6 100644 --- a/src/main/java/com/alibaba/druid/mock/MockConnection.java +++ b/src/main/java/com/alibaba/druid/mock/MockConnection.java @@ -247,10 +247,10 @@ public class MockConnection implements Connection { } MockStatement stmt = new MockStatement(this); - + stmt.setResultSetType(resultSetType); stmt.setResultSetConcurrency(resultSetConcurrency); - + return stmt; } @@ -261,7 +261,12 @@ public class MockConnection implements Connection { throw new MockConnectionClosedException(); } - return new MockPreparedStatement(this, sql); + MockPreparedStatement stmt = new MockPreparedStatement(this, sql); + + stmt.setResultSetType(resultSetType); + stmt.setResultSetConcurrency(resultSetConcurrency); + + return stmt; } @Override @@ -270,7 +275,12 @@ public class MockConnection implements Connection { throw new MockConnectionClosedException(); } - return new MockCallableStatement(this, sql); + MockCallableStatement stmt = new MockCallableStatement(this, sql); + + stmt.setResultSetType(resultSetType); + stmt.setResultSetConcurrency(resultSetConcurrency); + + return stmt; } @Override @@ -330,7 +340,13 @@ public class MockConnection implements Connection { throw new MockConnectionClosedException(); } - return new MockStatement(this); + MockStatement stmt = new MockStatement(this); + + stmt.setResultSetType(resultSetType); + stmt.setResultSetConcurrency(resultSetConcurrency); + stmt.setResultSetHoldability(resultSetHoldability); + + return stmt; } @Override @@ -340,7 +356,13 @@ public class MockConnection implements Connection { throw new MockConnectionClosedException(); } - return new MockPreparedStatement(this, sql); + MockPreparedStatement stmt = new MockPreparedStatement(this, sql); + + stmt.setResultSetType(resultSetType); + stmt.setResultSetConcurrency(resultSetConcurrency); + stmt.setResultSetHoldability(resultSetHoldability); + + return stmt; } @Override @@ -350,7 +372,13 @@ public class MockConnection implements Connection { throw new MockConnectionClosedException(); } - return new MockCallableStatement(this, sql); + MockCallableStatement stmt = new MockCallableStatement(this, sql); + + stmt.setResultSetType(resultSetType); + stmt.setResultSetConcurrency(resultSetConcurrency); + stmt.setResultSetHoldability(resultSetHoldability); + + 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 fbcec08ff4..5589e67324 100644 --- a/src/main/java/com/alibaba/druid/mock/MockStatement.java +++ b/src/main/java/com/alibaba/druid/mock/MockStatement.java @@ -41,6 +41,7 @@ public class MockStatement implements Statement { private int resultSetType; private int resultSetConcurrency; + private int resultSetHoldability; public MockStatement(Connection connection){ super(); @@ -55,7 +56,7 @@ public class MockStatement implements Statement { if (closed) { throw new SQLException("stmt closed."); } - + return resultSetType; } @@ -66,7 +67,6 @@ public class MockStatement implements Statement { public void setResultSetConcurrency(int resultSetConcurrency) { this.resultSetConcurrency = resultSetConcurrency; } - public MockConnection getMockConnection() { return mockConnection; @@ -323,7 +323,6 @@ public class MockStatement implements Statement { return resultSetConcurrency; } - @Override public void addBatch(String sql) throws SQLException { if (closed) { @@ -423,7 +422,11 @@ public class MockStatement implements Statement { if (closed) { throw new SQLException("stmt closed."); } - return 0; + return resultSetHoldability; + } + + public void setResultSetHoldability(int resultSetHoldability) { + this.resultSetHoldability = 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 index 5119a24662..7fdd80e1b8 100644 --- 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 @@ -18,7 +18,7 @@ public class Bug_for_happyday517 extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); - dataSource.setFilters("stat"); + dataSource.setFilters("stat,trace,log"); } @@ -27,10 +27,77 @@ public class Bug_for_happyday517 extends TestCase { Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); } - public void test_for_happyday517() throws Exception { + public void test_for_happyday517_0() 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(); + } + + public void test_for_happyday517_1() throws Exception { + Connection conn = dataSource.getConnection(); + + Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, + ResultSet.CLOSE_CURSORS_AT_COMMIT); + + MockStatement mockStmt = stmt.unwrap(MockStatement.class); + + Assert.assertEquals(ResultSet.TYPE_SCROLL_SENSITIVE, mockStmt.getResultSetType()); + Assert.assertEquals(ResultSet.CONCUR_UPDATABLE, mockStmt.getResultSetConcurrency()); + Assert.assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, mockStmt.getResultSetHoldability()); + + stmt.close(); + + conn.close(); + } + + public void test_for_happyday517_2() throws Exception { + Connection conn = dataSource.getConnection(); + + String sql = "select 1"; + Statement stmt = conn.prepareStatement(sql, 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(); + } + + public void test_for_happyday517_3() throws Exception { + Connection conn = dataSource.getConnection(); + + String sql = "select 1"; + Statement stmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, + ResultSet.CLOSE_CURSORS_AT_COMMIT); + + MockStatement mockStmt = stmt.unwrap(MockStatement.class); + + Assert.assertEquals(ResultSet.TYPE_SCROLL_SENSITIVE, mockStmt.getResultSetType()); + Assert.assertEquals(ResultSet.CONCUR_UPDATABLE, mockStmt.getResultSetConcurrency()); + Assert.assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, mockStmt.getResultSetHoldability()); + + stmt.close(); + + conn.close(); + } + + public void test_for_happyday517_4() throws Exception { Connection conn = dataSource.getConnection(); - Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); + String sql = "select 1"; + Statement stmt = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); MockStatement mockStmt = stmt.unwrap(MockStatement.class); @@ -38,7 +105,25 @@ public class Bug_for_happyday517 extends TestCase { Assert.assertEquals(ResultSet.CONCUR_UPDATABLE, mockStmt.getResultSetConcurrency()); stmt.close(); - + + conn.close(); + } + + public void test_for_happyday517_5() throws Exception { + Connection conn = dataSource.getConnection(); + + String sql = "select 1"; + Statement stmt = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, + ResultSet.CLOSE_CURSORS_AT_COMMIT); + + MockStatement mockStmt = stmt.unwrap(MockStatement.class); + + Assert.assertEquals(ResultSet.TYPE_SCROLL_SENSITIVE, mockStmt.getResultSetType()); + Assert.assertEquals(ResultSet.CONCUR_UPDATABLE, mockStmt.getResultSetConcurrency()); + Assert.assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, mockStmt.getResultSetHoldability()); + + stmt.close(); + conn.close(); } }