From 0e7d1322e45877e107ff1f121f6469d9c73e6035 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 8 Apr 2013 19:43:58 +0800 Subject: [PATCH] improve wall filter --- .../sql/ast/statement/SQLExprTableSource.java | 3 + .../druid/sql/ast/statement/SQLSelect.java | 5 +- .../ast/statement/SQLSubqueryTableSource.java | 8 +- .../sql/ast/statement/SQLUnionQuery.java | 9 ++ .../ast/statement/MySqlDeleteStatement.java | 3 + .../ast/statement/MySqlSelectQueryBlock.java | 3 + .../MySqlShowBinLogEventsStatement.java | 3 + .../mysql/ast/statement/MySqlUnionQuery.java | 3 + .../ast/statement/MySqlUpdateStatement.java | 3 + .../dialect/mysql/parser/MySqlExprParser.java | 2 +- .../mysql/parser/MySqlStatementParser.java | 8 ++ .../java/com/alibaba/druid/util/IOUtils.java | 4 + .../com/alibaba/druid/wall/WallConfig.java | 19 ++++- .../druid/wall/spi/MySqlWallVisitor.java | 2 +- .../druid/wall/spi/WallVisitorUtils.java | 82 ++++++++++++++----- .../druid/wall/mysql/permit-variant.txt | 2 +- .../bvt/filter/wall/IdentEqualsTest.java | 2 +- .../bvt/filter/wall/IdentEqualsTest1.java | 2 +- .../bvt/filter/wall/MySqlWallTest27.java | 2 +- .../bvt/filter/wall/MySqlWallTest28.java | 2 +- .../bvt/filter/wall/MySqlWallTest29.java | 2 +- .../bvt/filter/wall/MySqlWallTest30.java | 2 +- .../bvt/filter/wall/MySqlWallTest31.java | 2 +- .../bvt/filter/wall/MySqlWallTest32.java | 8 +- .../bvt/filter/wall/MySqlWallTest37.java | 44 ++++++++++ .../bvt/filter/wall/MySqlWallTest38.java | 44 ++++++++++ .../bvt/filter/wall/MySqlWallTest39.java | 44 ++++++++++ .../bvt/filter/wall/MySqlWallTest40.java | 52 ++++++++++++ .../bvt/filter/wall/MySqlWallTest41.java | 42 ++++++++++ .../bvt/filter/wall/MySqlWallTest42.java | 44 ++++++++++ .../bvt/filter/wall/MySqlWallTest43.java | 54 ++++++++++++ .../bvt/filter/wall/MySqlWallTest44.java | 42 ++++++++++ .../bvt/filter/wall/MySqlWallTest45.java | 42 ++++++++++ .../bvt/filter/wall/MySqlWallTest46.java | 42 ++++++++++ .../bvt/filter/wall/MySqlWallTest47.java | 47 +++++++++++ .../bvt/filter/wall/MySqlWallTest48.java | 46 +++++++++++ .../bvt/filter/wall/MySqlWallTest49.java | 65 +++++++++++++++ .../bvt/filter/wall/SQLServerWallTest_1.java | 36 ++++++++ .../bvt/filter/wall/SQLServerWallTest_2.java | 36 ++++++++ 39 files changed, 820 insertions(+), 41 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest37.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest38.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest39.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest40.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest41.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest42.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest43.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest44.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest45.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest46.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest47.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest48.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest49.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_1.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_2.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprTableSource.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprTableSource.java index 74ad89e32e..4021273a81 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprTableSource.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLExprTableSource.java @@ -37,6 +37,9 @@ public class SQLExprTableSource extends SQLTableSourceImpl { } public void setExpr(SQLExpr expr) { + if (expr != null) { + expr.setParent(this); + } this.expr = expr; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelect.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelect.java index 2c424b7509..43ed527510 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelect.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelect.java @@ -32,7 +32,7 @@ public class SQLSelect extends SQLObjectImpl { } public SQLSelect(SQLSelectQuery query) { - this.query = query; + this.setQuery(query); } public SQLWithSubqueryClause getWithSubQuery() { @@ -48,6 +48,9 @@ public class SQLSelect extends SQLObjectImpl { } public void setQuery(SQLSelectQuery query) { + if (query != null) { + query.setParent(this); + } this.query = query; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSubqueryTableSource.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSubqueryTableSource.java index 22fe75babb..f0198e56de 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSubqueryTableSource.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSubqueryTableSource.java @@ -33,12 +33,11 @@ public class SQLSubqueryTableSource extends SQLTableSourceImpl { public SQLSubqueryTableSource(SQLSelect select, String alias){ super(alias); - this.select = select; + this.setSelect(select); } public SQLSubqueryTableSource(SQLSelect select){ - - this.select = select; + this.setSelect(select); } public SQLSelect getSelect() { @@ -46,6 +45,9 @@ public class SQLSubqueryTableSource extends SQLTableSourceImpl { } public void setSelect(SQLSelect select) { + if (select != null) { + select.setParent(this); + } this.select = select; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUnionQuery.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUnionQuery.java index 20fe042c34..a7295d311e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUnionQuery.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUnionQuery.java @@ -44,6 +44,9 @@ public class SQLUnionQuery extends SQLSelectQuery { } public void setLeft(SQLSelectQuery left) { + if (left != null) { + left.setParent(this); + } this.left = left; } @@ -52,6 +55,9 @@ public class SQLUnionQuery extends SQLSelectQuery { } public void setRight(SQLSelectQuery right) { + if (right != null) { + right.setParent(this); + } this.right = right; } @@ -60,6 +66,9 @@ public class SQLUnionQuery extends SQLSelectQuery { } public void setOrderBy(SQLOrderBy orderBy) { + if (orderBy != null) { + orderBy.setParent(this); + } this.orderBy = orderBy; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java index 6208b02063..6bd36dc1a7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java @@ -89,6 +89,9 @@ public class MySqlDeleteStatement extends SQLDeleteStatement { } public void setLimit(Limit limit) { + if (limit != null) { + limit.setParent(this); + } this.limit = limit; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java index d2a8fc0e39..45139561ae 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java @@ -165,6 +165,9 @@ public class MySqlSelectQueryBlock extends SQLSelectQueryBlock implements MySqlO } public void setLimit(Limit limit) { + if (limit != null) { + limit.setParent(this); + } this.limit = limit; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java index 5080bef506..673d2e9fc4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java @@ -57,6 +57,9 @@ public class MySqlShowBinLogEventsStatement extends MySqlStatementImpl implement } public void setLimit(Limit limit) { + if (limit != null) { + limit.setParent(this); + } this.limit = limit; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java index e2eded664c..1a963b04d6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java @@ -32,6 +32,9 @@ public class MySqlUnionQuery extends SQLUnionQuery implements MySqlObject { } public void setLimit(Limit limit) { + if (limit != null) { + limit.setParent(this); + } this.limit = limit; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java index 127d43aee2..d730cf6ba3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java @@ -35,6 +35,9 @@ public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlSta } public void setLimit(Limit limit) { + if (limit != null) { + limit.setParent(this); + } this.limit = limit; } 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 ca7d89cb05..391126264b 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 @@ -299,7 +299,7 @@ public class MySqlExprParser extends SQLExprParser { } String unitVal = lexer.stringVal(); - MySqlIntervalUnit unit = MySqlIntervalUnit.valueOf(unitVal); + MySqlIntervalUnit unit = MySqlIntervalUnit.valueOf(unitVal.toUpperCase()); lexer.nextToken(); accept(Token.FROM); 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 ad87bf6853..335a572894 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 @@ -640,6 +640,10 @@ public class MySqlStatementParser extends SQLStatementParser { public SQLStatement parseShow() { acceptIdentifier("SHOW"); + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + } boolean full = false; if (lexer.token() == Token.FULL) { @@ -1508,6 +1512,10 @@ public class MySqlStatementParser extends SQLStatementParser { MySqlReplaceStatement stmt = new MySqlReplaceStatement(); acceptIdentifier(REPLACE); + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + } if (identifierEquals(LOW_PRIORITY)) { stmt.setLowPriority(true); diff --git a/src/main/java/com/alibaba/druid/util/IOUtils.java b/src/main/java/com/alibaba/druid/util/IOUtils.java index 8f82a47141..4a8f2af165 100644 --- a/src/main/java/com/alibaba/druid/util/IOUtils.java +++ b/src/main/java/com/alibaba/druid/util/IOUtils.java @@ -44,6 +44,10 @@ public class IOUtils { InputStream in = null; try { in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource); + if (in == null) { + in = IOUtils.class.getResourceAsStream(resource); + } + if (in == null) { return null; } diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index 88fbc0b824..bd5ae92796 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -36,6 +36,7 @@ public class WallConfig implements WallConfigMBean { private boolean createTableAllow = true; private boolean dropTableAllow = true; private boolean alterTableAllow = true; + private boolean conditionAndAlwayTrueAllow = false; private boolean selectAllColumnAllow = true; @@ -54,6 +55,7 @@ public class WallConfig implements WallConfigMBean { private boolean replaceAllow = true; private boolean setAllow = true; private boolean commitAllow = true; + private boolean rollbackAllow = true; private boolean useAllow = false; private boolean multiStatementAllow = false; @@ -107,6 +109,14 @@ public class WallConfig implements WallConfigMBean { } + public boolean isConditionAndAlwayTrueAllow() { + return conditionAndAlwayTrueAllow; + } + + public void setConditionAndAlwayTrueAllow(boolean conditionAndAlwayTrueAllow) { + this.conditionAndAlwayTrueAllow = conditionAndAlwayTrueAllow; + } + public boolean isUseAllow() { return useAllow; } @@ -115,7 +125,6 @@ public class WallConfig implements WallConfigMBean { this.useAllow = useAllow; } - public boolean isCommitAllow() { return commitAllow; } @@ -124,6 +133,14 @@ public class WallConfig implements WallConfigMBean { this.commitAllow = commitAllow; } + public boolean isRollbackAllow() { + return rollbackAllow; + } + + public void setRollbackAllow(boolean rollbackAllow) { + this.rollbackAllow = rollbackAllow; + } + public boolean isIntersectAllow() { return intersectAllow; } diff --git a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java index 0ab397879f..b2dee5b6f3 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java @@ -235,7 +235,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi return false; } - if (!checkVar(x.getParent(), x.getName())) { + if (varName.startsWith("@@") && !checkVar(x.getParent(), x.getName())) { violations.add(new IllegalSQLObjectViolation("variable not allow : " + x.getName(), toSQL(x))); } diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index d65dae5f06..9128dc8cb5 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -54,6 +54,7 @@ import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; @@ -189,7 +190,7 @@ public class WallVisitorUtils { SQLExpr where = x.getWhere(); if (where != null) { - x.getWhere().setParent(x); + where.setParent(x); checkCondition(visitor, x.getWhere()); if (Boolean.TRUE == getConditionValue(visitor, where, visitor.getConfig().isSelectWhereAlwayTrueCheck())) { @@ -205,7 +206,7 @@ public class WallVisitorUtils { } } - if (!isSimpleConstExpr) { + if ((!isFirst(where)) && !isSimpleConstExpr) { addViolation(visitor, "select alway true condition not allow", x); } } @@ -522,8 +523,10 @@ public class WallVisitorUtils { return null; } - Object leftResult = getValue(x.getLeft()); - Object rightResult = getValue(x.getRight()); + SQLExpr left = x.getLeft(); + SQLExpr right = x.getRight(); + Object leftResult = getValue(left); + Object rightResult = getValue(right); if (x.getOperator() == SQLBinaryOperator.BooleanAnd) { if (Boolean.FALSE == leftResult || Boolean.FALSE == rightResult) { @@ -539,7 +542,14 @@ public class WallVisitorUtils { } } else if (rightResult == Boolean.TRUE) { final WallConditionContext current = wallConditionContextLocal.get(); - if (current != null) { + + boolean isLikeAlwayTrue = false; + if (right instanceof SQLBinaryOpExpr + && ((SQLBinaryOpExpr) right).getOperator() == SQLBinaryOperator.Like) { + isLikeAlwayTrue = true; + } + + if (current != null && !isLikeAlwayTrue) { current.setPartAlwayTrue(true); } } @@ -631,7 +641,7 @@ public class WallVisitorUtils { final Object value = getValue(x); final WallConditionContext current = wallConditionContextLocal.get(); - if (current.hasPartAlwayTrue() && alwayTrueCheck) { + if (current.hasPartAlwayTrue() && alwayTrueCheck && !visitor.getConfig().isConditionAndAlwayTrueAllow()) { addViolation(visitor, "part alway true condition not allow", x); } @@ -801,7 +811,7 @@ public class WallVisitorUtils { } String methodName = x.getMethodName(); - + WallContext context = WallContext.current(); if (context != null) { context.incrementFunctionInvoke(methodName); @@ -974,29 +984,34 @@ public class WallVisitorUtils { public static void loadResource(Set names, String resource) { try { + boolean hasResource = false; Enumeration e = Thread.currentThread().getContextClassLoader().getResources(resource); while (e.hasMoreElements()) { URL url = e.nextElement(); InputStream in = null; - BufferedReader reader = null; try { in = url.openStream(); - reader = new BufferedReader(new InputStreamReader(in)); - for (;;) { - String line = reader.readLine(); - if (line == null) { - break; - } - line = line.trim(); - if (line.length() > 0) { - line = line.toLowerCase(); - names.add(line); - } - } + readFromInputStream(names, in); - url.openStream(); + hasResource = true; + } finally { + JdbcUtils.close(in); + } + } + + // for aliyun odps + if (!hasResource) { + if (!resource.startsWith("/")) { + resource = "/" + resource; + } + + InputStream in = null; + try { + in = WallVisitorUtils.class.getResourceAsStream(resource); + if (in != null) { + readFromInputStream(names, in); + } } finally { - JdbcUtils.close(reader); JdbcUtils.close(in); } } @@ -1005,6 +1020,26 @@ public class WallVisitorUtils { } } + private static void readFromInputStream(Set names, InputStream in) throws IOException { + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(in)); + for (;;) { + String line = reader.readLine(); + if (line == null) { + break; + } + line = line.trim(); + if (line.length() > 0) { + line = line.toLowerCase(); + names.add(line); + } + } + } finally { + JdbcUtils.close(reader); + } + } + public static void preVisitCheck(WallVisitor visitor, SQLObject x) { WallConfig config = visitor.getProvider().getConfig(); @@ -1064,6 +1099,9 @@ public class WallVisitorUtils { } else if (x instanceof MySqlCommitStatement) { allow = config.isCommitAllow(); denyMessage = "show not allow"; + } else if (x instanceof SQLRollbackStatement) { + allow = config.isRollbackAllow(); + denyMessage = "show not allow"; } else if (x instanceof SQLUseStatement) { allow = config.isUseAllow(); denyMessage = "show not allow"; diff --git a/src/main/resources/META-INF/druid/wall/mysql/permit-variant.txt b/src/main/resources/META-INF/druid/wall/mysql/permit-variant.txt index eb91b40358..90afca3bd6 100644 --- a/src/main/resources/META-INF/druid/wall/mysql/permit-variant.txt +++ b/src/main/resources/META-INF/druid/wall/mysql/permit-variant.txt @@ -19,4 +19,4 @@ sql_big_tables sql_mode tx_isolation warning_count -@ret \ No newline at end of file +identity \ No newline at end of file diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest.java index 81ae6bdcab..0e64ab9912 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest.java @@ -24,7 +24,7 @@ import com.alibaba.druid.wall.WallUtils; public class IdentEqualsTest extends TestCase { - private String sql = "select * from t where id = id"; + private String sql = "select * from t where FID = 1 OR id = id"; private WallConfig config = new WallConfig(); diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest1.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest1.java index 298ef2f1dd..d3fe4f9fa6 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/IdentEqualsTest1.java @@ -24,7 +24,7 @@ import com.alibaba.druid.wall.WallUtils; public class IdentEqualsTest1 extends TestCase { - private String sql = "select * from t where not (id != id)"; + private String sql = "select * from t where FID = 1 OR not (id != id)"; private WallConfig config = new WallConfig(); diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest27.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest27.java index 066312ee9d..b458db4693 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest27.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest27.java @@ -32,6 +32,6 @@ public class MySqlWallTest27 extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where hex('abc') = '616263'")); // + "select * from t where FID = 1 OR hex('abc') = '616263'")); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest28.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest28.java index 28f851b2a1..4d85f56c6e 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest28.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest28.java @@ -32,6 +32,6 @@ public class MySqlWallTest28 extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where hex(123) = '7B'")); // + "select * from t where FID = 1 OR hex(123) = '7B'")); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest29.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest29.java index 0fd63ebcb4..55566d8e89 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest29.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest29.java @@ -32,6 +32,6 @@ public class MySqlWallTest29 extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where UNHEX('4D7953514C') = 'MySQL'")); // + "select * from t where FID = 1 OR UNHEX('4D7953514C') = 'MySQL'")); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest30.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest30.java index fdbd482f66..3d0d25707b 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest30.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest30.java @@ -32,6 +32,6 @@ public class MySqlWallTest30 extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where UNHEX(HEX('MySQL')) = 'MySQL'")); // + "select * from t where FID = 1 OR UNHEX(HEX('MySQL')) = 'MySQL'")); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest31.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest31.java index 744fbfd7b2..c2045a51d6 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest31.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest31.java @@ -32,6 +32,6 @@ public class MySqlWallTest31 extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where UNHEX(HEX(FNAME)) = FNAME")); // + "select * from t where FID = 1 OR UNHEX(HEX(FNAME)) = FNAME")); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest32.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest32.java index 6fe5b9e82d..cd1913d745 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest32.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest32.java @@ -32,21 +32,21 @@ public class MySqlWallTest32 extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where NOT(UNHEX(HEX(FNAME)) != FNAME)")); // + "select * from t where FID = 1 OR NOT(UNHEX(HEX(FNAME)) != FNAME)")); // } public void test_false_1() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where NOT(UNHEX(HEX(FNAME)) > FNAME)")); // + "select * from t where FID = 1 OR NOT(UNHEX(HEX(FNAME)) > FNAME)")); // } public void test_false_2() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where NOT(UNHEX(HEX(FNAME)) < FNAME)")); // + "select * from t where FID = 1 OR NOT(UNHEX(HEX(FNAME)) < FNAME)")); // } public void test_false_3() throws Exception { Assert.assertFalse(WallUtils.isValidateMySql(// - "select * from t where NOT(UNHEX(HEX(FNAME)) NOT LIKE FNAME)")); // + "select * from t where FID = 1 OR NOT(UNHEX(HEX(FNAME)) NOT LIKE FNAME)")); // } } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest37.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest37.java new file mode 100644 index 0000000000..aeefa9aad8 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest37.java @@ -0,0 +1,44 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.support.json.JSONUtils; +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest37 extends TestCase { + + public void test_true() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "call partnerAttribute(3061975048797781,105385028,5,@ret)")); // + + Assert.assertEquals(0, provider.getTableStats().size()); + System.out.println(JSONUtils.toJSONString(provider.getStatsMap())); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest38.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest38.java new file mode 100644 index 0000000000..f6f5412f3c --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest38.java @@ -0,0 +1,44 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.support.json.JSONUtils; +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest38 extends TestCase { + + public void test_true() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "/* mysql-connector-java-5.1.20 ( Revision: tonci.grgin@oracle.com-20111003110438-qfydx066wsbydkbw ) */SELECT @@session.auto_increment_increment")); // + + Assert.assertEquals(0, provider.getTableStats().size()); + System.out.println(JSONUtils.toJSONString(provider.getStatsMap())); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest39.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest39.java new file mode 100644 index 0000000000..014286601d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest39.java @@ -0,0 +1,44 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.support.json.JSONUtils; +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest39 extends TestCase { + + public void test_true() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "COMMIT")); // + + Assert.assertEquals(0, provider.getTableStats().size()); + System.out.println(JSONUtils.toJSONString(provider.getStatsMap())); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest40.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest40.java new file mode 100644 index 0000000000..d06bdcfb45 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest40.java @@ -0,0 +1,52 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest40 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertFalse(provider.checkValid(// + "use huaianapp")); // + + Assert.assertEquals(0, provider.getTableStats().size()); + } + + public void test_true() throws Exception { + WallProvider provider = new MySqlWallProvider(); + provider.getConfig().setUseAllow(true); + + Assert.assertTrue(provider.checkValid(// + "use huaianapp")); // + + Assert.assertEquals(0, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest41.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest41.java new file mode 100644 index 0000000000..f5cd22e9d2 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest41.java @@ -0,0 +1,42 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest41 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertFalse(provider.checkValid(// + "SELECT * FROM pw_pushdata WHERE invokepieceid= '49' AND ifverify=0 AND starttime<= '1364976942' ORDER BY vieworder DESC,starttime DESC LIMIT 0")); // + + Assert.assertEquals(1, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest42.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest42.java new file mode 100644 index 0000000000..88244a7f2f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest42.java @@ -0,0 +1,44 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest42 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "SELECT COUNT(1) AS count FROM `team` " + // + "WHERE `team_type` = 'normal' AND `city_id` IN (0,10) " + // + "AND (begin_time <= '1364832000')AND (end_time > '1364873430')AND (( title like '%%' ))AND (( `team_price` > '151' AND `team_price` <= '200'))AND ((now_number >= min_number)OR (end_time > '1364832000'))AND (group_id = 9 OR sub_id = 9)")); // + + Assert.assertEquals(1, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest43.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest43.java new file mode 100644 index 0000000000..2bd2723367 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest43.java @@ -0,0 +1,54 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest43 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertFalse(provider.checkValid(// + "SELECT COUNT(1) AS count FROM `team` " + // + "WHERE `team_type` = 'normal' AND 1 = 1 AND `city_id` IN (0,10)")); + + Assert.assertEquals(1, provider.getTableStats().size()); + } + + public void test_true() throws Exception { + WallProvider provider = new MySqlWallProvider(); + provider.getConfig().setConditionAndAlwayTrueAllow(true); + + Assert.assertTrue(provider.checkValid(// + "SELECT COUNT(1) AS count FROM `team` " + // + "WHERE `team_type` = 'normal' AND 1 = 1 AND `city_id` IN (0,10)")); + + Assert.assertEquals(1, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest44.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest44.java new file mode 100644 index 0000000000..197cdc85f5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest44.java @@ -0,0 +1,42 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest44 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertFalse(provider.checkValid(// + "SELECT * FROM pw_pushdata WHERE invokepieceid= '49' AND ifverify=0 AND starttime<= '1365331510' ORDER BY vieworder DESC,starttime DESC LIMIT 0")); + + Assert.assertEquals(1, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest45.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest45.java new file mode 100644 index 0000000000..fc080334b5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest45.java @@ -0,0 +1,42 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest45 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "SELECT @1119453529t_processID, @1119453529t_ret")); + + Assert.assertEquals(0, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest46.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest46.java new file mode 100644 index 0000000000..2578d5fad6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest46.java @@ -0,0 +1,42 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest46 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "select aid,subject,dateline from www_subject where subject like '%%' order by aid desc limit 30;")); + + Assert.assertEquals(1, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest47.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest47.java new file mode 100644 index 0000000000..1bc53c8f22 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest47.java @@ -0,0 +1,47 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest47 extends TestCase { + + public void test_true() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "update Fans," + // + " (select 361659 as ToID, 5 as Score " + // + " union all select 382885 as ToID, 2 as Score" + // + " union all select 407537 as ToID, 6 as Score) temp " + // + "set Fans.score = Fans.score+temp.Score " + // + "where Fans.FansID = 382885 and Fans.UserID = temp.ToID")); + + Assert.assertEquals(3, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest48.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest48.java new file mode 100644 index 0000000000..af4c66b23a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest48.java @@ -0,0 +1,46 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest48 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertTrue(provider.checkValid(// + "select sum(size) as total " + // + "from file " + // + "join file_to_post on file_to_post.file_id = file.id " + // + "join notice on file_to_post.post_id = notice.id " + // + "where profile_id = 18544 and file.url like '%/notice/%/file' AND EXTRACT(month FROM file.modified) = EXTRACT(month FROM now()) and EXTRACT(year FROM file.modified) = EXTRACT(year FROM now())")); + + Assert.assertEquals(3, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest49.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest49.java new file mode 100644 index 0000000000..3c8be0c14f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest49.java @@ -0,0 +1,65 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest49 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + Assert.assertFalse(provider.checkValid(// + "select temp.*, u.CanComment, u.CanBeShared, " + // + " u.CanForward, COALESCE(b.UserID,0) as isBlocked, " + // + " COALESCE(f.UserID,0) as Followed, COALESCE(ff.UserID,0) as IsFollowed, " + // + " COALESCE(ul.UserID,0) as liked, " + // + " COALESCE(fff.UserID,0) as RIsFollowed " + // + "from " + "(select 281319 as UserID, 0 as RUserID, 7797549 as PicID " + // + " union all " + // + " select 55608 as UserID, 0 as RUserID, 7797527 as PicID " + // + " union all " + // + " select 281319 as UserID, 0 as RUserID, 7797233 as PicID " + // + " union all " + // + " select 281319 as UserID, 0 as RUserID, 7797221 as PicID " + // + " union all select 281319 as UserID, 0 as RUserID, 7797217 as PicID " + // + " union all select 281319 as UserID, 0 as RUserID, 7797189 as PicID " + // + " union all select 12271 as UserID, 0 as RUserID, 7796057 as PicID " + // + " union all select 401697 as UserID, 494381 as RUserID, 7795057 as PicID " + // + " union all select 401697 as UserID, 470693 as RUserID, 7795041 as PicID " + // + " union all select 401697 as UserID, 470693 as RUserID, 7795039 as PicID) temp " + // + "left join Users as u on u.UserID = temp.UserID " + // + "left join BlockUser as b on b.UserID = temp.UserID and b.BlockUserID = 281319 " + // + "left join Fans as f on f.FansID = temp.UserID and f.UserID = 281319 " + // + "left join Fans as ff ON ff.FansID = 281319 and ff.UserID = temp.UserID " + // + "left join Fans as fff ON fff.FansID = 281319 and fff.UserID = temp.RUserID " + // + "left join UserLikes as ul on ul.PicID = temp.PicID and ul.UserID = 281319")); + + Assert.assertEquals(4, provider.getTableStats().size()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_1.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_1.java new file mode 100644 index 0000000000..5eeb7b134b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_1.java @@ -0,0 +1,36 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class SQLServerWallTest_1 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateSqlServer("SELECT @ret")); + } +} \ No newline at end of file diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_2.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_2.java new file mode 100644 index 0000000000..6398be2a6f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest_2.java @@ -0,0 +1,36 @@ +/* + * 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.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class SQLServerWallTest_2 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateSqlServer("rollback")); + } +} \ No newline at end of file