support reset filters

This commit is contained in:
wenshao
2013-06-14 15:52:47 +08:00
parent d84bdb55d0
commit d27e97f126
3 changed files with 88 additions and 1 deletions
@@ -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() {
@@ -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();
}
}
@@ -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<SQLStatement> 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();
}
}