mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug fixed for sharedPreparedStatement
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
package com.alibaba.druid.bvt.pool;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.pool.DruidPooledPreparedStatement;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
public class PSCacheTest extends TestCase {
|
||||
|
||||
private DruidDataSource dataSource;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
dataSource = new DruidDataSource();
|
||||
dataSource.setUrl("jdbc:mock:x1");
|
||||
dataSource.setPoolPreparedStatements(true);
|
||||
dataSource.setMaxOpenPreparedStatements(10);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
JdbcUtils.close(dataSource);
|
||||
}
|
||||
|
||||
public void test_noTxn() throws Exception {
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
String sql = "select 1";
|
||||
|
||||
PreparedStatement stmt0 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt0 = (DruidPooledPreparedStatement) stmt0;
|
||||
stmt0.close();
|
||||
|
||||
PreparedStatement stmt1 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt1 = (DruidPooledPreparedStatement) stmt1;
|
||||
|
||||
Assert.assertEquals(1, pooledStmt1.getPreparedStatementHolder().getInUseCount());
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt0.getPreparedStatementHolder()); // same
|
||||
|
||||
PreparedStatement stmt2 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt2 = (DruidPooledPreparedStatement) stmt2;
|
||||
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt2.getPreparedStatementHolder()); // not same
|
||||
|
||||
stmt1.close();
|
||||
stmt2.close();
|
||||
|
||||
conn.close();
|
||||
}
|
||||
|
||||
public void test_txn() throws Exception {
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
conn.setAutoCommit(false);
|
||||
|
||||
String sql = "select 1";
|
||||
|
||||
PreparedStatement stmt0 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt0 = (DruidPooledPreparedStatement) stmt0;
|
||||
stmt0.close();
|
||||
|
||||
PreparedStatement stmt1 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt1 = (DruidPooledPreparedStatement) stmt1;
|
||||
|
||||
Assert.assertEquals(1, pooledStmt1.getPreparedStatementHolder().getInUseCount());
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt0.getPreparedStatementHolder()); // same
|
||||
|
||||
PreparedStatement stmt2 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt2 = (DruidPooledPreparedStatement) stmt2;
|
||||
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt2.getPreparedStatementHolder()); // not same
|
||||
|
||||
stmt1.close();
|
||||
stmt2.close();
|
||||
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.alibaba.druid.bvt.pool;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.pool.DruidPooledPreparedStatement;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
public class PSCacheTest1 extends TestCase {
|
||||
|
||||
private DruidDataSource dataSource;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
dataSource = new DruidDataSource();
|
||||
dataSource.setUrl("jdbc:mock:x1");
|
||||
dataSource.setPoolPreparedStatements(true);
|
||||
dataSource.setMaxOpenPreparedStatements(10);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
JdbcUtils.close(dataSource);
|
||||
}
|
||||
|
||||
public void test_noTxn() throws Exception {
|
||||
{
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
String sql = "select 1";
|
||||
|
||||
PreparedStatement stmt0 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt0 = (DruidPooledPreparedStatement) stmt0;
|
||||
stmt0.close();
|
||||
|
||||
PreparedStatement stmt1 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt1 = (DruidPooledPreparedStatement) stmt1;
|
||||
|
||||
Assert.assertEquals(1, pooledStmt1.getPreparedStatementHolder().getInUseCount());
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt0.getPreparedStatementHolder()); // same
|
||||
|
||||
PreparedStatement stmt2 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt2 = (DruidPooledPreparedStatement) stmt2;
|
||||
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt2.getPreparedStatementHolder()); // not
|
||||
// same
|
||||
|
||||
conn.close();
|
||||
}
|
||||
{
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
conn.setAutoCommit(false);
|
||||
|
||||
String sql = "select 1";
|
||||
|
||||
PreparedStatement stmt0 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt0 = (DruidPooledPreparedStatement) stmt0;
|
||||
stmt0.close();
|
||||
|
||||
PreparedStatement stmt1 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt1 = (DruidPooledPreparedStatement) stmt1;
|
||||
|
||||
Assert.assertEquals(1, pooledStmt1.getPreparedStatementHolder().getInUseCount());
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt0.getPreparedStatementHolder()); // same
|
||||
|
||||
PreparedStatement stmt2 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt2 = (DruidPooledPreparedStatement) stmt2;
|
||||
|
||||
Assert.assertNotSame(pooledStmt1.getPreparedStatementHolder(), pooledStmt2.getPreparedStatementHolder()); // not
|
||||
// same
|
||||
|
||||
stmt1.close();
|
||||
stmt2.close();
|
||||
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.alibaba.druid.bvt.pool;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.pool.DruidPooledPreparedStatement;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
public class PSCacheTest2 extends TestCase {
|
||||
|
||||
private DruidDataSource dataSource;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
dataSource = new DruidDataSource();
|
||||
dataSource.setUrl("jdbc:mock:x1");
|
||||
dataSource.setPoolPreparedStatements(true);
|
||||
dataSource.setMaxOpenPreparedStatements(10);
|
||||
dataSource.setSharePreparedStatements(true);
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
JdbcUtils.close(dataSource);
|
||||
}
|
||||
|
||||
public void test_0() throws Exception {
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
String sql = "select 1";
|
||||
|
||||
{
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt.close();
|
||||
}
|
||||
|
||||
PreparedStatement stmt0 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt0 = (DruidPooledPreparedStatement) stmt0;
|
||||
|
||||
Assert.assertEquals(1, pooledStmt0.getPreparedStatementHolder().getInUseCount());
|
||||
|
||||
PreparedStatement stmt1 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt1 = (DruidPooledPreparedStatement) stmt1;
|
||||
|
||||
Assert.assertSame(pooledStmt0.getPreparedStatementHolder(), pooledStmt1.getPreparedStatementHolder());
|
||||
|
||||
stmt0.close();
|
||||
stmt1.close();
|
||||
|
||||
conn.close();
|
||||
}
|
||||
|
||||
public void test_txn() throws Exception {
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
conn.setAutoCommit(true);
|
||||
|
||||
String sql = "select 1";
|
||||
|
||||
{
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
stmt.close();
|
||||
}
|
||||
|
||||
PreparedStatement stmt0 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt0 = (DruidPooledPreparedStatement) stmt0;
|
||||
|
||||
Assert.assertEquals(1, pooledStmt0.getPreparedStatementHolder().getInUseCount());
|
||||
|
||||
PreparedStatement stmt1 = conn.prepareStatement(sql);
|
||||
DruidPooledPreparedStatement pooledStmt1 = (DruidPooledPreparedStatement) stmt1;
|
||||
|
||||
Assert.assertSame(pooledStmt0.getPreparedStatementHolder(), pooledStmt1.getPreparedStatementHolder());
|
||||
|
||||
stmt0.close();
|
||||
stmt1.close();
|
||||
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user