diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index f6dc2e737..c20d4002d 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -10456,14 +10456,15 @@ Index CreateTableConstraint(): } { ( - LOOKAHEAD(3) ( - { idxSpec.clear(); } + LOOKAHEAD(4) ( + { idxSpec.clear(); tk3=null; } + [ tk3= ] tk= sk3=RelObjectName() colNames = IndexColumnsWithParamsList() ( parameter=CreateParameter() { idxSpec.addAll(parameter); } )* { - index = new Index().withType(tk.image).withName(sk3).withColumns(colNames).withIndexSpec(new ArrayList(idxSpec)); + index = new Index().withType((tk3!=null ? tk3.image + " " : "") + tk.image).withName(sk3).withColumns(colNames).withIndexSpec(new ArrayList(idxSpec)); } ) | diff --git a/src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java b/src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java index 0560422a1..aa7574c0a 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java @@ -1206,4 +1206,15 @@ void testCreateTableQuotedColumnNamedVisible() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed( "CREATE TABLE t1 (`visible` int, `invisible` varchar (10))", true); } + + @Test + void testUniqueIndexIssue1893() throws JSQLParserException { + // MySQL `UNIQUE INDEX name (cols) ...` was rejected (only INDEX / [UNIQUE] KEY were + // accepted). + assertSqlCanBeParsedAndDeparsed( + "CREATE TABLE t (a int, b int, UNIQUE INDEX idx (a, b) USING BTREE COMMENT 'unique index')", + true); + // A plain INDEX must still parse unchanged. + assertSqlCanBeParsedAndDeparsed("CREATE TABLE t (a int, INDEX idx (a))", true); + } }