From 3007078dbb5e5b25b6efade6d8597bfaeb682cba Mon Sep 17 00:00:00 2001 From: Yako Date: Thu, 28 Aug 2014 21:06:55 +0800 Subject: [PATCH] bugfix of mysql parser for #comment --- .../druid/sql/dialect/mysql/parser/MySqlLexer.java | 6 +++++- .../com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 8371dbe9bf..4e09ed9b45 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 @@ -16,13 +16,13 @@ package com.alibaba.druid.sql.dialect.mysql.parser; import static com.alibaba.druid.sql.parser.CharTypes.isFirstIdentifierChar; -import static com.alibaba.druid.sql.parser.CharTypes.isIdentifierChar; import static com.alibaba.druid.sql.parser.LayoutCharacters.EOI; import static com.alibaba.druid.sql.parser.Token.LITERAL_CHARS; import java.util.HashMap; import java.util.Map; +import com.alibaba.druid.sql.parser.CharTypes; import com.alibaba.druid.sql.parser.Keywords; import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.NotAllowCommentException; @@ -523,4 +523,8 @@ public class MySqlLexer extends Lexer { } return true; } + + private boolean isIdentifierChar(char c) { + return c != '#' && CharTypes.isIdentifierChar(c); + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java index 430bca6bfc..8566c200e2 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java @@ -29,4 +29,14 @@ public class SQLUtilsTest extends TestCase { String sql = "begin\n" + " if (a=10) then\n" + " null;\n" + " else\n" + " null;\n" + " end if;\n" + "end;"; System.out.println(SQLUtils.formatOracle(sql)); } + + public void test_format_3() throws Exception { + String sql = "select lottery_notice_issue,lottery_notice_date,lottery_notice_result from tb_lottery_notice where lottery_type_id=8 and lottery_notice_issue<=2014066 UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL# and lottery_notice_issue>=2014062 order by lottery_notice_issue desc"; + String formattedSql = SQLUtils.formatMySql(sql); + String expected = "SELECT lottery_notice_issue, lottery_notice_date, lottery_notice_result" + + "\nFROM tb_lottery_notice" + "\nWHERE lottery_type_id = 8" + + "\n\tAND lottery_notice_issue <= 2014066" + "\nUNION ALL" + + "\nSELECT NULL, NULL, NULL, NULL, NULL" + "\n\t, NULL"; + Assert.assertEquals(expected, formattedSql); + } }