[parser] parser: fix CHARACTER VARYING syntax (#465)
This commit is contained in:
@ -397,6 +397,7 @@ var tokenMap = map[string]int{
|
||||
"NULL": null,
|
||||
"NULLS": nulls,
|
||||
"NUMERIC": numericType,
|
||||
"NCHAR": ncharType,
|
||||
"NVARCHAR": nvarcharType,
|
||||
"OFFSET": offset,
|
||||
"ON": on,
|
||||
@ -590,6 +591,7 @@ var tokenMap = map[string]int{
|
||||
"VARCHAR": varcharType,
|
||||
"VARIABLES": variables,
|
||||
"VARIANCE": varPop,
|
||||
"VARYING": varying,
|
||||
"VAR_POP": varPop,
|
||||
"VAR_SAMP": varSamp,
|
||||
"VIEW": view,
|
||||
|
||||
14871
parser/parser.go
14871
parser/parser.go
File diff suppressed because it is too large
Load Diff
@ -260,6 +260,7 @@ import (
|
||||
long "LONG"
|
||||
varcharType "VARCHAR"
|
||||
varbinaryType "VARBINARY"
|
||||
varying "VARYING"
|
||||
virtual "VIRTUAL"
|
||||
when "WHEN"
|
||||
where "WHERE"
|
||||
@ -380,6 +381,7 @@ import (
|
||||
minRows "MIN_ROWS"
|
||||
names "NAMES"
|
||||
national "NATIONAL"
|
||||
ncharType "NCHAR"
|
||||
never "NEVER"
|
||||
no "NO"
|
||||
nodegroup "NODEGROUP"
|
||||
@ -1038,7 +1040,10 @@ import (
|
||||
RegexpSym "REGEXP or RLIKE"
|
||||
IntoOpt "INTO or EmptyString"
|
||||
ValueSym "Value or Values"
|
||||
Varchar "{NATIONAL VARCHAR|VARCHAR|NVARCHAR}"
|
||||
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}"
|
||||
DeallocateSym "Deallocate or drop"
|
||||
OuterOpt "optional OUTER clause"
|
||||
CrossOpt "Cross join option"
|
||||
@ -3796,7 +3801,7 @@ UnReservedKeyword:
|
||||
| "ROLE" |"ROLLBACK" | "SESSION" | "SIGNED" | "SNAPSHOT" | "START" | "STATUS" | "OPEN"| "SUBPARTITIONS" | "SUBPARTITION" | "TABLES" | "TABLESPACE" | "TEXT" | "THAN" | "TIME" %prec lowerThanStringLitToken
|
||||
| "TIMESTAMP" %prec lowerThanStringLitToken | "TRACE" | "TRANSACTION" | "TRUNCATE" | "UNBOUNDED" | "UNKNOWN" | "VALUE" | "WARNINGS" | "YEAR" | "MODE" | "WEEK" | "ANY" | "SOME" | "USER" | "IDENTIFIED"
|
||||
| "COLLATION" | "COMMENT" | "AVG_ROW_LENGTH" | "CONNECTION" | "CHECKSUM" | "COMPRESSION" | "KEY_BLOCK_SIZE" | "MASTER" | "MAX_ROWS"
|
||||
| "MIN_ROWS" | "NATIONAL" | "ROW_FORMAT" | "QUARTER" | "GRANTS" | "TRIGGERS" | "DELAY_KEY_WRITE" | "ISOLATION" | "JSON"
|
||||
| "MIN_ROWS" | "NATIONAL" | "NCHAR" | "ROW_FORMAT" | "QUARTER" | "GRANTS" | "TRIGGERS" | "DELAY_KEY_WRITE" | "ISOLATION" | "JSON"
|
||||
| "REPEATABLE" | "RESPECT" | "COMMITTED" | "UNCOMMITTED" | "ONLY" | "SERIALIZABLE" | "LEVEL" | "VARIABLES" | "SQL_CACHE" | "INDEXES" | "PROCESSLIST"
|
||||
| "SQL_NO_CACHE" | "DISABLE" | "ENABLE" | "REVERSE" | "PRIVILEGES" | "NO" | "BINLOG" | "FUNCTION" | "VIEW" | "BINDING" | "BINDINGS" | "MODIFY" | "EVENTS" | "PARTITIONS"
|
||||
| "NONE" | "NULLS" | "SUPER" | "EXCLUSIVE" | "STATS_PERSISTENT" | "ROW_COUNT" | "COALESCE" | "MONTH" | "PROCESS" | "PROFILE" | "PROFILES"
|
||||
@ -8043,31 +8048,40 @@ BitValueType:
|
||||
}
|
||||
|
||||
StringType:
|
||||
NationalOpt "CHAR" FieldLen OptBinary
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeString)
|
||||
x.Flen = $3.(int)
|
||||
x.Charset = $4.(*ast.OptBinary).Charset
|
||||
if $4.(*ast.OptBinary).IsBinary {
|
||||
x.Flag |= mysql.BinaryFlag
|
||||
}
|
||||
$$ = x
|
||||
}
|
||||
| NationalOpt "CHAR" OptBinary
|
||||
Char FieldLen OptBinary
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeString)
|
||||
x.Flen = $2.(int)
|
||||
x.Charset = $3.(*ast.OptBinary).Charset
|
||||
if $3.(*ast.OptBinary).IsBinary {
|
||||
x.Flag |= mysql.BinaryFlag
|
||||
}
|
||||
$$ = x
|
||||
}
|
||||
| "NATIONAL" "CHARACTER" FieldLen OptBinary
|
||||
| Char OptBinary
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeString)
|
||||
x.Flen = $3.(int)
|
||||
x.Charset = $4.(*ast.OptBinary).Charset
|
||||
if $4.(*ast.OptBinary).IsBinary {
|
||||
x.Charset = $2.(*ast.OptBinary).Charset
|
||||
if $2.(*ast.OptBinary).IsBinary {
|
||||
x.Flag |= mysql.BinaryFlag
|
||||
}
|
||||
$$ = x
|
||||
}
|
||||
| NChar FieldLen OptBinary
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeString)
|
||||
x.Flen = $2.(int)
|
||||
x.Charset = $3.(*ast.OptBinary).Charset
|
||||
if $3.(*ast.OptBinary).IsBinary {
|
||||
x.Flag |= mysql.BinaryFlag
|
||||
}
|
||||
$$ = x
|
||||
}
|
||||
| NChar OptBinary
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeString)
|
||||
x.Charset = $2.(*ast.OptBinary).Charset
|
||||
if $2.(*ast.OptBinary).IsBinary {
|
||||
x.Flag |= mysql.BinaryFlag
|
||||
}
|
||||
$$ = x
|
||||
@ -8082,6 +8096,16 @@ StringType:
|
||||
}
|
||||
$$ = x
|
||||
}
|
||||
| NVarchar FieldLen OptBinary
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeVarchar)
|
||||
x.Flen = $2.(int)
|
||||
x.Charset = $3.(*ast.OptBinary).Charset
|
||||
if $3.(*ast.OptBinary).IsBinary {
|
||||
x.Flag |= mysql.BinaryFlag
|
||||
}
|
||||
$$ = x
|
||||
}
|
||||
| "BINARY" OptFieldLen
|
||||
{
|
||||
x := types.NewFieldType(mysql.TypeString)
|
||||
@ -8144,10 +8168,27 @@ NationalOpt:
|
||||
{}
|
||||
| "NATIONAL"
|
||||
|
||||
Char:
|
||||
"CHARACTER"
|
||||
| "CHAR"
|
||||
|
||||
NChar:
|
||||
"NCHAR"
|
||||
| "NATIONAL" "CHARACTER"
|
||||
| "NATIONAL" "CHAR"
|
||||
|
||||
Varchar:
|
||||
"NATIONAL" "VARCHAR"
|
||||
| "VARCHAR"
|
||||
| "NVARCHAR"
|
||||
"CHARACTER" "VARYING"
|
||||
| "CHAR" "VARYING"
|
||||
| "VARCHAR"
|
||||
|
||||
NVarchar:
|
||||
"NATIONAL" "VARCHAR"
|
||||
| "NVARCHAR"
|
||||
| "NCHAR" "VARCHAR"
|
||||
| "NATIONAL" "CHARACTER" "VARYING"
|
||||
| "NATIONAL" "CHAR" "VARYING"
|
||||
| "NCHAR" "VARYING"
|
||||
|
||||
|
||||
BlobType:
|
||||
|
||||
@ -2297,6 +2297,28 @@ func (s *testParserSuite) TestDDL(c *C) {
|
||||
{"alter table t remove partitioning", true, "ALTER TABLE `t` REMOVE PARTITIONING"},
|
||||
{"alter table db.ident remove partitioning", true, "ALTER TABLE `db`.`ident` REMOVE PARTITIONING"},
|
||||
{"alter table t lock = default remove partitioning", true, "ALTER TABLE `t` LOCK = DEFAULT REMOVE PARTITIONING"},
|
||||
|
||||
// for character vary syntax #410
|
||||
{"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 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)"},
|
||||
{"create table t (a character, b int);", true, "CREATE TABLE `t` (`a` CHAR,`b` INT)"},
|
||||
{"create table t (a national character varying(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
|
||||
{"create table t (a national char varying(50));", true, "CREATE TABLE `t` (`a` VARCHAR(50))"},
|
||||
{"create table t (a national char);", true, "CREATE TABLE `t` (`a` CHAR)"},
|
||||
{"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 national varchar);", false, ""},
|
||||
{"create table t (a national varchar(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))"},
|
||||
}
|
||||
s.RunTest(c, table)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user