bugfix: parse error for 'alter table xx comment 'xx''

This commit is contained in:
yakolee
2014-03-05 11:15:53 +08:00
parent 161771d9f0
commit 987458f16d
2 changed files with 18 additions and 1 deletions
@@ -2383,7 +2383,14 @@ public class MySqlStatementParser extends SQLStatementParser {
item.setCollate(this.exprParser.primary());
}
stmt.getItems().add(item);
} else {
} else if (lexer.token() == Token.COMMENT) {
lexer.nextToken();
if(lexer.token() == Token.EQ) {
accept(Token.EQ);
}
stmt.getItems().add(new MySqlAlterTableOption("COMMENT", '\'' + lexer.stringVal() + '\''));
lexer.nextToken();
}else {
break;
}
@@ -16,6 +16,7 @@
package com.alibaba.druid.bvt.sql.mysql;
import org.junit.Assert;
import junit.framework.TestCase;
import com.alibaba.druid.sql.SQLUtils;
@@ -70,4 +71,13 @@ public class MySqlAlterTableTest extends TestCase {
Assert.assertEquals("ALTER TABLE `test`.`tb1`\n\tCOLLATE = utf8_general_ci,\n\tPACK_KEYS = PACK ALL,\n\tENGINE = InnoDB", output);
}
public void test_alter_5() throws Exception {
String sql = "ALTER TABLE t1 COMMENT '表的注释';";
MySqlStatementParser parser = new MySqlStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
parser.match(Token.EOF);
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("ALTER TABLE t1\n\tCOMMENT = '表的注释'", output);
}
}