diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index db0e29153e..24331f3c5c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -1849,7 +1849,10 @@ public class MySqlExprParser extends SQLExprParser { lexer.nextToken(); } - assignItem = new SQLAssignItem(new SQLIdentifierExpr(SINGLE_WORD_TABLE_OPTIONS[idx]), expr()); + // STORAGE_POLICY + assignItem = new SQLAssignItem( + new SQLIdentifierExpr(SINGLE_WORD_TABLE_OPTIONS[idx]) + , idx == 9 ? charExpr() : expr()); } } else { // Following may not table options. Save mark. diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/alterTable/MySqlAlterTableTest54.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/alterTable/MySqlAlterTableTest54.java index e88af0d8c7..2684c8472a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/alterTable/MySqlAlterTableTest54.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/alterTable/MySqlAlterTableTest54.java @@ -68,4 +68,24 @@ public class MySqlAlterTableTest54 extends TestCase { //do nothing } } + + public void test_6() throws Exception { + String sql = "alter table event_log storage_policy = HOT"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + try { + SQLAlterTableStatement stmt = (SQLAlterTableStatement) parser.parseStatementList().get(0); + fail(); + } catch (Exception e) { + } + } + + public void test_7() throws Exception { + String sql = "alter table event_log storage_policy = COLD"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + try { + SQLAlterTableStatement stmt = (SQLAlterTableStatement) parser.parseStatementList().get(0); + fail(); + } catch (Exception e) { + } + } }