[parser] parser: fix VARCHARACTER, VARYING syntax (#515)
This commit is contained in:
@ -625,6 +625,7 @@ var tokenMap = map[string]int{
|
||||
"VALUES": values,
|
||||
"VARBINARY": varbinaryType,
|
||||
"VARCHAR": varcharType,
|
||||
"VARCHARACTER": varcharacter,
|
||||
"VARIABLES": variables,
|
||||
"VARIANCE": varPop,
|
||||
"VARYING": varying,
|
||||
|
||||
13395
parser/parser.go
13395
parser/parser.go
File diff suppressed because it is too large
Load Diff
@ -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:
|
||||
|
||||
@ -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, ""},
|
||||
|
||||
Reference in New Issue
Block a user