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 60cecea063..9e97eeb670 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 @@ -67,6 +67,11 @@ public class MySqlLexer extends Lexer { throw new ParserException("illegal stat"); } + if (charAt(pos + 1) == '{') { + scanVariable(); + return; + } + Token lastToken = this.token; scanChar(); @@ -420,7 +425,7 @@ public class MySqlLexer extends Lexer { } if (isHint) { - stringVal = subString(mark + startHintSp, (bufPos - startHintSp) - 1); + stringVal = subString(mark + startHintSp, (bufPos - startHintSp) - 2); token = Token.HINT; } else { stringVal = subString(mark, bufPos); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/HintsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/HintsTest.java index 74918f8757..e2d290d35d 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/cobar/HintsTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/HintsTest.java @@ -43,4 +43,13 @@ public class HintsTest extends TestCase { String output = SQLUtils.toMySqlString(stmt); Assert.assertEquals("SELECT /*! STRAIGHT_JOIN */ col1\nFROM table1, table2", output); } + + public void test_hints_none() throws Exception { + String sql = "SELECT /* STRAIGHT_JOIN */ col1 FROM table1,table2"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("SELECT col1\nFROM table1, table2", output); + } }