From 60ea70b09de053d48948bd037ab0aab95f460e66 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 12 Jan 2013 14:59:01 +0800 Subject: [PATCH] bug fixed for WallFilter --- .../mysql/ast/statement/MySqlUnionQuery.java | 3 ++- .../druid/wall/spi/MySqlWallVisitor.java | 8 ++++++++ ...ServerWallTest1.java => MySqlWallTest1.java} | 17 ++++------------- 3 files changed, 14 insertions(+), 14 deletions(-) rename src/test/java/com/alibaba/druid/bvt/filter/wall/{SQLServerWallTest1.java => MySqlWallTest1.java} (59%) 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 94185435dd..e2eded664c 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 @@ -16,11 +16,12 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; +import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class MySqlUnionQuery extends SQLUnionQuery implements MySqlStatement { +public class MySqlUnionQuery extends SQLUnionQuery implements MySqlObject { private static final long serialVersionUID = 1L; 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 2df999daac..8a50af9d04 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java @@ -46,6 +46,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectGroupBy; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnionQuery; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitorAdapter; @@ -222,6 +223,13 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi return true; } + + @Override + public boolean visit(MySqlUnionQuery x) { + WallVisitorUtils.checkUnion(this, x); + + return true; + } @Override public String toSQL(SQLObject obj) { diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest1.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest1.java similarity index 59% rename from src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest1.java rename to src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest1.java index 6b2e1f6d29..7854aeedf6 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/SQLServerWallTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest1.java @@ -28,12 +28,12 @@ import com.alibaba.druid.wall.WallUtils; * @version 1.0, 2012-3-18 * @see */ -public class SQLServerWallTest1 extends TestCase { +public class MySqlWallTest1 extends TestCase { /** * @param name */ - public SQLServerWallTest1(String name){ + public MySqlWallTest1(String name){ super(name); } @@ -46,16 +46,7 @@ public class SQLServerWallTest1 extends TestCase { } public void test_stuff() throws Exception { - Assert.assertTrue(WallUtils.isValidateSqlServer( // - "select DATE_FORMAT(staydate,'%m月') as month,sum(a) as addnum,sum(q) as quitnum " + // - " from (" + // - " select staydate,1 as a,0 as q " + // - " from add_person" + // - " union all" + // - " select quitdate,0 as a,1 as q" + // - " from quit_person" + // - " ) t " + // - "where DATE_FORMAT(staydate,'%Y')= 2012 " + // - "group by DATE_FORMAT(staydate,'%Y-%m')")); + Assert.assertTrue(WallUtils.isValidateMySql(// + "select count(*) from (select DATE_FORMAT(staydate,'%m月') as month,sum(a) as addnum,sum(q) as quitnum from (select staydate,1 as a,0 as q from add_person union all select quitdate,0 as a,1 as q from quit_person) t where (DATE_FORMAT(staydate,'%Y')= ? ) group by DATE_FORMAT(staydate,'%Y-%m'))")); } }