[parser] parser: fix CHARACTER VARYING syntax (#465)

This commit is contained in:
lauhg
2019-08-12 23:47:50 -05:00
committed by Ti Chi Robot
parent ae67a02f61
commit 446d2e6e47
4 changed files with 7552 additions and 7424 deletions

View File

@ -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,

File diff suppressed because it is too large Load Diff

View File

@ -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:

View File

@ -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)
}