diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 82bc4633ea..7270610c78 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -2675,7 +2675,7 @@ public class SQLExprParser extends SQLParser { lexer.nextToken(); accept(Token.NULL); option = SQLForeignKeyImpl.Option.SET_NULL; - } else if (lexer.token() == Token.ON || lexer.identifierEquals(FnvHash.Constants.ON)) { + } else if (lexer.identifierEquals(FnvHash.Constants.NO)) { lexer.nextToken(); if (lexer.identifierEquals(FnvHash.Constants.ACTION)) { option = SQLForeignKeyImpl.Option.NO_ACTION; diff --git a/src/main/java/com/alibaba/druid/util/FnvHash.java b/src/main/java/com/alibaba/druid/util/FnvHash.java index b77546e8eb..290b5dae6f 100644 --- a/src/main/java/com/alibaba/druid/util/FnvHash.java +++ b/src/main/java/com/alibaba/druid/util/FnvHash.java @@ -633,5 +633,6 @@ public final class FnvHash { long TBLPROPERTIES = fnv1a_64_lower("TBLPROPERTIES"); long FULLTEXT = fnv1a_64_lower("FULLTEXT"); + long NO = fnv1a_64_lower("NO"); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest97.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest97.java new file mode 100644 index 0000000000..a993e47f30 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/createTable/MySqlCreateTableTest97.java @@ -0,0 +1,56 @@ +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 MySqlCreateTableTest97 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE `gsp_order` (\n" + + " `id` int(11) NOT NULL AUTO_INCREMENT,\n" + + " `spare_num` int(11) NOT NULL COMMENT '????',\n" + + " `coupon` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '????',\n" + + " `remark` varchar(255) DEFAULT NULL COMMENT '??',\n" + + " `creator_id` int(11) NOT NULL COMMENT '???ID',\n" + + " `last_operator` varchar(16) DEFAULT NULL COMMENT '???????',\n" + + " `createtime` datetime NOT NULL COMMENT '????',\n" + + " `updatetime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '????????',\n" + + " `is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '?????0????1?????',\n" + + " PRIMARY KEY (`id`),\n" + + " KEY `creator_id` (`creator_id`),\n" + + " KEY `id` (`id`,`is_del`),\n" + + " KEY `order_id` (`order_id`),\n" + + " CONSTRAINT `gsp_order2_details_ibfk_2` FOREIGN KEY (`creator_id`) REFERENCES `gsp_sys_users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION\n" + + ") ENGINE=InnoDB AUTO_INCREMENT=84608 DEFAULT CHARSET=utf8"; + + System.out.println(sql); + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + MySqlCreateTableStatement stmt = (MySqlCreateTableStatement)statementList.get(0); + + assertEquals(1, statementList.size()); + assertEquals(14, stmt.getTableElementList().size()); + + assertEquals("CREATE TABLE `gsp_order` (\n" + + "\t`id` int(11) NOT NULL AUTO_INCREMENT,\n" + + "\t`spare_num` int(11) NOT NULL COMMENT '????',\n" + + "\t`coupon` decimal(11, 2) NOT NULL DEFAULT '0.00' COMMENT '????',\n" + + "\t`remark` varchar(255) DEFAULT NULL COMMENT '??',\n" + + "\t`creator_id` int(11) NOT NULL COMMENT '???ID',\n" + + "\t`last_operator` varchar(16) DEFAULT NULL COMMENT '???????',\n" + + "\t`createtime` datetime NOT NULL COMMENT '????',\n" + + "\t`updatetime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '????????',\n" + + "\t`is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '?????0????1?????',\n" + + "\tPRIMARY KEY (`id`),\n" + + "\tKEY `creator_id` (`creator_id`),\n" + + "\tKEY `id` (`id`, `is_del`),\n" + + "\tKEY `order_id` (`order_id`),\n" + + "\tCONSTRAINT `gsp_order2_details_ibfk_2` FOREIGN KEY (`creator_id`) REFERENCES `gsp_sys_users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION\n" + + ") ENGINE = InnoDB AUTO_INCREMENT = 84608 CHARSET = utf8", stmt.toString()); + } +} \ No newline at end of file