diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 335bd4bd68..6868313458 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -2081,8 +2081,25 @@ public class MySqlStatementParser extends SQLStatementParser { accept(Token.RPAREN); stmt.getItems().add(item); - } else { + } else if (lexer.token() == Token.UNIQUE) { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else if (lexer.token() == Token.KEY) { + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else if (lexer.token() == Token.CONSTRAINT) { + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else if (identifierEquals("FULLTEXT")) { + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else if (identifierEquals("SPATIAL")) { + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else { + MySqlAlterTableAddColumn item = new MySqlAlterTableAddColumn(); + SQLColumnDefinition columnDef = this.exprParser.parseColumn(); + item.getColumns().add(columnDef); + if (identifierEquals("AFTER")) { + lexer.nextToken(); + item.setAfter(this.exprParser.name()); + } + stmt.getItems().add(item); } } else if (identifierEquals("ALTER")) { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java index 0753755257..0e7f4f7d8f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlAlterTableTest1.java @@ -18,5 +18,14 @@ public class MySqlAlterTableTest1 extends TestCase { String output = SQLUtils.toMySqlString(stmt); Assert.assertEquals("RENAME TABLE t1 TO t2", output); } + + public void test_alter_1() throws Exception { + String sql = "ALTER TABLE t2 ADD d TIMESTAMP;"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("ALTER TABLE t2\n\tADD COLUMN d TIMESTAMP", output); + } }