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 c644844c6b..e854f49527 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1975,7 +1975,7 @@ public class SQLExprParser extends SQLParser { for (;;) { lexer.nextToken(); - SQLExpr more = relational(); + SQLExpr more = and(); group.add(more); if (lexer.token == Token.OR) { if (lexer.isKeepComments() && lexer.hasComment()) { diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest148.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest148.java new file mode 100644 index 0000000000..df330d6c17 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/mysql/MySqlWallTest148.java @@ -0,0 +1,19 @@ +package com.alibaba.druid.bvt.filter.wall.mysql; + +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; +import junit.framework.TestCase; +import org.junit.Assert; + +public class MySqlWallTest148 extends TestCase { + + public void test_false() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + String sql = "select * from TABLENAME cfgdatasou0_ where cfgdatasou0_.type=? and cfgdatasou0_.module_name=? and cfgdatasou0_.node_type=? or cfgdatasou0_.type=? and cfgdatasou0_.module_name=? and cfgdatasou0_.node_type=? or cfgdatasou0_.type=? and cfgdatasou0_.module_name=? and cfgdatasou0_.node_type=?"; + + Assert.assertTrue( + provider.checkValid(sql) + ); + } +}