From dcbdac399e53bb1072f88c2de1290bb42aae7f71 Mon Sep 17 00:00:00 2001 From: yakolee Date: Mon, 3 Mar 2014 14:33:21 +0800 Subject: [PATCH] fix bug: parse error 'alter table t1 rename to/as t2' --- .../mysql/parser/MySqlStatementParser.java | 3 +++ .../bvt/sql/mysql/MySqlAlterTableTest1.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) 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 1a914c7485..ecb0bc2899 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 @@ -2296,6 +2296,9 @@ public class MySqlStatementParser extends SQLStatementParser { } } else if (identifierEquals("RENAME")) { lexer.nextToken(); + if (lexer.token() == Token.TO || lexer.token() == Token.AS) { + lexer.nextToken(); + } MySqlRenameTableStatement renameStmt = new MySqlRenameTableStatement(); MySqlRenameTableStatement.Item item = new MySqlRenameTableStatement.Item(); item.setName(stmt.getTableSource().getExpr()); 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 7b1bc6160a..0ec24aea8b 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 @@ -52,5 +52,23 @@ public class MySqlAlterTableTest1 extends TestCase { String output = SQLUtils.toMySqlString(stmt); Assert.assertEquals("ALTER TABLE t2\n\tADD INDEX (d),\n\tADD UNIQUE INDEX (a)", output); } + + public void test_alter_3() throws Exception { + String sql = "ALTER TABLE t1 RENAME TO t2;"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("RENAME TABLE t1 TO t2", output); + } + + public void test_alter_4() throws Exception { + String sql = "ALTER TABLE t1 RENAME AS t2;"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("RENAME TABLE t1 TO t2", output); + } }