diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java index 5f27a30796..a63dc5a4a6 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java @@ -166,7 +166,10 @@ public class SQLParser { } else if (lexer.token() == Token.CASE) { alias = lexer.token.name(); lexer.nextToken(); - } + } else if (lexer.token() == Token.USER) { + alias = lexer.stringVal(); + lexer.nextToken(); + } switch (lexer.token()) { case KEY: diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest80.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest80.java index ad2e23d3f6..c3fd1e2213 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest80.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest80.java @@ -45,7 +45,7 @@ public class MySqlWallTest80 extends TestCase { provider.getConfig().setCommentAllow(true); - Assert.assertFalse(provider.checkValid(// + Assert.assertTrue(provider.checkValid(// "SELECT * FROM T WHERE FID = ? OR FID LIKE 1 --")); Assert.assertEquals(1, provider.getTableStats().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_18.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_18.java new file mode 100644 index 0000000000..f3f1133328 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_18.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.sql.mysql; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; + +public class MySqlSelectTest_18 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "SELECT host.id as id, host.item_id as itemId, host.node_id as nodeId, host.node_type as nodeType, host.begin_time as beginTime, host.end_time as endTime, host.gmt_create as gmtCreate, host.gmt_modify as gmtModify, host.reason as reason, host.creator_id as creatorId, host.modifier_id as modifierId, user.name as creator, user.name as modifier, user.nick_name as nickName FROM notice_close_node host left join sys_user user on user.id = host.modifier_id"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + statemen.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(2, visitor.getTables().size()); + Assert.assertEquals(14, visitor.getColumns().size()); + Assert.assertEquals(2, visitor.getConditions().size()); + + } +}