From 187ef8808fd8d0dfb65ec77c50c91e0d2b0143f8 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 19 Dec 2012 21:50:44 +0800 Subject: [PATCH 1/6] bug fixed for sql parser --- .../druid/sql/parser/SQLExprParser.java | 4 ++ .../bvt/sql/postgresql/PGSelectTest7.java | 68 +++++++++++++++++++ .../bvt/sql/postgresql/PGSelectTest8.java | 59 ++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest7.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest8.java diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 8b9495b952..705a72de2a 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -449,6 +449,10 @@ public class SQLExprParser extends SQLParser { sqlExpr = allExpr; break; + case LITERAL_ALIAS: + sqlExpr = new SQLIdentifierExpr('"' + lexer.stringVal() + '"'); + lexer.nextToken(); + break; default: throw new ParserException("ERROR. token : " + tok + " " + lexer.stringVal()); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest7.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest7.java new file mode 100644 index 0000000000..38706f8ca4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest7.java @@ -0,0 +1,68 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.postgresql; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; + +public class PGSelectTest7 extends PGTest { + + public void test_0() throws Exception { + String sql = "select id, name, parameters, \"algModuleRule.id\", \"algModuleRule.name\"" + // + ", \"algModuleRule.assembleType\", \"algModuleRule.algmIds\", \"algModuleRule.subAlgmIds\"" + // + ", \"algModuleRule.algmRatio\", \"algModuleRule.algmMaxRatio\", \"algModuleRule.objectType\"" + // + ", \"cateRule.id\", \"cateRule.name\", \"cateRule.assembleType\", \"cateRule.algmIds\"" + // + ", \"cateRule.algmRatio\", \"cateRule.algmMaxRatio\", \"appObject.id\",\"appObject.name\"" + // + ", \"appObject.beanId\" " + // + "from cnres.function_select_irecom_scene()" + // + " as a( id text,name text,parameters text, \"algModuleRule.id\" text,\"algModuleRule.name\" text" + // + " , \"algModuleRule.assembleType\" text,\"algModuleRule.algmIds\" text" + // + " , \"algModuleRule.subAlgmIds\" text,\"algModuleRule.algmRatio\" text" + // + " , \"algModuleRule.algmMaxRatio\" text, \"algModuleRule.objectType\" text" + // + " , \"cateRule.id\" text, \"cateRule.name\" text, \"cateRule.assembleType\" text" + // + " , \"cateRule.algmIds\" text, \"cateRule.algmRatio\" text, \"cateRule.algmMaxRatio\" text" + // + " , \"appObject.id\" text,\"appObject.name\" text, \"appObject.beanId\" text)"; + + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + + Assert.assertEquals(20, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getTables().size()); + } +} + +// select categoryId , offerIds from cnres.function_select_get_spt_p4p_offer_list (' 1031918 , 1031919 , 1037004 ') as +// a(categoryId numeric,offerIds character varying(4000)) +// select memberId , offerIds from cnres.function_select_get_seller_hot_offer_list('\'gzyyd168\'') as a(memberId +// character varying(20),offerIds character varying(4000)) + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest8.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest8.java new file mode 100644 index 0000000000..87860c2da4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGSelectTest8.java @@ -0,0 +1,59 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.postgresql; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; + +public class PGSelectTest8 extends PGTest { + + public void test_0() throws Exception { + String sql = "select id, name, beanId, \"algLable.id\", \"algLable.name\"" + // + ", \"algLable.schemaName\", \"algLable.tableName\", \"algLable.fieldName\"" + // + " from cnres.function_select_algmodule_rule() " + // + " as a( id text,name text,beanId text, \"algLable.id\" text,\"algLable.name\" text" + // + ", \"algLable.schemaName\" text,\"algLable.tableName\" text, \"algLable.fieldName\" text)"; + + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + + Assert.assertEquals(8, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getTables().size()); + } +} + +// select categoryId , offerIds from cnres.function_select_get_spt_p4p_offer_list (' 1031918 , 1031919 , 1037004 ') as +// a(categoryId numeric,offerIds character varying(4000)) +// select memberId , offerIds from cnres.function_select_get_seller_hot_offer_list('\'gzyyd168\'') as a(memberId +// character varying(20),offerIds character varying(4000)) + From 49acee4aca6bc835f22fc5e3495324853e8c8106 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 20 Dec 2012 20:06:33 +0800 Subject: [PATCH 2/6] mysql parser support BINARY Expr --- .../druid/sql/ast/expr/SQLUnaryOperator.java | 10 ++- .../dialect/mysql/parser/MySqlExprParser.java | 6 ++ .../sql/dialect/mysql/parser/MySqlLexer.java | 1 + .../com/alibaba/druid/sql/parser/Token.java | 1 + .../mysql/MySqlSelectTest_BinaryConcat.java | 68 +++++++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_BinaryConcat.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLUnaryOperator.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLUnaryOperator.java index 9489bdc1f8..85decf9dd7 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLUnaryOperator.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLUnaryOperator.java @@ -16,7 +16,15 @@ package com.alibaba.druid.sql.ast.expr; public enum SQLUnaryOperator { - Plus("+"), Negative("-"), Not("!"), Compl("~"), Prior("PRIOR"), ConnectByRoot("CONNECT BY"), NOT("NOT"); + Plus("+"), // + Negative("-"), // + Not("!"), // + Compl("~"), // + Prior("PRIOR"), // + ConnectByRoot("CONNECT BY"), // + BINARY("BINARY"), // + RAW("RAW"), // + NOT("NOT"); public final String name; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index c337e13580..fe9186fbbb 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -24,6 +24,8 @@ import com.alibaba.druid.sql.ast.expr.SQLHexExpr; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; @@ -160,6 +162,10 @@ public class MySqlExprParser extends SQLExprParser { throw new ParserException("syntax error, illegal values clause"); } return this.methodRest(new SQLIdentifierExpr("VALUES"), true); + case BINARY: + lexer.nextToken(); + SQLUnaryExpr binaryExpr = new SQLUnaryExpr(SQLUnaryOperator.BINARY, expr()); + return primaryRest(binaryExpr); default: return super.primary(); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java index eac6a5e3dc..df609a75ec 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java @@ -46,6 +46,7 @@ public class MySqlLexer extends Lexer { map.put("LIMIT", Token.LIMIT); map.put("TRUE", Token.TRUE); + map.put("BINARY", Token.BINARY); DEFAULT_MYSQL_KEYWORDS = new Keywords(map); } diff --git a/src/main/java/com/alibaba/druid/sql/parser/Token.java b/src/main/java/com/alibaba/druid/sql/parser/Token.java index 72ba03b817..57b2b52521 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Token.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Token.java @@ -105,6 +105,7 @@ public enum Token { IDENTIFIED("IDENTIFIED"), PASSWORD("PASSWORD"), DUAL("DUAL"), + BINARY("BINARY"), //postgresql WINDOW("WINDOW"), diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_BinaryConcat.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_BinaryConcat.java new file mode 100644 index 0000000000..e4684478de --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_BinaryConcat.java @@ -0,0 +1,68 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLSelect; +import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; + +public class MySqlSelectTest_BinaryConcat extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select campaignId from Campaign" + // + " where advertiserId = ?" + // + " and deleteStatus = false" + // + " and campaignName like binary CONCAT('%',?,'%')"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + SQLSelectStatement selectStmt = (SQLSelectStatement) stmt; + + SQLSelect select = selectStmt.getSelect(); + Assert.assertNotNull(select.getQuery()); + MySqlSelectQueryBlock queryBlock = (MySqlSelectQueryBlock) select.getQuery(); + Assert.assertNull(queryBlock.getOrderBy()); + + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(4, visitor.getColumns().size()); + Assert.assertEquals(3, visitor.getConditions().size()); + Assert.assertEquals(0, visitor.getOrderByColumns().size()); + + // Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("mytable"))); + } +} From 1e605db7a01b4b5026904508912d1906c595e931 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 20 Dec 2012 20:55:07 +0800 Subject: [PATCH 3/6] mysql parser support BINARY Expr --- .../mysql/parser/MySqlStatementParser.java | 2 +- .../sql/visitor/SQLASTOutputVisitor.java | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 90e1e13111..77bb98bad1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -755,7 +755,7 @@ public class MySqlStatementParser extends SQLStatementParser { return new MySqlShowAuthorsStatement(); } - if (identifierEquals("BINARY")) { + if (lexer.token() == Token.BINARY) { lexer.nextToken(); acceptIdentifier("LOGS"); return new MySqlShowBinaryLogsStatement(); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index ea849d81b6..78c1ef157a 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -212,7 +212,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { print(' '); return; } - + print("\n"); printIndent(); } @@ -455,7 +455,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { printAndAccept(x.getArguments(), ", "); print(")"); - + if (x.getOver() != null) { print(" "); x.getOver().accept(this); @@ -551,12 +551,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLSelect x) { x.getQuery().setParent(x); - + if (x.getWithSubQuery() != null) { x.getWithSubQuery().accept(this); println(); } - + x.getQuery().accept(this); if (x.getOrderBy() != null) { @@ -885,7 +885,20 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { @Override public boolean visit(SQLUnaryExpr x) { print(x.getOperator().name); + SQLExpr expr = x.getExpr(); + + switch (x.getOperator()) { + case BINARY: + case Prior: + case ConnectByRoot: + print(' '); + expr.accept(this); + return false; + default: + break; + } + if (expr instanceof SQLBinaryOpExpr) { print('('); expr.accept(this); @@ -943,7 +956,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLJoinTableSource x) { x.getLeft().accept(this); incrementIndent(); - + if (x.getJoinType() == JoinType.COMMA) { print(","); } else { @@ -959,7 +972,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { x.getCondition().accept(this); decrementIndent(); } - + decrementIndent(); return false; @@ -1168,21 +1181,21 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { x.getName().accept(this); return false; } - + @Override public boolean visit(SQLAlterTableDropIndex x) { print("DROP INDEX "); x.getIndexName().accept(this); return false; } - + @Override public boolean visit(SQLAlterTableAddPrimaryKey x) { print("ADD "); x.getPrimaryKey().accept(this); return false; } - + @Override public boolean visit(SQLOver x) { print("OVER ("); @@ -1194,19 +1207,19 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { } return false; } - + @Override public boolean visit(SQLColumnPrimaryKey x) { print(" PRIMARY KEY"); return false; } - + @Override public boolean visit(SQLColumnUniqueIndex x) { print(" UNIQUE INDEX"); return false; } - + @Override public boolean visit(SQLWithSubqueryClause x) { print("WITH"); @@ -1219,7 +1232,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { decrementIndent(); return false; } - + @Override public boolean visit(SQLWithSubqueryClause.Entry x) { x.getName().accept(this); From 611278a2193633dba95d0d16383e23e745804635 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 20 Dec 2012 22:09:30 +0800 Subject: [PATCH 4/6] mysql parser support BINARY Expr --- .../druid/sql/dialect/mysql/parser/MySqlExprParser.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index fe9186fbbb..0b3d672990 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -210,15 +210,6 @@ public class MySqlExprParser extends SQLExprParser { expr = mysqlCharExpr; - return primaryRest(expr); - } else if (ident.equalsIgnoreCase("BINARY")) { - String charValue = lexer.stringVal(); - lexer.nextToken(); - - MySqlCharExpr mysqlCharExpr = new MySqlCharExpr(charValue); - mysqlCharExpr.setCharset("BINARY"); - expr = mysqlCharExpr; - return primaryRest(expr); } } else if (expr instanceof SQLCharExpr) { From 62d98fb72bf799d0a8f6f4e163e661f153e3f3d8 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 21 Dec 2012 00:19:49 +0800 Subject: [PATCH 5/6] improve WallFilter --- src/main/java/com/alibaba/druid/wall/WallConfig.java | 10 +++++----- src/main/java/com/alibaba/druid/wall/WallFilter.java | 6 +++--- src/main/java/com/alibaba/druid/wall/WallProvider.java | 2 +- .../druid/bvt/filter/wall/DoPrivilegedTest.java | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index 300625feb7..3cfb2f23b1 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -61,7 +61,7 @@ public class WallConfig implements WallConfigMBean { private boolean mustParameterized = false; - private boolean allowDoPrivileged = false; + private boolean doPrivilegedAllow = false; protected final Set permitFunctions = new HashSet(); protected final Set permitTables = new HashSet(); @@ -117,12 +117,12 @@ public class WallConfig implements WallConfigMBean { this.wrapAllow = wrapAllow; } - public boolean isAllowDoPrivileged() { - return allowDoPrivileged; + public boolean isDoPrivilegedAllow() { + return doPrivilegedAllow; } - public void setAllowDoPrivileged(boolean allowDoPrivileged) { - this.allowDoPrivileged = allowDoPrivileged; + public void setDoPrivilegedAllow(boolean doPrivilegedAllow) { + this.doPrivilegedAllow = doPrivilegedAllow; } public boolean isSelectAllColumnAllow() { diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index d1b2dd0f8f..105fe339a0 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -320,7 +320,7 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { @Override public boolean isWrapperFor(FilterChain chain, Wrapper wrapper, Class iface) throws SQLException { - if (config.isAllowDoPrivileged() && WallProvider.ispPivileged()) { + if (config.isDoPrivilegedAllow() && WallProvider.ispPivileged()) { return chain.isWrapperFor(wrapper, iface); } @@ -332,7 +332,7 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { @Override public T unwrap(FilterChain chain, Wrapper wrapper, Class iface) throws SQLException { - if (config.isAllowDoPrivileged() && WallProvider.ispPivileged()) { + if (config.isDoPrivilegedAllow() && WallProvider.ispPivileged()) { return chain.unwrap(wrapper, iface); } @@ -346,7 +346,7 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { @Override public DatabaseMetaData connection_getMetaData(FilterChain chain, ConnectionProxy connection) throws SQLException { - if (config.isAllowDoPrivileged() && WallProvider.ispPivileged()) { + if (config.isDoPrivilegedAllow() && WallProvider.ispPivileged()) { return chain.connection_getMetaData(connection); } diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index e327643629..92a15f36b6 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -119,7 +119,7 @@ public abstract class WallProvider { public WallCheckResult check(String sql) { WallCheckResult result = new WallCheckResult(); - if (config.isAllowDoPrivileged() && privileged.get() == Boolean.TRUE) { + if (config.isDoPrivilegedAllow() && ispPivileged()) { return result; } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java index 85724b7aff..0fa2e94f7e 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java @@ -33,7 +33,7 @@ public class DoPrivilegedTest extends TestCase { public void test_1() throws Exception { final WallConfig config = new WallConfig(); - config.setAllowDoPrivileged(true); + config.setDoPrivilegedAllow(true); WallProvider.doPrivileged(new PrivilegedAction() { @Override From dc16f4af1a353f3aaefcc025db967c90e0d734bc Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 22 Dec 2012 15:22:28 +0800 Subject: [PATCH 6/6] improve LogFilter --- .../com/alibaba/druid/filter/logging/LogFilter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java b/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java index 86a9823eb1..df9f175127 100644 --- a/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java +++ b/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java @@ -77,6 +77,18 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM protected DataSourceProxy dataSource; public LogFilter(){ + { + String prop = System.getProperty("druid.log.stmt"); + if (prop == "false") { + statementLogEnabled = false; + } + } + { + String prop = System.getProperty("druid.log.rs"); + if (prop == "false") { + resultSetLogEnabled = false; + } + } } @Override