From 1dd5fd75769a63b409466b7bf7ff067ab84755f2 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 19 Sep 2011 04:58:43 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E6=97=B6=E9=97=B4=E7=9B=B4?= =?UTF-8?q?=E6=96=B9=E5=9B=BE?= 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@855 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/PoolableCallableStatement.java | 4 +-- .../druid/pool/PoolableConnection.java | 18 ++++++------- .../druid/pool/PoolablePreparedStatement.java | 21 ++++++++++++++- .../alibaba/druid/pool/PoolableStatement.java | 26 ++++++++++++++++++- .../basic/PoolableCallableStatementTest.java | 2 +- .../basic/PoolablePreparedStatementTest.java | 2 +- .../pool/basic/PreparedStatementKeyTest.java | 2 +- 7 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/PoolableCallableStatement.java b/src/main/java/com/alibaba/druid/pool/PoolableCallableStatement.java index 108958dd10..180751210e 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableCallableStatement.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableCallableStatement.java @@ -36,8 +36,8 @@ public class PoolableCallableStatement extends PoolablePreparedStatement impleme private CallableStatement stmt; - public PoolableCallableStatement(PoolableConnection conn, CallableStatement stmt, PreparedStatementKey key){ - super(conn, stmt, key); + public PoolableCallableStatement(PoolableConnection conn, CallableStatement stmt, PreparedStatementKey key, String sql){ + super(conn, stmt, key, sql); this.stmt = stmt; } diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index f3974a6278..1690dafe80 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -173,7 +173,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key); + PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -208,7 +208,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key); + PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -242,7 +242,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key); + PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -274,7 +274,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key); + PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -306,7 +306,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key); + PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -338,7 +338,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key); + PreparedStatement rtnVal = new PoolablePreparedStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -373,7 +373,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key); + CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -406,7 +406,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key); + CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key, sql); holder.addTrace(rtnVal); @@ -439,7 +439,7 @@ public class PoolableConnection implements PooledConnection, Connection { holder.getDataSource().initStatement(stmt); - CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key); + CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key, sql); holder.addTrace(rtnVal); return rtnVal; diff --git a/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java b/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java index 9e5da21d17..aa860dacf4 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java +++ b/src/main/java/com/alibaba/druid/pool/PoolablePreparedStatement.java @@ -45,11 +45,18 @@ public class PoolablePreparedStatement extends PoolableStatement implements Prep private PreparedStatement stmt; private final PreparedStatementKey key; + private final String sql; - public PoolablePreparedStatement(PoolableConnection conn, PreparedStatement stmt, PreparedStatementKey key){ + public PoolablePreparedStatement(PoolableConnection conn, PreparedStatement stmt, PreparedStatementKey key, + String sql){ super(conn, stmt); this.stmt = stmt; this.key = key; + this.sql = sql; + } + + public String getSql() { + return sql; } public PreparedStatementKey getKey() { @@ -84,6 +91,8 @@ public class PoolablePreparedStatement extends PoolableStatement implements Prep @Override public ResultSet executeQuery() throws SQLException { checkOpen(); + + transactionRecord(sql); try { ResultSet rs = stmt.executeQuery(); @@ -100,6 +109,8 @@ public class PoolablePreparedStatement extends PoolableStatement implements Prep @Override public int executeUpdate() throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.executeUpdate(); @@ -332,6 +343,8 @@ public class PoolablePreparedStatement extends PoolableStatement implements Prep @Override public boolean execute() throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.execute(); @@ -350,6 +363,12 @@ public class PoolablePreparedStatement extends PoolableStatement implements Prep throw checkException(t); } } + + public int[] executeBatch() throws SQLException { + transactionRecord(sql); + + return super.executeBatch(); + } @Override public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException { diff --git a/src/main/java/com/alibaba/druid/pool/PoolableStatement.java b/src/main/java/com/alibaba/druid/pool/PoolableStatement.java index 1893049d1d..9f7be3f324 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableStatement.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableStatement.java @@ -83,6 +83,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final ResultSet executeQuery(String sql) throws SQLException { checkOpen(); + + transactionRecord(sql); try { ResultSet rs = stmt.executeQuery(sql); @@ -96,9 +98,17 @@ public class PoolableStatement extends PoolableWrapper implements Statement { } } + protected void transactionRecord(String sql) { + if (conn.getTransactionInfo() != null) { + conn.getTransactionInfo().getSqlList().add(sql); + } + } + @Override public final int executeUpdate(String sql) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.executeUpdate(sql); @@ -356,6 +366,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final void addBatch(String sql) throws SQLException { checkOpen(); + + transactionRecord(sql); try { stmt.addBatch(sql); @@ -376,7 +388,7 @@ public class PoolableStatement extends PoolableWrapper implements Statement { } @Override - public final int[] executeBatch() throws SQLException { + public int[] executeBatch() throws SQLException { checkOpen(); try { @@ -424,6 +436,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.executeUpdate(sql, autoGeneratedKeys); @@ -435,6 +449,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final int executeUpdate(String sql, int columnIndexes[]) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.executeUpdate(sql, columnIndexes); @@ -446,6 +462,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final int executeUpdate(String sql, String columnNames[]) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.executeUpdate(sql, columnNames); @@ -457,6 +475,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final boolean execute(String sql, int autoGeneratedKeys) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.execute(sql, autoGeneratedKeys); @@ -468,6 +488,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final boolean execute(String sql, int columnIndexes[]) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.execute(sql, columnIndexes); @@ -479,6 +501,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final boolean execute(String sql, String columnNames[]) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.execute(sql, columnNames); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolableCallableStatementTest.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolableCallableStatementTest.java index dafaea6841..95b285deb4 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolableCallableStatementTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolableCallableStatementTest.java @@ -26,7 +26,7 @@ public class PoolableCallableStatementTest extends TestCase { protected void setUp() throws Exception { raw = new MockCallableStatement(null, null); - stmt = new PoolableCallableStatement(null, raw, null) { + stmt = new PoolableCallableStatement(null, raw, null, null) { protected SQLException checkException(Throwable error) throws SQLException { if (error instanceof SQLException) { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolablePreparedStatementTest.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolablePreparedStatementTest.java index ac62ffeb2f..acf06475a4 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolablePreparedStatementTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/PoolablePreparedStatementTest.java @@ -22,7 +22,7 @@ public class PoolablePreparedStatementTest extends TestCase { protected void setUp() throws Exception { raw = new MockPreparedStatement(null, null); - stmt = new PoolablePreparedStatement(null, raw, null) { + stmt = new PoolablePreparedStatement(null, raw, null, null) { protected SQLException checkException(Throwable error) throws SQLException { if (error instanceof SQLException) { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/PreparedStatementKeyTest.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/PreparedStatementKeyTest.java index f44313dfcf..1c1f28389f 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/PreparedStatementKeyTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/PreparedStatementKeyTest.java @@ -96,7 +96,7 @@ public class PreparedStatementKeyTest extends TestCase { public void test_contains() throws Exception { PreparedStatementKey k1 = new PreparedStatementKey("x1", "c1", MethodType.M1); PreparedStatementPool pool = new PreparedStatementPool(); - pool.put(new PoolablePreparedStatement(null, null, k1)); + pool.put(new PoolablePreparedStatement(null, null, k1, null)); Assert.assertTrue(pool.get(k1) != null); Assert.assertTrue(pool.get(k1) == null); }