From 44452ff6a8a2210429e1334d8a7f22f2f2046102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sun, 8 Nov 2020 11:41:24 +0800 Subject: [PATCH] improve alter table statment --- .../dialect/mysql/parser/MySqlExprParser.java | 5 ++++- .../alterTable/MySqlAlterTableTest54.java | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) 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) { + } + } }