From d27e97f126491dca9c4dd35ecf6bf528ab7a840c Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 14 Jun 2013 15:52:47 +0800 Subject: [PATCH] support reset filters --- .../druid/pool/DruidAbstractDataSource.java | 10 +++- .../druid/bvt/filter/ClearFilterTest.java | 22 +++++++ .../java/com/alibaba/druid/pool/MemTest.java | 57 +++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/ClearFilterTest.java create mode 100644 src/test/java/com/alibaba/druid/pool/MemTest.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index f7d1266512..847a54f009 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -1158,6 +1158,14 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements } public void setFilters(String filters) throws SQLException { + if (filters != null && filters.startsWith("!")) { + filters = filters.substring(1); + this.clearFilters(); + } + this.addFilters(filters); + } + + public void addFilters(String filters) throws SQLException { if (filters == null || filters.length() == 0) { return; } @@ -1166,7 +1174,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements for (String item : filterArray) { FilterManager.loadFilter(this.filters, item); - } + } } public void clearFilters() { diff --git a/src/test/java/com/alibaba/druid/bvt/filter/ClearFilterTest.java b/src/test/java/com/alibaba/druid/bvt/filter/ClearFilterTest.java new file mode 100644 index 0000000000..acfac7d718 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/ClearFilterTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.filter; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.filter.stat.StatFilter; +import com.alibaba.druid.pool.DruidDataSource; + + +public class ClearFilterTest extends TestCase { + public void test_filters() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + Assert.assertEquals(0, dataSource.getProxyFilters().size()); + dataSource.setFilters("encoding"); + Assert.assertEquals(1, dataSource.getProxyFilters().size()); + dataSource.setFilters("!stat"); + Assert.assertEquals(1, dataSource.getProxyFilters().size()); + Assert.assertEquals(StatFilter.class.getName(), dataSource.getFilterClassNames().get(0)); + dataSource.close(); + } +} diff --git a/src/test/java/com/alibaba/druid/pool/MemTest.java b/src/test/java/com/alibaba/druid/pool/MemTest.java new file mode 100644 index 0000000000..ee123fb9f7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/MemTest.java @@ -0,0 +1,57 @@ +package com.alibaba.druid.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.List; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; + +public class MemTest { + + public static void main(String[] args) throws Exception { +// DruidDataSource dataSource = new DruidDataSource(); +// dataSource.setUrl("jdbc:mock:xxx"); +// dataSource.setInitialSize(1); +// dataSource.setDbType("mysql"); +// dataSource.setFilters("mergeStat"); + // dataSource.setPoolPreparedStatements(true); + // dataSource.setMaxOpenPreparedStatements(50); + + // for (int i = 1000; i < 2000; ++i) { + // String tableName = "t" + i; + // String sql = "select * from " + tableName + " where " + tableName + ".id = " + i; + // Connection conn = dataSource.getConnection(); + // + // PreparedStatement stmt = conn.prepareStatement(sql); + // stmt.execute(); + // stmt.close(); + // + // conn.close(); + // } + + // Connection conn = dataSource.getConnection(); + // + String sql = "SELECT UMID, HWID, MAC, GUID, RID , GMT_CREATE, GMT_MODIFIED FROM umid_rid " + // + "WHERE RID = ? " + // + "LIMIT 10"; + // PreparedStatement stmt = conn.prepareStatement(sql); + // stmt.execute(); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, "mysql"); + List statementList = parser.parseStatementList(); + + SQLStatement stmt = statementList.get(0); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = ParameterizedOutputVisitorUtils.createParameterizedOutputVisitor(out, "mysql"); + stmt.accept(visitor); + + Thread.sleep(1000 * 1000); +// dataSource.close(); + } +}