diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 918ac7d2a..2f68be9df 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -2084,31 +2084,27 @@ MySQLIndexHint MySQLIndexHint(): List indexNameList = new ArrayList(); } { - (actionToken = + ( + actionToken = | actionToken = | actionToken = - | actionToken = ) - (indexToken = - | indexToken = ) + | actionToken = + ) + + ( + indexToken = + | indexToken = + ) + "(" - indexName = Identifier() { indexNameList.add(indexName); } - ("," indexName= Identifier() { indexNameList.add(indexName); })* + indexName = RelObjectNameWithoutValue() { indexNameList.add(indexName); } + ("," indexName= RelObjectNameWithoutValue() { indexNameList.add(indexName); })* ")" { return new MySQLIndexHint(actionToken.image, indexToken.image, indexNameList); } } -String Identifier(): -{ - Token tk = null; -} -{ - (tk= - | tk=) - { return tk.image; } -} - FunctionItem FunctionItem(): { Alias alias = null; diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java index e5c5bc581..9fb3a02c2 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -4776,4 +4776,11 @@ public void testGroupByComplexExpressionIssue1308() throws JSQLParserException { "from dual \n" + "group by (case when 1=1 then 'X' else 'Y' end), column1", true); } + + @Test + public void testReservedKeywordsMSSQLUseIndexIssue1325() throws JSQLParserException { + // without extra brackets + assertSqlCanBeParsedAndDeparsed( + "SELECT col FROM table USE INDEX(primary)", true); + } }