mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
support reset filters
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user