parser: support nvarchar syntax (#4500)

This commit is contained in:
winkyao
2017-09-12 14:30:04 +08:00
committed by Wenxuan Shi
parent 6f9457e373
commit e61efe6ee5
3 changed files with 20 additions and 6 deletions

View File

@ -532,6 +532,7 @@ var tokenMap = map[string]int{
"YEAR": yearType,
"CHAR": charType,
"VARCHAR": varcharType,
"NVARCHAR": nvarcharType,
"BINARY": binaryType,
"VARBINARY": varbinaryType,
"TINYBLOB": tinyblobType,

View File

@ -167,6 +167,7 @@ import (
noWriteToBinLog "NO_WRITE_TO_BINLOG"
null "NULL"
numericType "NUMERIC"
nvarcharType "NVARCHAR"
oct "OCT"
octetLength "OCTET_LENGTH"
on "ON"
@ -854,6 +855,7 @@ import (
RegexpSym "REGEXP or RLIKE"
IntoOpt "INTO or EmptyString"
ValueSym "Value or Values"
Varchar "{NATIONAL VARCHAR|VARCHAR|NVARCHAR}"
TimeUnit "Time unit for 'DATE_ADD', 'DATE_SUB', 'ADDDATE', 'SUBDATE', 'EXTRACT'"
TimestampUnit "Time unit for 'TIMESTAMPADD' and 'TIMESTAMPDIFF'"
DeallocateSym "Deallocate or drop"
@ -2457,7 +2459,7 @@ ReservedKeyword:
| "HOUR_SECOND" | "IF" | "IGNORE" | "IN" | "INDEX" | "INFILE" | "INNER" | "INSERT" | "INT" | "INTO" | "INTEGER"
| "INTERVAL" | "IS" | "JOIN" | "KEY" | "KEYS" | "KILL" | "LEADING" | "LEFT" | "LIKE" | "LIMIT" | "LINES" | "LOAD"
| "LOCALTIME" | "LOCALTIMESTAMP" | "LOCK" | "LONGBLOB" | "LONGTEXT" | "MAXVALUE" | "MEDIUMBLOB" | "MEDIUMINT" | "MEDIUMTEXT"
| "MINUTE_MICROSECOND" | "MINUTE_SECOND" | "MOD" | "NOT" | "NO_WRITE_TO_BINLOG" | "NULL" | "NUMERIC"
| "MINUTE_MICROSECOND" | "MINUTE_SECOND" | "MOD" | "NOT" | "NO_WRITE_TO_BINLOG" | "NULL" | "NUMERIC" | "NVARCHAR"
| "ON" | "OPTION" | "OR" | "ORDER" | "OUTER" | "PARTITION" | "PRECISION" | "PRIMARY" | "PROCEDURE" | "RANGE" | "READ"
| "REAL" | "REFERENCES" | "REGEXP" | "RENAME" | "REPEAT" | "REPLACE" | "RESTRICT" | "REVOKE" | "RIGHT" | "RLIKE"
| "SCHEMA" | "SCHEMAS" | "SECOND_MICROSECOND" | "SELECT" | "SET" | "SHOW" | "SMALLINT"
@ -6038,13 +6040,13 @@ StringType:
}
$$ = x
}
| NationalOpt "VARCHAR" FieldLen OptBinary OptCharset OptCollate
| Varchar FieldLen OptBinary OptCharset OptCollate
{
x := types.NewFieldType(mysql.TypeVarchar)
x.Flen = $3.(int)
x.Charset = $5.(string)
x.Collate = $6.(string)
if $4.(bool) {
x.Flen = $2.(int)
x.Charset = $4.(string)
x.Collate = $5.(string)
if $3.(bool) {
x.Flag |= mysql.BinaryFlag
}
$$ = x
@ -6114,6 +6116,12 @@ NationalOpt:
{}
| "NATIONAL"
Varchar:
"NATIONAL" "VARCHAR"
| "VARCHAR"
| "NVARCHAR"
BlobType:
"TINYBLOB"
{

View File

@ -169,6 +169,11 @@ func (s *testParserSuite) TestSimple(c *C) {
c.Assert(cs.Cols[0].Options, HasLen, 1)
c.Assert(cs.Cols[0].Options[0].Tp, Equals, ast.ColumnOptionPrimaryKey)
// for issue #4497
src = "create table t1(a NVARCHAR(100));"
_, err = parser.ParseOneStmt(src, "", "")
c.Assert(err, IsNil)
// for issue 2803
src = "use quote;"
_, err = parser.ParseOneStmt(src, "", "")