From 01bae142762179b1e97abb6e9a0ff9cba4983b1b Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 22 Jan 2018 15:34:53 +0800 Subject: [PATCH] bug fixed for mysql parser. for issue #2267 --- .../mysql/parser/MySqlCreateTableParser.java | 6 ++++ .../createTable/MySqlCreateTableTest94.java | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest94.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java index 764f127b2f..dc95228273 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java @@ -442,7 +442,13 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { lexer.nextToken(); accept(Token.EQ); stmt.getTableOptions().put("TYPE", this.exprParser.expr()); + continue; + } + + if (lexer.identifierEquals("ENCRYPTION")) { lexer.nextToken(); + accept(Token.EQ); + stmt.getTableOptions().put("ENCRYPTION", this.exprParser.expr()); continue; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest94.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest94.java new file mode 100644 index 0000000000..db19d180de --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest94.java @@ -0,0 +1,31 @@ +package com.alibaba.druid.bvt.sql.mysql.createTable; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; + +import java.util.List; + +public class MySqlCreateTableTest94 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE IF NOT EXISTS testTable\n" + + "(\n" + + " `id` BIGINT(20) NOT NULL,\n" + + " `queue_id` BIGINT(20) NOT NULL DEFAULT '-1',\n" + + " `status` TINYINT(4) NOT NULL DEFAULT '1',\n" + + " PRIMARY KEY (`id`)\n" + + ") ENGINE=INNODB AUTO_INCREMENT 10 AVG_ROW_LENGTH 10 DEFAULT CHARACTER SET=utf8 DEFAULT COLLATE = utf8_general_ci\n" + + "CHECKSUM=0 CONNECTION = 'connect_string' DELAY_KEY_WRITE = 0 ENCRYPTION='N' INSERT_METHOD FIRST\n" + + "MAX_ROWS 1000 MIN_ROWS=10 PACK_KEYS DEFAULT PASSWORD '12345678' STATS_AUTO_RECALC 0 STATS_PERSISTENT 0 \n" + + "STATS_SAMPLE_PAGES 10"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + MySqlCreateTableStatement stmt = (MySqlCreateTableStatement)statementList.get(0); + + assertEquals(1, statementList.size()); + assertEquals(4, stmt.getTableElementList().size()); + } +} \ No newline at end of file