[parser] parser: fix VARCHARACTER, VARYING syntax (#515)

This commit is contained in:
lauhg
2019-08-21 23:51:46 -05:00
committed by Ti Chi Robot
parent e1690e7912
commit a344829761
4 changed files with 6765 additions and 6696 deletions

View File

@ -625,6 +625,7 @@ var tokenMap = map[string]int{
"VALUES": values,
"VARBINARY": varbinaryType,
"VARCHAR": varcharType,
"VARCHARACTER": varcharacter,
"VARIABLES": variables,
"VARIANCE": varPop,
"VARYING": varying,

File diff suppressed because it is too large Load Diff

View File

@ -261,6 +261,7 @@ import (
values "VALUES"
long "LONG"
varcharType "VARCHAR"
varcharacter "VARCHARACTER"
varbinaryType "VARBINARY"
varying "VARYING"
virtual "VIRTUAL"
@ -1087,8 +1088,8 @@ import (
ValueSym "Value or Values"
Char "{CHAR|CHARACTER}"
NChar "{NCHAR|NATIONAL CHARACTER|NATIONAL CHAR}"
Varchar "{VARCHAR|CHARACTER VARYING|CHAR VARYING}"
NVarchar "{NATIONAL VARCHAR|NVARCHAR|NCHAR VARCHAR|NATIONAL CHARACTER VARYING|NATIONAL CHAR VARYING|NCHAR VARYING}"
Varchar "{VARCHAR|VARCHARACTER|CHARACTER VARYING|CHAR VARYING}"
NVarchar "{NATIONAL VARCHAR|NATIONAL VARCHARACTER|NVARCHAR|NCHAR VARCHAR|NATIONAL CHARACTER VARYING|NATIONAL CHAR VARYING|NCHAR VARYING}"
DeallocateSym "Deallocate or drop"
OuterOpt "optional OUTER clause"
CrossOpt "Cross join option"
@ -8725,6 +8726,24 @@ StringType:
x.Collate = charset.CollationBin
$$ = x
}
| "LONG" Varchar OptBinary
{
x := types.NewFieldType(mysql.TypeMediumBlob)
x.Charset = $3.(*ast.OptBinary).Charset
if $3.(*ast.OptBinary).IsBinary {
x.Flag |= mysql.BinaryFlag
}
$$ = x
}
| "LONG" OptBinary
{
x := types.NewFieldType(mysql.TypeMediumBlob)
x.Charset = $2.(*ast.OptBinary).Charset
if $2.(*ast.OptBinary).IsBinary {
x.Flag |= mysql.BinaryFlag
}
$$ = x
}
Char:
"CHARACTER"
@ -8739,11 +8758,14 @@ Varchar:
"CHARACTER" "VARYING"
| "CHAR" "VARYING"
| "VARCHAR"
| "VARCHARACTER"
NVarchar:
"NATIONAL" "VARCHAR"
| "NATIONAL" "VARCHARACTER"
| "NVARCHAR"
| "NCHAR" "VARCHAR"
| "NCHAR" "VARCHARACTER"
| "NATIONAL" "CHARACTER" "VARYING"
| "NATIONAL" "CHAR" "VARYING"
| "NCHAR" "VARYING"
@ -8771,6 +8793,11 @@ BlobType:
x := types.NewFieldType(mysql.TypeLongBlob)
$$ = x
}
| "LONG" "VARBINARY"
{
x := types.NewFieldType(mysql.TypeMediumBlob)
$$ = x
}
TextType:
"TINYTEXT"
@ -8795,16 +8822,6 @@ TextType:
x := types.NewFieldType(mysql.TypeLongBlob)
$$ = x
}
| "LONG"
{
x := types.NewFieldType(mysql.TypeMediumBlob)
$$ = x
}
| "LONG" "VARCHAR"
{
x := types.NewFieldType(mysql.TypeMediumBlob)
$$ = x
}
DateAndTimeType:

View File

@ -2471,6 +2471,9 @@ func (s *testParserSuite) TestDDL(c *C) {
{"create table t (a character varying(1));", true, "CREATE TABLE `t` (`a` VARCHAR(1))"},
{"create table t (a character varying(255));", true, "CREATE TABLE `t` (`a` VARCHAR(255))"},
{"create table t (a char varying(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a varcharacter(1));", true, "CREATE TABLE `t` (`a` VARCHAR(1))"},
{"create table t (a varcharacter(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a varcharacter(1), b varcharacter(255));", true, "CREATE TABLE `t` (`a` VARCHAR(1),`b` VARCHAR(255))"},
{"create table t (a char);", true, "CREATE TABLE `t` (`a` CHAR)"},
{"create table t (a character);", true, "CREATE TABLE `t` (`a` CHAR)"},
{"create table t (a character varying(50), b int);", true, "CREATE TABLE `t` (`a` VARCHAR(50),`b` INT)"},
@ -2481,13 +2484,16 @@ func (s *testParserSuite) TestDDL(c *C) {
{"create table t (a national character);", true, "CREATE TABLE `t` (`a` CHAR)"},
{"create table t (a nchar);", true, "CREATE TABLE `t` (`a` CHAR)"},
{"create table t (a nchar varchar(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a nchar varcharacter(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a national varchar);", false, ""},
{"create table t (a national varchar(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a national varcharacter(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a nchar varying(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table t (a nvarchar(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
{"create table nchar (a int);", true, "CREATE TABLE `nchar` (`a` INT)"},
{"create table nchar (a int, b nchar);", true, "CREATE TABLE `nchar` (`a` INT,`b` CHAR)"},
{"create table nchar (a int, b nchar(50));", true, "CREATE TABLE `nchar` (`a` INT,`b` CHAR(50))"},
{"alter table t_n storage disk , modify ident national varcharacter(12) column_format fixed first;", true, "ALTER TABLE `t_n` STORAGE DISK, MODIFY COLUMN `ident` VARCHAR(12) COLUMN_FORMAT FIXED FIRST"},
// Test keyword `SERIAL`
{"create table t (a serial);", true, "CREATE TABLE `t` (`a` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY)"},
@ -2501,7 +2507,23 @@ func (s *testParserSuite) TestDDL(c *C) {
// for LONG syntax
{"create table t (a long);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT)"},
{"create table t (a long varchar);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT)"},
{"create table t (a mediumtext, b long varchar, c long);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT,`b` MEDIUMTEXT,`c` MEDIUMTEXT)"},
{"create table t (a long varcharacter);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT)"},
{"create table t (a long char varying);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT)"},
{"create table t (a long character varying);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT)"},
{"create table t (a mediumtext, b long varchar, c long, d long varcharacter, e long char varying, f long character varying, g long);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT,`b` MEDIUMTEXT,`c` MEDIUMTEXT,`d` MEDIUMTEXT,`e` MEDIUMTEXT,`f` MEDIUMTEXT,`g` MEDIUMTEXT)"},
{"create table t (a long varbinary);", true, "CREATE TABLE `t` (`a` MEDIUMBLOB)"},
{"create table t (a long char varying, b long varbinary);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT,`b` MEDIUMBLOB)"},
{"create table t (a long char set utf8);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT CHARACTER SET UTF8)"},
{"create table t (a long char varying char set utf8);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT CHARACTER SET UTF8)"},
{"create table t (a long character set utf8);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT CHARACTER SET UTF8)"},
{"create table t (a long character varying character set utf8);", true, "CREATE TABLE `t` (`a` MEDIUMTEXT CHARACTER SET UTF8)"},
{"alter table d_n.t_n modify column ident long after ident remove partitioning", true, "ALTER TABLE `d_n`.`t_n` MODIFY COLUMN `ident` MEDIUMTEXT AFTER `ident` REMOVE PARTITIONING"},
{"alter table d_n.t_n modify column ident long char varying after ident remove partitioning", true, "ALTER TABLE `d_n`.`t_n` MODIFY COLUMN `ident` MEDIUMTEXT AFTER `ident` REMOVE PARTITIONING"},
{"alter table d_n.t_n modify column ident long character varying after ident remove partitioning", true, "ALTER TABLE `d_n`.`t_n` MODIFY COLUMN `ident` MEDIUMTEXT AFTER `ident` REMOVE PARTITIONING"},
{"alter table d_n.t_n modify column ident long varchar after ident remove partitioning", true, "ALTER TABLE `d_n`.`t_n` MODIFY COLUMN `ident` MEDIUMTEXT AFTER `ident` REMOVE PARTITIONING"},
{"alter table d_n.t_n modify column ident long varcharacter after ident remove partitioning", true, "ALTER TABLE `d_n`.`t_n` MODIFY COLUMN `ident` MEDIUMTEXT AFTER `ident` REMOVE PARTITIONING"},
{"alter table t_n change column ident ident long char varying binary charset utf8 first , tablespace ident", true, "ALTER TABLE `t_n` CHANGE COLUMN `ident` `ident` MEDIUMTEXT BINARY CHARACTER SET UTF8 FIRST, TABLESPACE = `ident`"},
{"alter table t_n change column ident ident long character varying binary charset utf8 first , tablespace ident", true, "ALTER TABLE `t_n` CHANGE COLUMN `ident` `ident` MEDIUMTEXT BINARY CHARACTER SET UTF8 FIRST, TABLESPACE = `ident`"},
// for STATS_AUTO_RECALC syntax
{"create table t (a int) stats_auto_recalc 2;", false, ""},