diff --git a/pkg/sql/colexec/external/external.go b/pkg/sql/colexec/external/external.go
index 0ed66290454ee001aff536bfb4101dfda5a0e302..815cd2157e6a8d88f4ebcfdebfef607047065b77 100644
--- a/pkg/sql/colexec/external/external.go
+++ b/pkg/sql/colexec/external/external.go
@@ -97,9 +97,11 @@ func ReadFromS3(param *tree.ExternParam) ([]string, error) {
 	config.Bucket = param.S3Param.Config.Bucket
 	config.Endpoint = param.S3Param.Config.Endpoint
 
-	os.Setenv("AWS_REGION", param.S3Param.Region)
-	os.Setenv("AWS_ACCESS_KEY_ID", param.S3Param.APIKey)
-	os.Setenv("AWS_SECRET_ACCESS_KEY", param.S3Param.APISecret)
+	if param.S3Param.APIKey != "" {
+		os.Setenv("AWS_REGION", param.S3Param.Region)
+		os.Setenv("AWS_ACCESS_KEY_ID", param.S3Param.APIKey)
+		os.Setenv("AWS_SECRET_ACCESS_KEY", param.S3Param.APISecret)
+	}
 
 	fs, err := fileservice.NewS3FS(
 		config.Endpoint,
@@ -143,9 +145,11 @@ func ReadFromS3File(param *tree.ExternParam) (io.ReadCloser, error) {
 	config.Bucket = param.S3Param.Config.Bucket
 	config.Endpoint = param.S3Param.Config.Endpoint
 
-	os.Setenv("AWS_REGION", param.S3Param.Region)
-	os.Setenv("AWS_ACCESS_KEY_ID", param.S3Param.APIKey)
-	os.Setenv("AWS_SECRET_ACCESS_KEY", param.S3Param.APISecret)
+	if param.S3Param.APIKey != "" {
+		os.Setenv("AWS_REGION", param.S3Param.Region)
+		os.Setenv("AWS_ACCESS_KEY_ID", param.S3Param.APIKey)
+		os.Setenv("AWS_SECRET_ACCESS_KEY", param.S3Param.APISecret)
+	}
 
 	fs, err := fileservice.NewS3FS(
 		config.Endpoint,
@@ -375,38 +379,38 @@ func makeBatch(param *ExternalParam, plh *ParseLineHandler) *batch.Batch {
 		vec.Or = true
 		switch vec.Typ.Oid {
 		case types.T_bool:
-			vec.Col = make([]bool, batchSize)
 			vec.Data = make([]byte, batchSize)
+			vec.Col = types.DecodeBoolSlice(vec.Data)
 		case types.T_int8:
-			vec.Col = make([]int8, batchSize)
 			vec.Data = make([]byte, batchSize)
+			vec.Col = types.DecodeInt8Slice(vec.Data)
 		case types.T_int16:
-			vec.Col = make([]int16, batchSize)
 			vec.Data = make([]byte, 2*batchSize)
+			vec.Col = types.DecodeInt16Slice(vec.Data)
 		case types.T_int32:
-			vec.Col = make([]int32, batchSize)
 			vec.Data = make([]byte, 4*batchSize)
+			vec.Col = types.DecodeInt32Slice(vec.Data)
 		case types.T_int64:
-			vec.Col = make([]int64, batchSize)
 			vec.Data = make([]byte, 8*batchSize)
+			vec.Col = types.DecodeInt64Slice(vec.Data)
 		case types.T_uint8:
-			vec.Col = make([]uint8, batchSize)
 			vec.Data = make([]byte, batchSize)
+			vec.Col = types.DecodeUint8Slice(vec.Data)
 		case types.T_uint16:
-			vec.Col = make([]uint16, batchSize)
 			vec.Data = make([]byte, 2*batchSize)
+			vec.Col = types.DecodeUint16Slice(vec.Data)
 		case types.T_uint32:
-			vec.Col = make([]uint32, batchSize)
 			vec.Data = make([]byte, 4*batchSize)
+			vec.Col = types.DecodeUint32Slice(vec.Data)
 		case types.T_uint64:
-			vec.Col = make([]uint64, batchSize)
 			vec.Data = make([]byte, 8*batchSize)
+			vec.Col = types.DecodeUint64Slice(vec.Data)
 		case types.T_float32:
-			vec.Col = make([]float32, batchSize)
 			vec.Data = make([]byte, 4*batchSize)
+			vec.Col = types.DecodeFloat32Slice(vec.Data)
 		case types.T_float64:
-			vec.Col = make([]float64, batchSize)
 			vec.Data = make([]byte, 8*batchSize)
+			vec.Col = types.DecodeFloat64Slice(vec.Data)
 		case types.T_char, types.T_varchar, types.T_json:
 			vBytes := &types.Bytes{
 				Offsets: make([]uint32, batchSize),
@@ -416,20 +420,20 @@ func makeBatch(param *ExternalParam, plh *ParseLineHandler) *batch.Batch {
 			vec.Col = vBytes
 			vec.Data = make([]byte, batchSize)
 		case types.T_date:
-			vec.Col = make([]types.Date, batchSize)
 			vec.Data = make([]byte, 4*batchSize)
+			vec.Col = types.DecodeDateSlice(vec.Data)
 		case types.T_datetime:
-			vec.Col = make([]types.Datetime, batchSize)
 			vec.Data = make([]byte, 8*batchSize)
+			vec.Col = types.DecodeDatetimeSlice(vec.Data)
 		case types.T_decimal64:
-			vec.Col = make([]types.Decimal64, batchSize)
 			vec.Data = make([]byte, 8*batchSize)
+			vec.Col = types.DecodeDecimal64Slice(vec.Data)
 		case types.T_decimal128:
-			vec.Col = make([]types.Decimal128, batchSize)
 			vec.Data = make([]byte, 16*batchSize)
+			vec.Col = types.DecodeDecimal128Slice(vec.Data)
 		case types.T_timestamp:
-			vec.Col = make([]types.Timestamp, batchSize)
 			vec.Data = make([]byte, 8*batchSize)
+			vec.Col = types.DecodeTimestampSlice(vec.Data)
 		default:
 			panic("unsupported vector type")
 		}
@@ -447,9 +451,15 @@ func GetBatchData(param *ExternalParam, plh *ParseLineHandler, proc *process.Pro
 			return nil, errors.New("the table colnum is larger than input data colnum")
 		}
 		for colIdx := range param.Attrs {
-			field := strings.TrimSpace(Line[param.Name2ColIndex[param.Attrs[colIdx]]])
+			field := Line[param.Name2ColIndex[param.Attrs[colIdx]]]
+			if types.T(param.Cols[colIdx].Typ.Id) != types.T_char && types.T(param.Cols[colIdx].Typ.Id) != types.T_varchar {
+				field = strings.TrimSpace(field)
+			}
 			vec := bat.Vecs[colIdx]
-			isNullOrEmpty := len(field) == 0 || field == NULL_FLAG
+			isNullOrEmpty := field == NULL_FLAG
+			if types.T(param.Cols[colIdx].Typ.Id) != types.T_char && types.T(param.Cols[colIdx].Typ.Id) != types.T_varchar {
+				isNullOrEmpty = isNullOrEmpty || len(field) == 0
+			}
 			switch types.T(param.Cols[colIdx].Typ.Id) {
 			case types.T_bool:
 				cols := vec.Col.([]bool)
@@ -776,7 +786,7 @@ func GetSimdcsvReader(param *ExternalParam) (*ParseLineHandler, error) {
 		rune(param.extern.Tail.Fields.Terminated[0]),
 		'#',
 		true,
-		false)
+		true)
 
 	return plh, nil
 }
diff --git a/pkg/sql/parsers/dialect/mysql/mysql_sql.go b/pkg/sql/parsers/dialect/mysql/mysql_sql.go
index 1d2186b23f0453c807d1d985882fa737d8e1dbcc..e5c7d388038e4e4e586b06da748e83c8b6c7e4b9 100644
--- a/pkg/sql/parsers/dialect/mysql/mysql_sql.go
+++ b/pkg/sql/parsers/dialect/mysql/mysql_sql.go
@@ -976,7 +976,7 @@ const yyEofCode = 1
 const yyErrCode = 2
 const yyInitialStackSize = 16
 
-//line mysql_sql.y:7200
+//line mysql_sql.y:7201
 
 //line yacctab:1
 var yyExca = [...]int{
@@ -3585,7 +3585,7 @@ var yyPgo = [...]int{
 	1945, 153, 1944,
 }
 
-//line mysql_sql.y:7200
+//line mysql_sql.y:7201
 type yySymType struct {
 	union interface{}
 	id    int
@@ -10024,16 +10024,17 @@ yydefault:
 //line mysql_sql.y:3887
 		{
 			yyLOCAL = &tree.CreateTable{
-				Table: *yyDollar[5].tableNameUnion(),
-				Defs:  yyDollar[7].tableDefsUnion(),
-				Param: yyDollar[9].loadParamUnion(),
+				IfNotExists: yyDollar[4].ifNotExistsUnion(),
+				Table:       *yyDollar[5].tableNameUnion(),
+				Defs:        yyDollar[7].tableDefsUnion(),
+				Param:       yyDollar[9].loadParamUnion(),
 			}
 		}
 		yyVAL.union = yyLOCAL
 	case 620:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.ExternParam
-//line mysql_sql.y:3897
+//line mysql_sql.y:3898
 		{
 			yyLOCAL = yyDollar[1].loadParamUnion()
 			yyLOCAL.Tail = yyDollar[2].tailParamUnion()
@@ -10042,7 +10043,7 @@ yydefault:
 	case 621:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.ExternParam
-//line mysql_sql.y:3904
+//line mysql_sql.y:3905
 		{
 			yyLOCAL = &tree.ExternParam{
 				Filepath:     yyDollar[2].str,
@@ -10054,7 +10055,7 @@ yydefault:
 	case 622:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.ExternParam
-//line mysql_sql.y:3912
+//line mysql_sql.y:3913
 		{
 			if strings.ToLower(yyDollar[3].str) != "filepath" {
 				yylex.Error(fmt.Sprintf("can not recognize the '%s'", yyDollar[3].str))
@@ -10070,7 +10071,7 @@ yydefault:
 	case 623:
 		yyDollar = yyS[yypt-10 : yypt+1]
 		var yyLOCAL *tree.ExternParam
-//line mysql_sql.y:3924
+//line mysql_sql.y:3925
 		{
 			if strings.ToLower(yyDollar[3].str) != "filepath" || strings.ToLower(yyDollar[7].str) != "compression" {
 				yylex.Error(fmt.Sprintf("can not recognize the '%s' or '%s' ", yyDollar[3].str, yyDollar[7].str))
@@ -10086,7 +10087,7 @@ yydefault:
 	case 624:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.ExternParam
-//line mysql_sql.y:3936
+//line mysql_sql.y:3937
 		{
 			yyLOCAL = &tree.ExternParam{
 				ScanType: tree.S3,
@@ -10097,7 +10098,7 @@ yydefault:
 	case 625:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.TailParameter
-//line mysql_sql.y:3945
+//line mysql_sql.y:3946
 		{
 			yyLOCAL = &tree.TailParameter{
 				Fields:       yyDollar[1].fieldsUnion(),
@@ -10111,7 +10112,7 @@ yydefault:
 	case 626:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:3957
+//line mysql_sql.y:3958
 		{
 			yyLOCAL = yyDollar[1].strsUnion()
 		}
@@ -10119,7 +10120,7 @@ yydefault:
 	case 627:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:3961
+//line mysql_sql.y:3962
 		{
 			yyLOCAL = append(yyDollar[1].strsUnion(), yyDollar[3].strsUnion()...)
 		}
@@ -10127,7 +10128,7 @@ yydefault:
 	case 628:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:3966
+//line mysql_sql.y:3967
 		{
 			yyLOCAL = []string{}
 		}
@@ -10135,7 +10136,7 @@ yydefault:
 	case 629:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:3970
+//line mysql_sql.y:3971
 		{
 			yyLOCAL = append(yyLOCAL, yyDollar[1].str)
 			yyLOCAL = append(yyLOCAL, yyDollar[3].str)
@@ -10144,7 +10145,7 @@ yydefault:
 	case 630:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:3976
+//line mysql_sql.y:3977
 		{
 			yyLOCAL = false
 		}
@@ -10152,7 +10153,7 @@ yydefault:
 	case 631:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:3980
+//line mysql_sql.y:3981
 		{
 			yyLOCAL = true
 		}
@@ -10160,7 +10161,7 @@ yydefault:
 	case 632:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL *tree.PartitionOption
-//line mysql_sql.y:3985
+//line mysql_sql.y:3986
 		{
 			yyLOCAL = nil
 		}
@@ -10168,7 +10169,7 @@ yydefault:
 	case 633:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.PartitionOption
-//line mysql_sql.y:3989
+//line mysql_sql.y:3990
 		{
 			yyDollar[3].partitionByUnion().Num = uint64(yyDollar[4].int64ValUnion())
 			yyLOCAL = &tree.PartitionOption{
@@ -10181,7 +10182,7 @@ yydefault:
 	case 634:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:3999
+//line mysql_sql.y:4000
 		{
 			yyLOCAL = nil
 		}
@@ -10189,7 +10190,7 @@ yydefault:
 	case 635:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4003
+//line mysql_sql.y:4004
 		{
 			yyLOCAL = &tree.PartitionBy{
 				IsSubPartition: true,
@@ -10201,7 +10202,7 @@ yydefault:
 	case 636:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL []*tree.Partition
-//line mysql_sql.y:4012
+//line mysql_sql.y:4013
 		{
 			yyLOCAL = nil
 		}
@@ -10209,7 +10210,7 @@ yydefault:
 	case 637:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []*tree.Partition
-//line mysql_sql.y:4016
+//line mysql_sql.y:4017
 		{
 			yyLOCAL = yyDollar[2].partitionsUnion()
 		}
@@ -10217,7 +10218,7 @@ yydefault:
 	case 638:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []*tree.Partition
-//line mysql_sql.y:4022
+//line mysql_sql.y:4023
 		{
 			yyLOCAL = []*tree.Partition{yyDollar[1].partitionUnion()}
 		}
@@ -10225,7 +10226,7 @@ yydefault:
 	case 639:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []*tree.Partition
-//line mysql_sql.y:4026
+//line mysql_sql.y:4027
 		{
 			yyLOCAL = append(yyDollar[1].partitionsUnion(), yyDollar[3].partitionUnion())
 		}
@@ -10233,7 +10234,7 @@ yydefault:
 	case 640:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.Partition
-//line mysql_sql.y:4032
+//line mysql_sql.y:4033
 		{
 			yyLOCAL = &tree.Partition{
 				Name:    tree.Identifier(yyDollar[2].str),
@@ -10246,7 +10247,7 @@ yydefault:
 	case 641:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.Partition
-//line mysql_sql.y:4041
+//line mysql_sql.y:4042
 		{
 			yyLOCAL = &tree.Partition{
 				Name:    tree.Identifier(yyDollar[2].str),
@@ -10259,7 +10260,7 @@ yydefault:
 	case 642:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL []*tree.SubPartition
-//line mysql_sql.y:4051
+//line mysql_sql.y:4052
 		{
 			yyLOCAL = nil
 		}
@@ -10267,7 +10268,7 @@ yydefault:
 	case 643:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []*tree.SubPartition
-//line mysql_sql.y:4055
+//line mysql_sql.y:4056
 		{
 			yyLOCAL = yyDollar[2].subPartitionsUnion()
 		}
@@ -10275,7 +10276,7 @@ yydefault:
 	case 644:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []*tree.SubPartition
-//line mysql_sql.y:4061
+//line mysql_sql.y:4062
 		{
 			yyLOCAL = []*tree.SubPartition{yyDollar[1].subPartitionUnion()}
 		}
@@ -10283,7 +10284,7 @@ yydefault:
 	case 645:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []*tree.SubPartition
-//line mysql_sql.y:4065
+//line mysql_sql.y:4066
 		{
 			yyLOCAL = append(yyDollar[1].subPartitionsUnion(), yyDollar[3].subPartitionUnion())
 		}
@@ -10291,7 +10292,7 @@ yydefault:
 	case 646:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.SubPartition
-//line mysql_sql.y:4071
+//line mysql_sql.y:4072
 		{
 			yyLOCAL = &tree.SubPartition{
 				Name:    tree.Identifier(yyDollar[2].str),
@@ -10302,7 +10303,7 @@ yydefault:
 	case 647:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.SubPartition
-//line mysql_sql.y:4078
+//line mysql_sql.y:4079
 		{
 			yyLOCAL = &tree.SubPartition{
 				Name:    tree.Identifier(yyDollar[2].str),
@@ -10313,7 +10314,7 @@ yydefault:
 	case 648:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4087
+//line mysql_sql.y:4088
 		{
 			yyLOCAL = []tree.TableOption{yyDollar[1].tableOptionUnion()}
 		}
@@ -10321,7 +10322,7 @@ yydefault:
 	case 649:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4091
+//line mysql_sql.y:4092
 		{
 			yyLOCAL = append(yyDollar[1].tableOptionsUnion(), yyDollar[2].tableOptionUnion())
 		}
@@ -10329,7 +10330,7 @@ yydefault:
 	case 650:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.Values
-//line mysql_sql.y:4096
+//line mysql_sql.y:4097
 		{
 			yyLOCAL = nil
 		}
@@ -10337,7 +10338,7 @@ yydefault:
 	case 651:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL tree.Values
-//line mysql_sql.y:4100
+//line mysql_sql.y:4101
 		{
 			yyLOCAL = &tree.ValuesLessThan{ValueList: yyDollar[5].exprsUnion()}
 		}
@@ -10345,7 +10346,7 @@ yydefault:
 	case 652:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4105
+//line mysql_sql.y:4106
 		{
 			yyLOCAL = 0
 		}
@@ -10353,7 +10354,7 @@ yydefault:
 	case 653:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4109
+//line mysql_sql.y:4110
 		{
 			res := yyDollar[2].item.(int64)
 			if res == 0 {
@@ -10366,7 +10367,7 @@ yydefault:
 	case 654:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4119
+//line mysql_sql.y:4120
 		{
 			yyLOCAL = 0
 		}
@@ -10374,7 +10375,7 @@ yydefault:
 	case 655:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4123
+//line mysql_sql.y:4124
 		{
 			res := yyDollar[2].item.(int64)
 			if res == 0 {
@@ -10387,7 +10388,7 @@ yydefault:
 	case 656:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4134
+//line mysql_sql.y:4135
 		{
 			yyLOCAL = &tree.PartitionBy{
 				PType: &tree.RangeType{
@@ -10399,7 +10400,7 @@ yydefault:
 	case 657:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4142
+//line mysql_sql.y:4143
 		{
 			yyLOCAL = &tree.PartitionBy{
 				PType: &tree.RangeType{
@@ -10411,7 +10412,7 @@ yydefault:
 	case 658:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4150
+//line mysql_sql.y:4151
 		{
 			yyLOCAL = &tree.PartitionBy{
 				PType: &tree.ListType{
@@ -10423,7 +10424,7 @@ yydefault:
 	case 659:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4158
+//line mysql_sql.y:4159
 		{
 			yyLOCAL = &tree.PartitionBy{
 				PType: &tree.ListType{
@@ -10435,7 +10436,7 @@ yydefault:
 	case 661:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4169
+//line mysql_sql.y:4170
 		{
 			yyLOCAL = &tree.PartitionBy{
 				PType: &tree.KeyType{
@@ -10449,7 +10450,7 @@ yydefault:
 	case 662:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.PartitionBy
-//line mysql_sql.y:4179
+//line mysql_sql.y:4180
 		{
 			yyLOCAL = &tree.PartitionBy{
 				PType: &tree.HashType{
@@ -10462,7 +10463,7 @@ yydefault:
 	case 663:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4189
+//line mysql_sql.y:4190
 		{
 			yyLOCAL = 0
 		}
@@ -10470,7 +10471,7 @@ yydefault:
 	case 664:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4193
+//line mysql_sql.y:4194
 		{
 			yyLOCAL = yyDollar[3].item.(int64)
 		}
@@ -10478,7 +10479,7 @@ yydefault:
 	case 665:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:4198
+//line mysql_sql.y:4199
 		{
 			yyLOCAL = false
 		}
@@ -10486,7 +10487,7 @@ yydefault:
 	case 666:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:4202
+//line mysql_sql.y:4203
 		{
 			yyLOCAL = true
 		}
@@ -10494,7 +10495,7 @@ yydefault:
 	case 667:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4207
+//line mysql_sql.y:4208
 		{
 			yyLOCAL = nil
 		}
@@ -10502,7 +10503,7 @@ yydefault:
 	case 668:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4211
+//line mysql_sql.y:4212
 		{
 			yyLOCAL = yyDollar[1].tableOptionsUnion()
 		}
@@ -10510,7 +10511,7 @@ yydefault:
 	case 669:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4217
+//line mysql_sql.y:4218
 		{
 			yyLOCAL = []tree.TableOption{yyDollar[1].tableOptionUnion()}
 		}
@@ -10518,7 +10519,7 @@ yydefault:
 	case 670:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4221
+//line mysql_sql.y:4222
 		{
 			yyLOCAL = append(yyDollar[1].tableOptionsUnion(), yyDollar[3].tableOptionUnion())
 		}
@@ -10526,7 +10527,7 @@ yydefault:
 	case 671:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL []tree.TableOption
-//line mysql_sql.y:4225
+//line mysql_sql.y:4226
 		{
 			yyLOCAL = append(yyDollar[1].tableOptionsUnion(), yyDollar[2].tableOptionUnion())
 		}
@@ -10534,7 +10535,7 @@ yydefault:
 	case 672:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4231
+//line mysql_sql.y:4232
 		{
 			yyLOCAL = tree.NewTableOptionAutoIncrement(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10542,7 +10543,7 @@ yydefault:
 	case 673:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4235
+//line mysql_sql.y:4236
 		{
 			yyLOCAL = tree.NewTableOptionAvgRowLength(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10550,7 +10551,7 @@ yydefault:
 	case 674:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4239
+//line mysql_sql.y:4240
 		{
 			yyLOCAL = tree.NewTableOptionCharset(yyDollar[4].str)
 		}
@@ -10558,7 +10559,7 @@ yydefault:
 	case 675:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4243
+//line mysql_sql.y:4244
 		{
 			yyLOCAL = tree.NewTableOptionCollate(yyDollar[4].str)
 		}
@@ -10566,7 +10567,7 @@ yydefault:
 	case 676:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4247
+//line mysql_sql.y:4248
 		{
 			yyLOCAL = tree.NewTableOptionChecksum(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10574,7 +10575,7 @@ yydefault:
 	case 677:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4251
+//line mysql_sql.y:4252
 		{
 			yyLOCAL = tree.NewTableOptionComment(yyDollar[3].str)
 		}
@@ -10582,7 +10583,7 @@ yydefault:
 	case 678:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4255
+//line mysql_sql.y:4256
 		{
 			yyLOCAL = tree.NewTableOptionCompression(yyDollar[3].str)
 		}
@@ -10590,7 +10591,7 @@ yydefault:
 	case 679:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4259
+//line mysql_sql.y:4260
 		{
 			yyLOCAL = tree.NewTableOptionConnection(yyDollar[3].str)
 		}
@@ -10598,7 +10599,7 @@ yydefault:
 	case 680:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4263
+//line mysql_sql.y:4264
 		{
 			yyLOCAL = tree.NewTableOptionDataDirectory(yyDollar[4].str)
 		}
@@ -10606,7 +10607,7 @@ yydefault:
 	case 681:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4267
+//line mysql_sql.y:4268
 		{
 			yyLOCAL = tree.NewTableOptionIndexDirectory(yyDollar[4].str)
 		}
@@ -10614,7 +10615,7 @@ yydefault:
 	case 682:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4271
+//line mysql_sql.y:4272
 		{
 			yyLOCAL = tree.NewTableOptionDelayKeyWrite(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10622,7 +10623,7 @@ yydefault:
 	case 683:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4275
+//line mysql_sql.y:4276
 		{
 			yyLOCAL = tree.NewTableOptionEncryption(yyDollar[3].str)
 		}
@@ -10630,7 +10631,7 @@ yydefault:
 	case 684:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4279
+//line mysql_sql.y:4280
 		{
 			yyLOCAL = tree.NewTableOptionEngine(yyDollar[3].str)
 		}
@@ -10638,7 +10639,7 @@ yydefault:
 	case 685:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4283
+//line mysql_sql.y:4284
 		{
 			yyLOCAL = tree.NewTableOptionKeyBlockSize(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10646,7 +10647,7 @@ yydefault:
 	case 686:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4287
+//line mysql_sql.y:4288
 		{
 			yyLOCAL = tree.NewTableOptionMaxRows(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10654,7 +10655,7 @@ yydefault:
 	case 687:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4291
+//line mysql_sql.y:4292
 		{
 			yyLOCAL = tree.NewTableOptionMinRows(uint64(yyDollar[3].item.(int64)))
 		}
@@ -10662,7 +10663,7 @@ yydefault:
 	case 688:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4295
+//line mysql_sql.y:4296
 		{
 			yyLOCAL = &tree.TableOptionPackKeys{Value: yyDollar[3].item.(int64)}
 		}
@@ -10670,7 +10671,7 @@ yydefault:
 	case 689:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4299
+//line mysql_sql.y:4300
 		{
 			yyLOCAL = &tree.TableOptionPackKeys{Default: true}
 		}
@@ -10678,7 +10679,7 @@ yydefault:
 	case 690:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4303
+//line mysql_sql.y:4304
 		{
 			yyLOCAL = tree.NewTableOptionPassword(yyDollar[3].str)
 		}
@@ -10686,7 +10687,7 @@ yydefault:
 	case 691:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4307
+//line mysql_sql.y:4308
 		{
 			yyLOCAL = tree.NewTableOptionRowFormat(yyDollar[3].rowFormatTypeUnion())
 		}
@@ -10694,7 +10695,7 @@ yydefault:
 	case 692:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4311
+//line mysql_sql.y:4312
 		{
 			yyLOCAL = &tree.TableOptionStatsAutoRecalc{Value: uint64(yyDollar[3].item.(int64))}
 		}
@@ -10702,7 +10703,7 @@ yydefault:
 	case 693:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4315
+//line mysql_sql.y:4316
 		{
 			yyLOCAL = &tree.TableOptionStatsAutoRecalc{Default: true}
 		}
@@ -10710,7 +10711,7 @@ yydefault:
 	case 694:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4319
+//line mysql_sql.y:4320
 		{
 			yyLOCAL = &tree.TableOptionStatsPersistent{Value: uint64(yyDollar[3].item.(int64))}
 		}
@@ -10718,7 +10719,7 @@ yydefault:
 	case 695:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4323
+//line mysql_sql.y:4324
 		{
 			yyLOCAL = &tree.TableOptionStatsPersistent{Default: true}
 		}
@@ -10726,7 +10727,7 @@ yydefault:
 	case 696:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4327
+//line mysql_sql.y:4328
 		{
 			yyLOCAL = &tree.TableOptionStatsSamplePages{Value: uint64(yyDollar[3].item.(int64))}
 		}
@@ -10734,7 +10735,7 @@ yydefault:
 	case 697:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4331
+//line mysql_sql.y:4332
 		{
 			yyLOCAL = &tree.TableOptionStatsSamplePages{Default: true}
 		}
@@ -10742,7 +10743,7 @@ yydefault:
 	case 698:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4335
+//line mysql_sql.y:4336
 		{
 			yyLOCAL = tree.NewTableOptionTablespace(yyDollar[3].str, yyDollar[4].str)
 		}
@@ -10750,7 +10751,7 @@ yydefault:
 	case 699:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4339
+//line mysql_sql.y:4340
 		{
 			yyLOCAL = tree.NewTableOptionUnion(yyDollar[4].tableNamesUnion())
 		}
@@ -10758,7 +10759,7 @@ yydefault:
 	case 700:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.TableOption
-//line mysql_sql.y:4343
+//line mysql_sql.y:4344
 		{
 			yyLOCAL = &tree.TableOptionProperties{Preperties: yyDollar[3].propertiesUnion()}
 		}
@@ -10766,7 +10767,7 @@ yydefault:
 	case 701:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []tree.Property
-//line mysql_sql.y:4350
+//line mysql_sql.y:4351
 		{
 			yyLOCAL = []tree.Property{yyDollar[1].propertyUnion()}
 		}
@@ -10774,7 +10775,7 @@ yydefault:
 	case 702:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []tree.Property
-//line mysql_sql.y:4354
+//line mysql_sql.y:4355
 		{
 			yyLOCAL = append(yyDollar[1].propertiesUnion(), yyDollar[3].propertyUnion())
 		}
@@ -10782,33 +10783,33 @@ yydefault:
 	case 703:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Property
-//line mysql_sql.y:4360
+//line mysql_sql.y:4361
 		{
 			yyLOCAL = tree.Property{Key: yyDollar[1].str, Value: yyDollar[3].str}
 		}
 		yyVAL.union = yyLOCAL
 	case 704:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:4365
+//line mysql_sql.y:4366
 		{
 			yyVAL.str = ""
 		}
 	case 705:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line mysql_sql.y:4369
+//line mysql_sql.y:4370
 		{
 			yyVAL.str = " " + yyDollar[1].str + " " + yyDollar[2].str
 		}
 	case 706:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line mysql_sql.y:4373
+//line mysql_sql.y:4374
 		{
 			yyVAL.str = " " + yyDollar[1].str + " " + yyDollar[2].str
 		}
 	case 707:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.RowFormatType
-//line mysql_sql.y:4379
+//line mysql_sql.y:4380
 		{
 			yyLOCAL = tree.ROW_FORMAT_DEFAULT
 		}
@@ -10816,7 +10817,7 @@ yydefault:
 	case 708:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.RowFormatType
-//line mysql_sql.y:4383
+//line mysql_sql.y:4384
 		{
 			yyLOCAL = tree.ROW_FORMAT_DYNAMIC
 		}
@@ -10824,7 +10825,7 @@ yydefault:
 	case 709:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.RowFormatType
-//line mysql_sql.y:4387
+//line mysql_sql.y:4388
 		{
 			yyLOCAL = tree.ROW_FORMAT_FIXED
 		}
@@ -10832,7 +10833,7 @@ yydefault:
 	case 710:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.RowFormatType
-//line mysql_sql.y:4391
+//line mysql_sql.y:4392
 		{
 			yyLOCAL = tree.ROW_FORMAT_COMPRESSED
 		}
@@ -10840,7 +10841,7 @@ yydefault:
 	case 711:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.RowFormatType
-//line mysql_sql.y:4395
+//line mysql_sql.y:4396
 		{
 			yyLOCAL = tree.ROW_FORMAT_REDUNDANT
 		}
@@ -10848,7 +10849,7 @@ yydefault:
 	case 712:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.RowFormatType
-//line mysql_sql.y:4399
+//line mysql_sql.y:4400
 		{
 			yyLOCAL = tree.ROW_FORMAT_COMPACT
 		}
@@ -10856,7 +10857,7 @@ yydefault:
 	case 717:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.TableNames
-//line mysql_sql.y:4413
+//line mysql_sql.y:4414
 		{
 			yyLOCAL = tree.TableNames{yyDollar[1].tableNameUnion()}
 		}
@@ -10864,7 +10865,7 @@ yydefault:
 	case 718:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableNames
-//line mysql_sql.y:4417
+//line mysql_sql.y:4418
 		{
 			yyLOCAL = append(yyDollar[1].tableNamesUnion(), yyDollar[3].tableNameUnion())
 		}
@@ -10872,7 +10873,7 @@ yydefault:
 	case 719:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.TableName
-//line mysql_sql.y:4426
+//line mysql_sql.y:4427
 		{
 			prefix := tree.ObjectNamePrefix{ExplicitSchema: false}
 			yyLOCAL = tree.NewTableName(tree.Identifier(yyDollar[1].str), prefix)
@@ -10881,7 +10882,7 @@ yydefault:
 	case 720:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.TableName
-//line mysql_sql.y:4431
+//line mysql_sql.y:4432
 		{
 			prefix := tree.ObjectNamePrefix{SchemaName: tree.Identifier(yyDollar[1].str), ExplicitSchema: true}
 			yyLOCAL = tree.NewTableName(tree.Identifier(yyDollar[3].str), prefix)
@@ -10890,7 +10891,7 @@ yydefault:
 	case 721:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.TableDefs
-//line mysql_sql.y:4437
+//line mysql_sql.y:4438
 		{
 			yyLOCAL = tree.TableDefs(nil)
 		}
@@ -10898,7 +10899,7 @@ yydefault:
 	case 723:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.TableDefs
-//line mysql_sql.y:4444
+//line mysql_sql.y:4445
 		{
 			yyLOCAL = tree.TableDefs{yyDollar[1].tableDefUnion()}
 		}
@@ -10906,7 +10907,7 @@ yydefault:
 	case 724:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.TableDefs
-//line mysql_sql.y:4448
+//line mysql_sql.y:4449
 		{
 			yyLOCAL = append(yyDollar[1].tableDefsUnion(), yyDollar[3].tableDefUnion())
 		}
@@ -10914,7 +10915,7 @@ yydefault:
 	case 725:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4454
+//line mysql_sql.y:4455
 		{
 			yyLOCAL = tree.TableDef(yyDollar[1].columnTableDefUnion())
 		}
@@ -10922,7 +10923,7 @@ yydefault:
 	case 726:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4458
+//line mysql_sql.y:4459
 		{
 			yyLOCAL = yyDollar[1].tableDefUnion()
 		}
@@ -10930,7 +10931,7 @@ yydefault:
 	case 727:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4464
+//line mysql_sql.y:4465
 		{
 			if yyDollar[1].str != "" {
 				switch v := yyDollar[2].tableDefUnion().(type) {
@@ -10944,7 +10945,7 @@ yydefault:
 	case 728:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4474
+//line mysql_sql.y:4475
 		{
 			yyLOCAL = yyDollar[1].tableDefUnion()
 		}
@@ -10952,7 +10953,7 @@ yydefault:
 	case 729:
 		yyDollar = yyS[yypt-7 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4480
+//line mysql_sql.y:4481
 		{
 			yyLOCAL = &tree.PrimaryKeyIndex{
 				KeyParts:    yyDollar[5].keyPartsUnion(),
@@ -10965,7 +10966,7 @@ yydefault:
 	case 730:
 		yyDollar = yyS[yypt-7 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4489
+//line mysql_sql.y:4490
 		{
 			yyLOCAL = &tree.FullTextIndex{
 				KeyParts:    yyDollar[5].keyPartsUnion(),
@@ -10978,7 +10979,7 @@ yydefault:
 	case 731:
 		yyDollar = yyS[yypt-7 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4498
+//line mysql_sql.y:4499
 		{
 			keyTyp := tree.INDEX_TYPE_INVALID
 			if yyDollar[3].strsUnion()[1] != "" {
@@ -11005,7 +11006,7 @@ yydefault:
 	case 732:
 		yyDollar = yyS[yypt-7 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4521
+//line mysql_sql.y:4522
 		{
 			yyLOCAL = &tree.UniqueIndex{
 				KeyParts:    yyDollar[5].keyPartsUnion(),
@@ -11018,7 +11019,7 @@ yydefault:
 	case 733:
 		yyDollar = yyS[yypt-8 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4530
+//line mysql_sql.y:4531
 		{
 			yyLOCAL = &tree.ForeignKey{
 				IfNotExists: yyDollar[3].ifNotExistsUnion(),
@@ -11032,7 +11033,7 @@ yydefault:
 	case 734:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.TableDef
-//line mysql_sql.y:4540
+//line mysql_sql.y:4541
 		{
 			yyLOCAL = &tree.CheckIndex{
 				Expr:     yyDollar[3].exprUnion(),
@@ -11043,27 +11044,27 @@ yydefault:
 	case 735:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:4548
+//line mysql_sql.y:4549
 		{
 			yyLOCAL = false
 		}
 		yyVAL.union = yyLOCAL
 	case 737:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:4554
+//line mysql_sql.y:4555
 		{
 			yyVAL.str = ""
 		}
 	case 738:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line mysql_sql.y:4558
+//line mysql_sql.y:4559
 		{
 			yyVAL.str = yyDollar[1].str
 		}
 	case 741:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:4568
+//line mysql_sql.y:4569
 		{
 			yyLOCAL = make([]string, 2)
 			yyLOCAL[0] = yyDollar[1].str
@@ -11073,7 +11074,7 @@ yydefault:
 	case 742:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:4574
+//line mysql_sql.y:4575
 		{
 			yyLOCAL = make([]string, 2)
 			yyLOCAL[0] = yyDollar[1].str
@@ -11083,7 +11084,7 @@ yydefault:
 	case 743:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:4580
+//line mysql_sql.y:4581
 		{
 			yyLOCAL = make([]string, 2)
 			yyLOCAL[0] = yyDollar[1].str
@@ -11092,14 +11093,14 @@ yydefault:
 		yyVAL.union = yyLOCAL
 	case 749:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:4594
+//line mysql_sql.y:4595
 		{
 			yyVAL.str = ""
 		}
 	case 751:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.ColumnTableDef
-//line mysql_sql.y:4601
+//line mysql_sql.y:4602
 		{
 			yyLOCAL = tree.NewColumnTableDef(yyDollar[1].unresolvedNameUnion(), yyDollar[2].columnTypeUnion(), yyDollar[3].columnAttributesUnion())
 		}
@@ -11107,7 +11108,7 @@ yydefault:
 	case 752:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.UnresolvedName
-//line mysql_sql.y:4607
+//line mysql_sql.y:4608
 		{
 			yyLOCAL = tree.SetUnresolvedName(yyDollar[1].str)
 		}
@@ -11115,7 +11116,7 @@ yydefault:
 	case 753:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.UnresolvedName
-//line mysql_sql.y:4611
+//line mysql_sql.y:4612
 		{
 			yyLOCAL = tree.SetUnresolvedName(yyDollar[1].str, yyDollar[3].str)
 		}
@@ -11123,7 +11124,7 @@ yydefault:
 	case 754:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.UnresolvedName
-//line mysql_sql.y:4615
+//line mysql_sql.y:4616
 		{
 			yyLOCAL = tree.SetUnresolvedName(yyDollar[1].str, yyDollar[3].str, yyDollar[5].str)
 		}
@@ -11131,7 +11132,7 @@ yydefault:
 	case 758:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.UnresolvedName
-//line mysql_sql.y:4626
+//line mysql_sql.y:4627
 		{
 			yyLOCAL = tree.SetUnresolvedName(yyDollar[1].str)
 		}
@@ -11139,7 +11140,7 @@ yydefault:
 	case 759:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.UnresolvedName
-//line mysql_sql.y:4630
+//line mysql_sql.y:4631
 		{
 			yyLOCAL = tree.SetUnresolvedName(yyDollar[1].str, yyDollar[3].str)
 		}
@@ -11147,7 +11148,7 @@ yydefault:
 	case 760:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.UnresolvedName
-//line mysql_sql.y:4634
+//line mysql_sql.y:4635
 		{
 			yyLOCAL = tree.SetUnresolvedName(yyDollar[1].str, yyDollar[3].str, yyDollar[5].str)
 		}
@@ -11155,7 +11156,7 @@ yydefault:
 	case 761:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL []tree.ColumnAttribute
-//line mysql_sql.y:4639
+//line mysql_sql.y:4640
 		{
 			yyLOCAL = nil
 		}
@@ -11163,7 +11164,7 @@ yydefault:
 	case 762:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []tree.ColumnAttribute
-//line mysql_sql.y:4643
+//line mysql_sql.y:4644
 		{
 			yyLOCAL = yyDollar[1].columnAttributesUnion()
 		}
@@ -11171,7 +11172,7 @@ yydefault:
 	case 763:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []tree.ColumnAttribute
-//line mysql_sql.y:4649
+//line mysql_sql.y:4650
 		{
 			yyLOCAL = []tree.ColumnAttribute{yyDollar[1].columnAttributeUnion()}
 		}
@@ -11179,7 +11180,7 @@ yydefault:
 	case 764:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL []tree.ColumnAttribute
-//line mysql_sql.y:4653
+//line mysql_sql.y:4654
 		{
 			yyLOCAL = append(yyDollar[1].columnAttributesUnion(), yyDollar[2].columnAttributeUnion())
 		}
@@ -11187,7 +11188,7 @@ yydefault:
 	case 765:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4659
+//line mysql_sql.y:4660
 		{
 			yyLOCAL = tree.NewAttributeNull(true)
 		}
@@ -11195,7 +11196,7 @@ yydefault:
 	case 766:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4663
+//line mysql_sql.y:4664
 		{
 			yyLOCAL = tree.NewAttributeNull(false)
 		}
@@ -11203,7 +11204,7 @@ yydefault:
 	case 767:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4667
+//line mysql_sql.y:4668
 		{
 			yyLOCAL = tree.NewAttributeDefault(yyDollar[2].exprUnion())
 		}
@@ -11211,7 +11212,7 @@ yydefault:
 	case 768:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4671
+//line mysql_sql.y:4672
 		{
 			yyLOCAL = tree.NewAttributeAutoIncrement()
 		}
@@ -11219,7 +11220,7 @@ yydefault:
 	case 769:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4675
+//line mysql_sql.y:4676
 		{
 			yyLOCAL = yyDollar[1].columnAttributeUnion()
 		}
@@ -11227,7 +11228,7 @@ yydefault:
 	case 770:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4679
+//line mysql_sql.y:4680
 		{
 			yyLOCAL = tree.NewAttributeComment(tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char))
 		}
@@ -11235,7 +11236,7 @@ yydefault:
 	case 771:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4683
+//line mysql_sql.y:4684
 		{
 			yyLOCAL = tree.NewAttributeCollate(yyDollar[2].str)
 		}
@@ -11243,7 +11244,7 @@ yydefault:
 	case 772:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4687
+//line mysql_sql.y:4688
 		{
 			yyLOCAL = tree.NewAttributeColumnFormat(yyDollar[2].str)
 		}
@@ -11251,7 +11252,7 @@ yydefault:
 	case 773:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4691
+//line mysql_sql.y:4692
 		{
 			yyLOCAL = tree.NewAttributeStorage(yyDollar[2].str)
 		}
@@ -11259,7 +11260,7 @@ yydefault:
 	case 774:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4695
+//line mysql_sql.y:4696
 		{
 			yyLOCAL = tree.NewAttributeAutoRandom(int(yyDollar[2].int64ValUnion()))
 		}
@@ -11267,7 +11268,7 @@ yydefault:
 	case 775:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4699
+//line mysql_sql.y:4700
 		{
 			yyLOCAL = yyDollar[1].attributeReferenceUnion()
 		}
@@ -11275,7 +11276,7 @@ yydefault:
 	case 776:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4703
+//line mysql_sql.y:4704
 		{
 			yyLOCAL = tree.NewAttributeCheck(yyDollar[4].exprUnion(), false, yyDollar[1].str)
 		}
@@ -11283,7 +11284,7 @@ yydefault:
 	case 777:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:4707
+//line mysql_sql.y:4708
 		{
 			yyLOCAL = tree.NewAttributeCheck(yyDollar[4].exprUnion(), yyDollar[6].boolValUnion(), yyDollar[1].str)
 		}
@@ -11291,7 +11292,7 @@ yydefault:
 	case 778:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:4717
+//line mysql_sql.y:4718
 		{
 			yyLOCAL = true
 		}
@@ -11299,39 +11300,39 @@ yydefault:
 	case 779:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:4721
+//line mysql_sql.y:4722
 		{
 			yyLOCAL = false
 		}
 		yyVAL.union = yyLOCAL
 	case 780:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:4726
+//line mysql_sql.y:4727
 		{
 			yyVAL.str = ""
 		}
 	case 781:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line mysql_sql.y:4730
+//line mysql_sql.y:4731
 		{
 			yyVAL.str = yyDollar[1].str
 		}
 	case 782:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line mysql_sql.y:4736
+//line mysql_sql.y:4737
 		{
 			yyVAL.str = ""
 		}
 	case 783:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line mysql_sql.y:4740
+//line mysql_sql.y:4741
 		{
 			yyVAL.str = yyDollar[2].str
 		}
 	case 784:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.AttributeReference
-//line mysql_sql.y:4746
+//line mysql_sql.y:4747
 		{
 			yyLOCAL = &tree.AttributeReference{
 				TableName: yyDollar[2].tableNameUnion(),
@@ -11345,7 +11346,7 @@ yydefault:
 	case 785:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL *tree.ReferenceOnRecord
-//line mysql_sql.y:4757
+//line mysql_sql.y:4758
 		{
 			yyLOCAL = &tree.ReferenceOnRecord{
 				OnDelete: tree.REFERENCE_OPTION_INVALID,
@@ -11356,7 +11357,7 @@ yydefault:
 	case 787:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.ReferenceOnRecord
-//line mysql_sql.y:4767
+//line mysql_sql.y:4768
 		{
 			yyLOCAL = &tree.ReferenceOnRecord{
 				OnDelete: yyDollar[1].referenceOptionTypeUnion(),
@@ -11367,7 +11368,7 @@ yydefault:
 	case 788:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.ReferenceOnRecord
-//line mysql_sql.y:4774
+//line mysql_sql.y:4775
 		{
 			yyLOCAL = &tree.ReferenceOnRecord{
 				OnDelete: tree.REFERENCE_OPTION_INVALID,
@@ -11378,7 +11379,7 @@ yydefault:
 	case 789:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.ReferenceOnRecord
-//line mysql_sql.y:4781
+//line mysql_sql.y:4782
 		{
 			yyLOCAL = &tree.ReferenceOnRecord{
 				OnDelete: yyDollar[1].referenceOptionTypeUnion(),
@@ -11389,7 +11390,7 @@ yydefault:
 	case 790:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.ReferenceOnRecord
-//line mysql_sql.y:4788
+//line mysql_sql.y:4789
 		{
 			yyLOCAL = &tree.ReferenceOnRecord{
 				OnDelete: yyDollar[2].referenceOptionTypeUnion(),
@@ -11400,7 +11401,7 @@ yydefault:
 	case 791:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4797
+//line mysql_sql.y:4798
 		{
 			yyLOCAL = yyDollar[3].referenceOptionTypeUnion()
 		}
@@ -11408,7 +11409,7 @@ yydefault:
 	case 792:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4803
+//line mysql_sql.y:4804
 		{
 			yyLOCAL = yyDollar[3].referenceOptionTypeUnion()
 		}
@@ -11416,7 +11417,7 @@ yydefault:
 	case 793:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4809
+//line mysql_sql.y:4810
 		{
 			yyLOCAL = tree.REFERENCE_OPTION_RESTRICT
 		}
@@ -11424,7 +11425,7 @@ yydefault:
 	case 794:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4813
+//line mysql_sql.y:4814
 		{
 			yyLOCAL = tree.REFERENCE_OPTION_CASCADE
 		}
@@ -11432,7 +11433,7 @@ yydefault:
 	case 795:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4817
+//line mysql_sql.y:4818
 		{
 			yyLOCAL = tree.REFERENCE_OPTION_SET_NULL
 		}
@@ -11440,7 +11441,7 @@ yydefault:
 	case 796:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4821
+//line mysql_sql.y:4822
 		{
 			yyLOCAL = tree.REFERENCE_OPTION_NO_ACTION
 		}
@@ -11448,7 +11449,7 @@ yydefault:
 	case 797:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ReferenceOptionType
-//line mysql_sql.y:4825
+//line mysql_sql.y:4826
 		{
 			yyLOCAL = tree.REFERENCE_OPTION_SET_DEFAULT
 		}
@@ -11456,7 +11457,7 @@ yydefault:
 	case 798:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.MatchType
-//line mysql_sql.y:4830
+//line mysql_sql.y:4831
 		{
 			yyLOCAL = tree.MATCH_INVALID
 		}
@@ -11464,7 +11465,7 @@ yydefault:
 	case 800:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.MatchType
-//line mysql_sql.y:4837
+//line mysql_sql.y:4838
 		{
 			yyLOCAL = tree.MATCH_FULL
 		}
@@ -11472,7 +11473,7 @@ yydefault:
 	case 801:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.MatchType
-//line mysql_sql.y:4841
+//line mysql_sql.y:4842
 		{
 			yyLOCAL = tree.MATCH_PARTIAL
 		}
@@ -11480,7 +11481,7 @@ yydefault:
 	case 802:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.MatchType
-//line mysql_sql.y:4845
+//line mysql_sql.y:4846
 		{
 			yyLOCAL = tree.MATCH_SIMPLE
 		}
@@ -11488,7 +11489,7 @@ yydefault:
 	case 803:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL []*tree.KeyPart
-//line mysql_sql.y:4850
+//line mysql_sql.y:4851
 		{
 			yyLOCAL = nil
 		}
@@ -11496,7 +11497,7 @@ yydefault:
 	case 804:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []*tree.KeyPart
-//line mysql_sql.y:4854
+//line mysql_sql.y:4855
 		{
 			yyLOCAL = yyDollar[2].keyPartsUnion()
 		}
@@ -11504,7 +11505,7 @@ yydefault:
 	case 805:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4859
+//line mysql_sql.y:4860
 		{
 			yyLOCAL = -1
 		}
@@ -11512,7 +11513,7 @@ yydefault:
 	case 806:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL int64
-//line mysql_sql.y:4863
+//line mysql_sql.y:4864
 		{
 			yyLOCAL = yyDollar[2].item.(int64)
 		}
@@ -11520,7 +11521,7 @@ yydefault:
 	case 813:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.Subquery
-//line mysql_sql.y:4879
+//line mysql_sql.y:4880
 		{
 			yyLOCAL = &tree.Subquery{Select: yyDollar[1].selectStatementUnion(), Exists: false}
 		}
@@ -11528,7 +11529,7 @@ yydefault:
 	case 814:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4885
+//line mysql_sql.y:4886
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.BIT_AND, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11536,7 +11537,7 @@ yydefault:
 	case 815:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4889
+//line mysql_sql.y:4890
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.BIT_OR, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11544,7 +11545,7 @@ yydefault:
 	case 816:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4893
+//line mysql_sql.y:4894
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.BIT_XOR, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11552,7 +11553,7 @@ yydefault:
 	case 817:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4897
+//line mysql_sql.y:4898
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.PLUS, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11560,7 +11561,7 @@ yydefault:
 	case 818:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4901
+//line mysql_sql.y:4902
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.MINUS, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11568,7 +11569,7 @@ yydefault:
 	case 819:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4905
+//line mysql_sql.y:4906
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.MULTI, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11576,7 +11577,7 @@ yydefault:
 	case 820:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4909
+//line mysql_sql.y:4910
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.DIV, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11584,7 +11585,7 @@ yydefault:
 	case 821:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4913
+//line mysql_sql.y:4914
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.INTEGER_DIV, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11592,7 +11593,7 @@ yydefault:
 	case 822:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4917
+//line mysql_sql.y:4918
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.MOD, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11600,7 +11601,7 @@ yydefault:
 	case 823:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4921
+//line mysql_sql.y:4922
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.MOD, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11608,7 +11609,7 @@ yydefault:
 	case 824:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4925
+//line mysql_sql.y:4926
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.LEFT_SHIFT, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11616,7 +11617,7 @@ yydefault:
 	case 825:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4929
+//line mysql_sql.y:4930
 		{
 			yyLOCAL = tree.NewBinaryExpr(tree.RIGHT_SHIFT, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -11624,7 +11625,7 @@ yydefault:
 	case 826:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4933
+//line mysql_sql.y:4934
 		{
 			yyLOCAL = yyDollar[1].exprUnion()
 		}
@@ -11632,7 +11633,7 @@ yydefault:
 	case 827:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4939
+//line mysql_sql.y:4940
 		{
 			yyLOCAL = yyDollar[1].unresolvedNameUnion()
 		}
@@ -11640,7 +11641,7 @@ yydefault:
 	case 828:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4943
+//line mysql_sql.y:4944
 		{
 			yyLOCAL = yyDollar[1].varExprUnion()
 		}
@@ -11648,7 +11649,7 @@ yydefault:
 	case 829:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4947
+//line mysql_sql.y:4948
 		{
 			yyLOCAL = yyDollar[1].exprUnion()
 		}
@@ -11656,7 +11657,7 @@ yydefault:
 	case 830:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4951
+//line mysql_sql.y:4952
 		{
 			yyLOCAL = tree.NewParenExpr(yyDollar[2].exprUnion())
 		}
@@ -11664,7 +11665,7 @@ yydefault:
 	case 831:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4955
+//line mysql_sql.y:4956
 		{
 			yyLOCAL = tree.NewTuple(append(yyDollar[2].exprsUnion(), yyDollar[4].exprUnion()))
 		}
@@ -11672,7 +11673,7 @@ yydefault:
 	case 832:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4959
+//line mysql_sql.y:4960
 		{
 			yyLOCAL = tree.NewUnaryExpr(tree.UNARY_PLUS, yyDollar[2].exprUnion())
 		}
@@ -11680,7 +11681,7 @@ yydefault:
 	case 833:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4963
+//line mysql_sql.y:4964
 		{
 			yyLOCAL = tree.NewUnaryExpr(tree.UNARY_MINUS, yyDollar[2].exprUnion())
 		}
@@ -11688,7 +11689,7 @@ yydefault:
 	case 834:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4967
+//line mysql_sql.y:4968
 		{
 			yyLOCAL = tree.NewUnaryExpr(tree.UNARY_TILDE, yyDollar[2].exprUnion())
 		}
@@ -11696,7 +11697,7 @@ yydefault:
 	case 835:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4971
+//line mysql_sql.y:4972
 		{
 			yyLOCAL = tree.NewUnaryExpr(tree.UNARY_MARK, yyDollar[2].exprUnion())
 		}
@@ -11704,7 +11705,7 @@ yydefault:
 	case 836:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4975
+//line mysql_sql.y:4976
 		{
 			yyLOCAL = yyDollar[1].exprUnion()
 		}
@@ -11712,7 +11713,7 @@ yydefault:
 	case 837:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4979
+//line mysql_sql.y:4980
 		{
 			yyLOCAL = yyDollar[1].subqueryUnion()
 		}
@@ -11720,7 +11721,7 @@ yydefault:
 	case 838:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4983
+//line mysql_sql.y:4984
 		{
 			yyDollar[2].subqueryUnion().Exists = true
 			yyLOCAL = yyDollar[2].subqueryUnion()
@@ -11729,7 +11730,7 @@ yydefault:
 	case 839:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4988
+//line mysql_sql.y:4989
 		{
 			yyLOCAL = &tree.CaseExpr{
 				Expr:  yyDollar[2].exprUnion(),
@@ -11741,7 +11742,7 @@ yydefault:
 	case 840:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:4996
+//line mysql_sql.y:4997
 		{
 			yyLOCAL = tree.NewCastExpr(yyDollar[3].exprUnion(), yyDollar[5].columnTypeUnion())
 		}
@@ -11749,7 +11750,7 @@ yydefault:
 	case 841:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5000
+//line mysql_sql.y:5001
 		{
 			yyLOCAL = tree.NewCastExpr(yyDollar[3].exprUnion(), yyDollar[5].columnTypeUnion())
 		}
@@ -11757,7 +11758,7 @@ yydefault:
 	case 842:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5004
+//line mysql_sql.y:5005
 		{
 			name := tree.SetUnresolvedName("convert")
 			es := tree.NewNumValWithType(constant.MakeString(yyDollar[5].str), yyDollar[5].str, false, tree.P_char)
@@ -11770,7 +11771,7 @@ yydefault:
 	case 843:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5013
+//line mysql_sql.y:5014
 		{
 			yyLOCAL = yyDollar[1].funcExprUnion()
 		}
@@ -11778,7 +11779,7 @@ yydefault:
 	case 844:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5017
+//line mysql_sql.y:5018
 		{
 			yyLOCAL = yyDollar[1].funcExprUnion()
 		}
@@ -11786,7 +11787,7 @@ yydefault:
 	case 845:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5021
+//line mysql_sql.y:5022
 		{
 			yyLOCAL = yyDollar[1].funcExprUnion()
 		}
@@ -11794,7 +11795,7 @@ yydefault:
 	case 846:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5025
+//line mysql_sql.y:5026
 		{
 			yyLOCAL = yyDollar[1].funcExprUnion()
 		}
@@ -11802,7 +11803,7 @@ yydefault:
 	case 847:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5029
+//line mysql_sql.y:5030
 		{
 			yyLOCAL = yyDollar[1].funcExprUnion()
 		}
@@ -11810,7 +11811,7 @@ yydefault:
 	case 848:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5034
+//line mysql_sql.y:5035
 		{
 			yyLOCAL = nil
 		}
@@ -11818,7 +11819,7 @@ yydefault:
 	case 849:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5038
+//line mysql_sql.y:5039
 		{
 			yyLOCAL = yyDollar[2].exprUnion()
 		}
@@ -11826,7 +11827,7 @@ yydefault:
 	case 850:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5043
+//line mysql_sql.y:5044
 		{
 			yyLOCAL = nil
 		}
@@ -11834,7 +11835,7 @@ yydefault:
 	case 851:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5047
+//line mysql_sql.y:5048
 		{
 			yyLOCAL = yyDollar[1].exprUnion()
 		}
@@ -11842,7 +11843,7 @@ yydefault:
 	case 852:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []*tree.When
-//line mysql_sql.y:5053
+//line mysql_sql.y:5054
 		{
 			yyLOCAL = []*tree.When{yyDollar[1].whenClauseUnion()}
 		}
@@ -11850,7 +11851,7 @@ yydefault:
 	case 853:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL []*tree.When
-//line mysql_sql.y:5057
+//line mysql_sql.y:5058
 		{
 			yyLOCAL = append(yyDollar[1].whenClauseListUnion(), yyDollar[2].whenClauseUnion())
 		}
@@ -11858,7 +11859,7 @@ yydefault:
 	case 854:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.When
-//line mysql_sql.y:5063
+//line mysql_sql.y:5064
 		{
 			yyLOCAL = &tree.When{
 				Cond: yyDollar[2].exprUnion(),
@@ -11869,7 +11870,7 @@ yydefault:
 	case 856:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5073
+//line mysql_sql.y:5074
 		{
 			name := yyDollar[1].str
 			if yyDollar[2].str != "" {
@@ -11890,7 +11891,7 @@ yydefault:
 	case 857:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5090
+//line mysql_sql.y:5091
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -11908,7 +11909,7 @@ yydefault:
 	case 859:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5107
+//line mysql_sql.y:5108
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -11925,7 +11926,7 @@ yydefault:
 	case 860:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5120
+//line mysql_sql.y:5121
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -11942,7 +11943,7 @@ yydefault:
 	case 861:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5133
+//line mysql_sql.y:5134
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -11958,7 +11959,7 @@ yydefault:
 	case 862:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5145
+//line mysql_sql.y:5146
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -11976,7 +11977,7 @@ yydefault:
 	case 863:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5159
+//line mysql_sql.y:5160
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -11995,7 +11996,7 @@ yydefault:
 	case 864:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5174
+//line mysql_sql.y:5175
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -12014,7 +12015,7 @@ yydefault:
 	case 865:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5189
+//line mysql_sql.y:5190
 		{
 			name := yyDollar[1].str
 			if yyDollar[2].str != "" {
@@ -12035,7 +12036,7 @@ yydefault:
 	case 866:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:5206
+//line mysql_sql.y:5207
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -12052,13 +12053,13 @@ yydefault:
 		yyVAL.union = yyLOCAL
 	case 867:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:5221
+//line mysql_sql.y:5222
 		{
 		}
 	case 870:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5227
+//line mysql_sql.y:5228
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12071,7 +12072,7 @@ yydefault:
 	case 871:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5236
+//line mysql_sql.y:5237
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12083,7 +12084,7 @@ yydefault:
 	case 872:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5244
+//line mysql_sql.y:5245
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12095,7 +12096,7 @@ yydefault:
 	case 873:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5252
+//line mysql_sql.y:5253
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12108,7 +12109,7 @@ yydefault:
 	case 874:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5261
+//line mysql_sql.y:5262
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12121,7 +12122,7 @@ yydefault:
 	case 875:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5270
+//line mysql_sql.y:5271
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12134,7 +12135,7 @@ yydefault:
 	case 876:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5279
+//line mysql_sql.y:5280
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12147,7 +12148,7 @@ yydefault:
 	case 877:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5288
+//line mysql_sql.y:5289
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			es := tree.NewNumValWithType(constant.MakeString("*"), "*", false, tree.P_char)
@@ -12160,7 +12161,7 @@ yydefault:
 	case 878:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5297
+//line mysql_sql.y:5298
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12173,7 +12174,7 @@ yydefault:
 	case 879:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5306
+//line mysql_sql.y:5307
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12186,7 +12187,7 @@ yydefault:
 	case 880:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5315
+//line mysql_sql.y:5316
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12199,7 +12200,7 @@ yydefault:
 	case 881:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5324
+//line mysql_sql.y:5325
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12212,7 +12213,7 @@ yydefault:
 	case 882:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5333
+//line mysql_sql.y:5334
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12225,7 +12226,7 @@ yydefault:
 	case 883:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5342
+//line mysql_sql.y:5343
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12238,7 +12239,7 @@ yydefault:
 	case 884:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5351
+//line mysql_sql.y:5352
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12251,7 +12252,7 @@ yydefault:
 	case 888:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5367
+//line mysql_sql.y:5368
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12263,7 +12264,7 @@ yydefault:
 	case 889:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5375
+//line mysql_sql.y:5376
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12275,7 +12276,7 @@ yydefault:
 	case 890:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5383
+//line mysql_sql.y:5384
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12287,7 +12288,7 @@ yydefault:
 	case 891:
 		yyDollar = yyS[yypt-8 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5391
+//line mysql_sql.y:5392
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12299,7 +12300,7 @@ yydefault:
 	case 892:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5399
+//line mysql_sql.y:5400
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			timeUinit := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char)
@@ -12312,7 +12313,7 @@ yydefault:
 	case 893:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5408
+//line mysql_sql.y:5409
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12324,7 +12325,7 @@ yydefault:
 	case 894:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5416
+//line mysql_sql.y:5417
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12337,7 +12338,7 @@ yydefault:
 	case 895:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5425
+//line mysql_sql.y:5426
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12350,7 +12351,7 @@ yydefault:
 	case 896:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5434
+//line mysql_sql.y:5435
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12362,7 +12363,7 @@ yydefault:
 	case 897:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5442
+//line mysql_sql.y:5443
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12374,7 +12375,7 @@ yydefault:
 	case 898:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5450
+//line mysql_sql.y:5451
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			arg1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char)
@@ -12387,7 +12388,7 @@ yydefault:
 	case 899:
 		yyDollar = yyS[yypt-7 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5459
+//line mysql_sql.y:5460
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			arg1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char)
@@ -12400,7 +12401,7 @@ yydefault:
 	case 900:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5469
+//line mysql_sql.y:5470
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			a1 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char)
@@ -12413,14 +12414,14 @@ yydefault:
 		yyVAL.union = yyLOCAL
 	case 906:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line mysql_sql.y:5490
+//line mysql_sql.y:5491
 		{
 			yyVAL.str = yyDollar[1].str
 		}
 	case 935:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5526
+//line mysql_sql.y:5527
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			var es tree.Exprs = nil
@@ -12436,7 +12437,7 @@ yydefault:
 	case 936:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5538
+//line mysql_sql.y:5539
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			var es tree.Exprs = nil
@@ -12452,7 +12453,7 @@ yydefault:
 	case 937:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5552
+//line mysql_sql.y:5553
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12464,7 +12465,7 @@ yydefault:
 	case 938:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5560
+//line mysql_sql.y:5561
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12475,7 +12476,7 @@ yydefault:
 	case 939:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5567
+//line mysql_sql.y:5568
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			yyLOCAL = &tree.FuncExpr{
@@ -12486,7 +12487,7 @@ yydefault:
 	case 940:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5574
+//line mysql_sql.y:5575
 		{
 			name := tree.SetUnresolvedName(strings.ToLower(yyDollar[1].str))
 			var es tree.Exprs = nil
@@ -12502,7 +12503,7 @@ yydefault:
 	case 941:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5586
+//line mysql_sql.y:5587
 		{
 			name := tree.SetUnresolvedName("char")
 			yyLOCAL = &tree.FuncExpr{
@@ -12514,7 +12515,7 @@ yydefault:
 	case 942:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5594
+//line mysql_sql.y:5595
 		{
 			cn := tree.NewNumValWithType(constant.MakeString(yyDollar[5].str), yyDollar[5].str, false, tree.P_char)
 			es := yyDollar[3].exprsUnion()
@@ -12529,7 +12530,7 @@ yydefault:
 	case 943:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5605
+//line mysql_sql.y:5606
 		{
 			val := tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char)
 			name := tree.SetUnresolvedName("date")
@@ -12542,7 +12543,7 @@ yydefault:
 	case 944:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5614
+//line mysql_sql.y:5615
 		{
 			val := tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char)
 			name := tree.SetUnresolvedName("time")
@@ -12555,7 +12556,7 @@ yydefault:
 	case 945:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5623
+//line mysql_sql.y:5624
 		{
 			name := tree.SetUnresolvedName("insert")
 			yyLOCAL = &tree.FuncExpr{
@@ -12567,7 +12568,7 @@ yydefault:
 	case 946:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5631
+//line mysql_sql.y:5632
 		{
 			es := tree.Exprs{yyDollar[3].exprUnion()}
 			es = append(es, yyDollar[5].exprUnion())
@@ -12581,7 +12582,7 @@ yydefault:
 	case 947:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5641
+//line mysql_sql.y:5642
 		{
 			name := tree.SetUnresolvedName("password")
 			yyLOCAL = &tree.FuncExpr{
@@ -12593,7 +12594,7 @@ yydefault:
 	case 948:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5649
+//line mysql_sql.y:5650
 		{
 			name := tree.SetUnresolvedName("binary")
 			yyLOCAL = &tree.FuncExpr{
@@ -12605,7 +12606,7 @@ yydefault:
 	case 949:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.FuncExpr
-//line mysql_sql.y:5657
+//line mysql_sql.y:5658
 		{
 			val := tree.NewNumValWithType(constant.MakeString(yyDollar[2].str), yyDollar[2].str, false, tree.P_char)
 			name := tree.SetUnresolvedName("timestamp")
@@ -12618,7 +12619,7 @@ yydefault:
 	case 950:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5667
+//line mysql_sql.y:5668
 		{
 			yyLOCAL = nil
 		}
@@ -12626,7 +12627,7 @@ yydefault:
 	case 951:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5671
+//line mysql_sql.y:5672
 		{
 			yyLOCAL = yyDollar[1].exprUnion()
 		}
@@ -12634,7 +12635,7 @@ yydefault:
 	case 952:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5677
+//line mysql_sql.y:5678
 		{
 			yyLOCAL = nil
 		}
@@ -12642,7 +12643,7 @@ yydefault:
 	case 953:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5681
+//line mysql_sql.y:5682
 		{
 			ival, errStr := util.GetInt64(yyDollar[2].item)
 			if errStr != "" {
@@ -12655,18 +12656,18 @@ yydefault:
 		yyVAL.union = yyLOCAL
 	case 960:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:5700
+//line mysql_sql.y:5701
 		{
 		}
 	case 961:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line mysql_sql.y:5702
+//line mysql_sql.y:5703
 		{
 		}
 	case 994:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5742
+//line mysql_sql.y:5743
 		{
 			name := tree.SetUnresolvedName("interval")
 			arg2 := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), yyDollar[3].str, false, tree.P_char)
@@ -12679,7 +12680,7 @@ yydefault:
 	case 995:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.FuncType
-//line mysql_sql.y:5752
+//line mysql_sql.y:5753
 		{
 			yyLOCAL = tree.FUNC_TYPE_DEFAULT
 		}
@@ -12687,7 +12688,7 @@ yydefault:
 	case 996:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.FuncType
-//line mysql_sql.y:5756
+//line mysql_sql.y:5757
 		{
 			yyLOCAL = tree.FUNC_TYPE_DISTINCT
 		}
@@ -12695,7 +12696,7 @@ yydefault:
 	case 997:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.FuncType
-//line mysql_sql.y:5760
+//line mysql_sql.y:5761
 		{
 			yyLOCAL = tree.FUNC_TYPE_ALL
 		}
@@ -12703,7 +12704,7 @@ yydefault:
 	case 998:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.Tuple
-//line mysql_sql.y:5766
+//line mysql_sql.y:5767
 		{
 			yyLOCAL = tree.NewTuple(yyDollar[2].exprsUnion())
 		}
@@ -12711,7 +12712,7 @@ yydefault:
 	case 999:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.Exprs
-//line mysql_sql.y:5771
+//line mysql_sql.y:5772
 		{
 			yyLOCAL = nil
 		}
@@ -12719,7 +12720,7 @@ yydefault:
 	case 1000:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Exprs
-//line mysql_sql.y:5775
+//line mysql_sql.y:5776
 		{
 			yyLOCAL = yyDollar[1].exprsUnion()
 		}
@@ -12727,7 +12728,7 @@ yydefault:
 	case 1001:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Exprs
-//line mysql_sql.y:5781
+//line mysql_sql.y:5782
 		{
 			yyLOCAL = tree.Exprs{yyDollar[1].exprUnion()}
 		}
@@ -12735,7 +12736,7 @@ yydefault:
 	case 1002:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Exprs
-//line mysql_sql.y:5785
+//line mysql_sql.y:5786
 		{
 			yyLOCAL = append(yyDollar[1].exprsUnion(), yyDollar[3].exprUnion())
 		}
@@ -12743,7 +12744,7 @@ yydefault:
 	case 1003:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5792
+//line mysql_sql.y:5793
 		{
 			yyLOCAL = tree.NewAndExpr(yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12751,7 +12752,7 @@ yydefault:
 	case 1004:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5796
+//line mysql_sql.y:5797
 		{
 			yyLOCAL = tree.NewOrExpr(yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12759,7 +12760,7 @@ yydefault:
 	case 1005:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5800
+//line mysql_sql.y:5801
 		{
 			name := tree.SetUnresolvedName(strings.ToLower("concat"))
 			yyLOCAL = &tree.FuncExpr{
@@ -12771,7 +12772,7 @@ yydefault:
 	case 1006:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5808
+//line mysql_sql.y:5809
 		{
 			yyLOCAL = tree.NewXorExpr(yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12779,7 +12780,7 @@ yydefault:
 	case 1007:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5812
+//line mysql_sql.y:5813
 		{
 			yyLOCAL = tree.NewNotExpr(yyDollar[2].exprUnion())
 		}
@@ -12787,7 +12788,7 @@ yydefault:
 	case 1008:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5816
+//line mysql_sql.y:5817
 		{
 			yyLOCAL = tree.NewComparisonExpr(tree.EQUAL, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12795,7 +12796,7 @@ yydefault:
 	case 1009:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5820
+//line mysql_sql.y:5821
 		{
 			yyLOCAL = tree.NewComparisonExpr(tree.NOT_EQUAL, yyDollar[1].exprUnion(), yyDollar[4].exprUnion())
 		}
@@ -12803,7 +12804,7 @@ yydefault:
 	case 1010:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5824
+//line mysql_sql.y:5825
 		{
 			arg := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), "", false, tree.P_char)
 			yyLOCAL = tree.NewComparisonExpr(tree.EQUAL, yyDollar[1].exprUnion(), arg)
@@ -12812,7 +12813,7 @@ yydefault:
 	case 1011:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5829
+//line mysql_sql.y:5830
 		{
 			arg := tree.NewNumValWithType(constant.MakeString(yyDollar[3].str), "", false, tree.P_char)
 			yyLOCAL = tree.NewComparisonExpr(tree.NOT_EQUAL, yyDollar[1].exprUnion(), arg)
@@ -12821,7 +12822,7 @@ yydefault:
 	case 1012:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5834
+//line mysql_sql.y:5835
 		{
 			yyLOCAL = yyDollar[1].exprUnion()
 		}
@@ -12829,7 +12830,7 @@ yydefault:
 	case 1013:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5840
+//line mysql_sql.y:5841
 		{
 			yyLOCAL = tree.NewIsNullExpr(yyDollar[1].exprUnion())
 		}
@@ -12837,7 +12838,7 @@ yydefault:
 	case 1014:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5844
+//line mysql_sql.y:5845
 		{
 			yyLOCAL = tree.NewIsNotNullExpr(yyDollar[1].exprUnion())
 		}
@@ -12845,7 +12846,7 @@ yydefault:
 	case 1015:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5848
+//line mysql_sql.y:5849
 		{
 			yyLOCAL = tree.NewComparisonExpr(yyDollar[2].comparisonOpUnion(), yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12853,7 +12854,7 @@ yydefault:
 	case 1016:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5852
+//line mysql_sql.y:5853
 		{
 			yyLOCAL = tree.NewSubqueryComparisonExpr(yyDollar[2].comparisonOpUnion(), yyDollar[3].comparisonOpUnion(), yyDollar[1].exprUnion(), yyDollar[4].subqueryUnion())
 		}
@@ -12861,7 +12862,7 @@ yydefault:
 	case 1018:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5859
+//line mysql_sql.y:5860
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeBool(true), "", false, tree.P_bool)
 		}
@@ -12869,7 +12870,7 @@ yydefault:
 	case 1019:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5863
+//line mysql_sql.y:5864
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeBool(false), "", false, tree.P_bool)
 		}
@@ -12877,7 +12878,7 @@ yydefault:
 	case 1020:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5869
+//line mysql_sql.y:5870
 		{
 			yyLOCAL = tree.NewComparisonExpr(tree.IN, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12885,7 +12886,7 @@ yydefault:
 	case 1021:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5873
+//line mysql_sql.y:5874
 		{
 			yyLOCAL = tree.NewComparisonExpr(tree.NOT_IN, yyDollar[1].exprUnion(), yyDollar[4].exprUnion())
 		}
@@ -12893,7 +12894,7 @@ yydefault:
 	case 1022:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5877
+//line mysql_sql.y:5878
 		{
 			yyLOCAL = tree.NewComparisonExprWithEscape(tree.LIKE, yyDollar[1].exprUnion(), yyDollar[3].exprUnion(), yyDollar[4].exprUnion())
 		}
@@ -12901,7 +12902,7 @@ yydefault:
 	case 1023:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5881
+//line mysql_sql.y:5882
 		{
 			yyLOCAL = tree.NewComparisonExprWithEscape(tree.NOT_LIKE, yyDollar[1].exprUnion(), yyDollar[4].exprUnion(), yyDollar[5].exprUnion())
 		}
@@ -12909,7 +12910,7 @@ yydefault:
 	case 1024:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5885
+//line mysql_sql.y:5886
 		{
 			yyLOCAL = tree.NewComparisonExpr(tree.REG_MATCH, yyDollar[1].exprUnion(), yyDollar[3].exprUnion())
 		}
@@ -12917,7 +12918,7 @@ yydefault:
 	case 1025:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5889
+//line mysql_sql.y:5890
 		{
 			yyLOCAL = tree.NewComparisonExpr(tree.NOT_REG_MATCH, yyDollar[1].exprUnion(), yyDollar[4].exprUnion())
 		}
@@ -12925,7 +12926,7 @@ yydefault:
 	case 1026:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5893
+//line mysql_sql.y:5894
 		{
 			yyLOCAL = tree.NewRangeCond(false, yyDollar[1].exprUnion(), yyDollar[3].exprUnion(), yyDollar[5].exprUnion())
 		}
@@ -12933,7 +12934,7 @@ yydefault:
 	case 1027:
 		yyDollar = yyS[yypt-6 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5897
+//line mysql_sql.y:5898
 		{
 			yyLOCAL = tree.NewRangeCond(true, yyDollar[1].exprUnion(), yyDollar[4].exprUnion(), yyDollar[6].exprUnion())
 		}
@@ -12941,7 +12942,7 @@ yydefault:
 	case 1029:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5903
+//line mysql_sql.y:5904
 		{
 			yyLOCAL = nil
 		}
@@ -12949,7 +12950,7 @@ yydefault:
 	case 1030:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5907
+//line mysql_sql.y:5908
 		{
 			yyLOCAL = yyDollar[2].exprUnion()
 		}
@@ -12957,7 +12958,7 @@ yydefault:
 	case 1031:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5913
+//line mysql_sql.y:5914
 		{
 			yyLOCAL = yyDollar[1].tupleUnion()
 		}
@@ -12965,7 +12966,7 @@ yydefault:
 	case 1032:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5917
+//line mysql_sql.y:5918
 		{
 			yyLOCAL = yyDollar[1].subqueryUnion()
 		}
@@ -12973,7 +12974,7 @@ yydefault:
 	case 1033:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5924
+//line mysql_sql.y:5925
 		{
 			yyLOCAL = tree.ALL
 		}
@@ -12981,7 +12982,7 @@ yydefault:
 	case 1034:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5928
+//line mysql_sql.y:5929
 		{
 			yyLOCAL = tree.ANY
 		}
@@ -12989,7 +12990,7 @@ yydefault:
 	case 1035:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5932
+//line mysql_sql.y:5933
 		{
 			yyLOCAL = tree.SOME
 		}
@@ -12997,7 +12998,7 @@ yydefault:
 	case 1036:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5938
+//line mysql_sql.y:5939
 		{
 			yyLOCAL = tree.EQUAL
 		}
@@ -13005,7 +13006,7 @@ yydefault:
 	case 1037:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5942
+//line mysql_sql.y:5943
 		{
 			yyLOCAL = tree.LESS_THAN
 		}
@@ -13013,7 +13014,7 @@ yydefault:
 	case 1038:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5946
+//line mysql_sql.y:5947
 		{
 			yyLOCAL = tree.GREAT_THAN
 		}
@@ -13021,7 +13022,7 @@ yydefault:
 	case 1039:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5950
+//line mysql_sql.y:5951
 		{
 			yyLOCAL = tree.LESS_THAN_EQUAL
 		}
@@ -13029,7 +13030,7 @@ yydefault:
 	case 1040:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5954
+//line mysql_sql.y:5955
 		{
 			yyLOCAL = tree.GREAT_THAN_EQUAL
 		}
@@ -13037,7 +13038,7 @@ yydefault:
 	case 1041:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5958
+//line mysql_sql.y:5959
 		{
 			yyLOCAL = tree.NOT_EQUAL
 		}
@@ -13045,7 +13046,7 @@ yydefault:
 	case 1042:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ComparisonOp
-//line mysql_sql.y:5962
+//line mysql_sql.y:5963
 		{
 			yyLOCAL = tree.NULL_SAFE_EQUAL
 		}
@@ -13053,7 +13054,7 @@ yydefault:
 	case 1043:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:5968
+//line mysql_sql.y:5969
 		{
 			yyLOCAL = tree.NewAttributePrimaryKey()
 		}
@@ -13061,7 +13062,7 @@ yydefault:
 	case 1044:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:5972
+//line mysql_sql.y:5973
 		{
 			yyLOCAL = tree.NewAttributeUniqueKey()
 		}
@@ -13069,7 +13070,7 @@ yydefault:
 	case 1045:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:5976
+//line mysql_sql.y:5977
 		{
 			yyLOCAL = tree.NewAttributeUnique()
 		}
@@ -13077,7 +13078,7 @@ yydefault:
 	case 1046:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.ColumnAttribute
-//line mysql_sql.y:5980
+//line mysql_sql.y:5981
 		{
 			yyLOCAL = tree.NewAttributeKey()
 		}
@@ -13085,7 +13086,7 @@ yydefault:
 	case 1047:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5986
+//line mysql_sql.y:5987
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_char)
 		}
@@ -13093,7 +13094,7 @@ yydefault:
 	case 1048:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:5990
+//line mysql_sql.y:5991
 		{
 			str := fmt.Sprintf("%v", yyDollar[1].item)
 			switch v := yyDollar[1].item.(type) {
@@ -13110,7 +13111,7 @@ yydefault:
 	case 1049:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6003
+//line mysql_sql.y:6004
 		{
 			fval := yyDollar[1].item.(float64)
 			yyLOCAL = tree.NewNumValWithType(constant.MakeFloat64(fval), yylex.(*Lexer).scanner.LastToken, false, tree.P_float64)
@@ -13119,7 +13120,7 @@ yydefault:
 	case 1050:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6008
+//line mysql_sql.y:6009
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeBool(true), "true", false, tree.P_bool)
 		}
@@ -13127,7 +13128,7 @@ yydefault:
 	case 1051:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6012
+//line mysql_sql.y:6013
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeBool(false), "false", false, tree.P_bool)
 		}
@@ -13135,7 +13136,7 @@ yydefault:
 	case 1052:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6016
+//line mysql_sql.y:6017
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeUnknown(), "null", false, tree.P_null)
 		}
@@ -13143,7 +13144,7 @@ yydefault:
 	case 1053:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6020
+//line mysql_sql.y:6021
 		{
 			switch v := yyDollar[1].item.(type) {
 			case uint64:
@@ -13161,7 +13162,7 @@ yydefault:
 	case 1054:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6034
+//line mysql_sql.y:6035
 		{
 			yyLOCAL = tree.NewNumValWithType(constant.MakeString(yyDollar[1].str), yyDollar[1].str, false, tree.P_decimal)
 		}
@@ -13169,7 +13170,7 @@ yydefault:
 	case 1055:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6038
+//line mysql_sql.y:6039
 		{
 			switch v := yyDollar[1].item.(type) {
 			case uint64:
@@ -13187,7 +13188,7 @@ yydefault:
 	case 1056:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL tree.Expr
-//line mysql_sql.y:6052
+//line mysql_sql.y:6053
 		{
 			yyLOCAL = tree.NewParamExpr(yylex.(*Lexer).GetParamIndex())
 		}
@@ -13195,7 +13196,7 @@ yydefault:
 	case 1057:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6058
+//line mysql_sql.y:6059
 		{
 			yyLOCAL = yyDollar[1].columnTypeUnion()
 			yyLOCAL.InternalType.Unsigned = yyDollar[2].unsignedOptUnion()
@@ -13205,7 +13206,7 @@ yydefault:
 	case 1061:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6069
+//line mysql_sql.y:6070
 		{
 			yyLOCAL = yyDollar[1].columnTypeUnion()
 			yyLOCAL.InternalType.DisplayWith = yyDollar[2].lengthOptUnion()
@@ -13214,7 +13215,7 @@ yydefault:
 	case 1062:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6074
+//line mysql_sql.y:6075
 		{
 			yyLOCAL = yyDollar[1].columnTypeUnion()
 		}
@@ -13222,7 +13223,7 @@ yydefault:
 	case 1063:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6080
+//line mysql_sql.y:6081
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13238,7 +13239,7 @@ yydefault:
 	case 1064:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6092
+//line mysql_sql.y:6093
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13254,7 +13255,7 @@ yydefault:
 	case 1065:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6104
+//line mysql_sql.y:6105
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13270,7 +13271,7 @@ yydefault:
 	case 1066:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6116
+//line mysql_sql.y:6117
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13287,7 +13288,7 @@ yydefault:
 	case 1067:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6129
+//line mysql_sql.y:6130
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13304,7 +13305,7 @@ yydefault:
 	case 1068:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6142
+//line mysql_sql.y:6143
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13321,7 +13322,7 @@ yydefault:
 	case 1069:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6155
+//line mysql_sql.y:6156
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13338,7 +13339,7 @@ yydefault:
 	case 1070:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6168
+//line mysql_sql.y:6169
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13355,7 +13356,7 @@ yydefault:
 	case 1071:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6181
+//line mysql_sql.y:6182
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13372,7 +13373,7 @@ yydefault:
 	case 1072:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6194
+//line mysql_sql.y:6195
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13389,7 +13390,7 @@ yydefault:
 	case 1073:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6207
+//line mysql_sql.y:6208
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13406,7 +13407,7 @@ yydefault:
 	case 1074:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6220
+//line mysql_sql.y:6221
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13423,7 +13424,7 @@ yydefault:
 	case 1075:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6233
+//line mysql_sql.y:6234
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13440,7 +13441,7 @@ yydefault:
 	case 1076:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6246
+//line mysql_sql.y:6247
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13457,7 +13458,7 @@ yydefault:
 	case 1077:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6261
+//line mysql_sql.y:6262
 		{
 			locale := ""
 			if yyDollar[2].lengthScaleOptUnion().DisplayWith > 255 {
@@ -13484,7 +13485,7 @@ yydefault:
 	case 1078:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6284
+//line mysql_sql.y:6285
 		{
 			locale := ""
 			if yyDollar[2].lengthScaleOptUnion().Precision != tree.NotDefineDec && yyDollar[2].lengthScaleOptUnion().Precision > yyDollar[2].lengthScaleOptUnion().DisplayWith {
@@ -13524,7 +13525,7 @@ yydefault:
 	case 1079:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6321
+//line mysql_sql.y:6322
 		{
 			locale := ""
 			if yyDollar[2].lengthScaleOptUnion().Precision != tree.NotDefineDec && yyDollar[2].lengthScaleOptUnion().Precision > yyDollar[2].lengthScaleOptUnion().DisplayWith {
@@ -13564,7 +13565,7 @@ yydefault:
 	case 1080:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6369
+//line mysql_sql.y:6370
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13583,7 +13584,7 @@ yydefault:
 	case 1081:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6386
+//line mysql_sql.y:6387
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13599,7 +13600,7 @@ yydefault:
 	case 1082:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6398
+//line mysql_sql.y:6399
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13618,7 +13619,7 @@ yydefault:
 	case 1083:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6413
+//line mysql_sql.y:6414
 		{
 			locale := ""
 			if yyDollar[2].lengthOptUnion() < 0 || yyDollar[2].lengthOptUnion() > 6 {
@@ -13642,7 +13643,7 @@ yydefault:
 	case 1084:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6433
+//line mysql_sql.y:6434
 		{
 			locale := ""
 			if yyDollar[2].lengthOptUnion() < 0 || yyDollar[2].lengthOptUnion() > 6 {
@@ -13666,7 +13667,7 @@ yydefault:
 	case 1085:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6453
+//line mysql_sql.y:6454
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13684,7 +13685,7 @@ yydefault:
 	case 1086:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6469
+//line mysql_sql.y:6470
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13701,7 +13702,7 @@ yydefault:
 	case 1087:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6482
+//line mysql_sql.y:6483
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13718,7 +13719,7 @@ yydefault:
 	case 1088:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6495
+//line mysql_sql.y:6496
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13735,7 +13736,7 @@ yydefault:
 	case 1089:
 		yyDollar = yyS[yypt-2 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6508
+//line mysql_sql.y:6509
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13752,7 +13753,7 @@ yydefault:
 	case 1090:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6521
+//line mysql_sql.y:6522
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13768,7 +13769,7 @@ yydefault:
 	case 1091:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6533
+//line mysql_sql.y:6534
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13784,7 +13785,7 @@ yydefault:
 	case 1092:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6545
+//line mysql_sql.y:6546
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13800,7 +13801,7 @@ yydefault:
 	case 1093:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6557
+//line mysql_sql.y:6558
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13816,7 +13817,7 @@ yydefault:
 	case 1094:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6569
+//line mysql_sql.y:6570
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13832,7 +13833,7 @@ yydefault:
 	case 1095:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6581
+//line mysql_sql.y:6582
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13848,7 +13849,7 @@ yydefault:
 	case 1096:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6593
+//line mysql_sql.y:6594
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13864,7 +13865,7 @@ yydefault:
 	case 1097:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6605
+//line mysql_sql.y:6606
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13880,7 +13881,7 @@ yydefault:
 	case 1098:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6617
+//line mysql_sql.y:6618
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13896,7 +13897,7 @@ yydefault:
 	case 1099:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6629
+//line mysql_sql.y:6630
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13913,7 +13914,7 @@ yydefault:
 	case 1100:
 		yyDollar = yyS[yypt-4 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6642
+//line mysql_sql.y:6643
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13930,7 +13931,7 @@ yydefault:
 	case 1101:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL *tree.T
-//line mysql_sql.y:6657
+//line mysql_sql.y:6658
 		{
 			locale := ""
 			yyLOCAL = &tree.T{
@@ -13946,7 +13947,7 @@ yydefault:
 	case 1102:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:6680
+//line mysql_sql.y:6681
 		{
 			yyLOCAL = make([]string, 0, 4)
 			yyLOCAL = append(yyLOCAL, yyDollar[1].str)
@@ -13955,7 +13956,7 @@ yydefault:
 	case 1103:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL []string
-//line mysql_sql.y:6685
+//line mysql_sql.y:6686
 		{
 			yyLOCAL = append(yyDollar[1].strsUnion(), yyDollar[3].str)
 		}
@@ -13963,7 +13964,7 @@ yydefault:
 	case 1104:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int32
-//line mysql_sql.y:6691
+//line mysql_sql.y:6692
 		{
 			yyLOCAL = 0
 		}
@@ -13971,7 +13972,7 @@ yydefault:
 	case 1106:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int32
-//line mysql_sql.y:6698
+//line mysql_sql.y:6699
 		{
 			yyLOCAL = 0
 		}
@@ -13979,7 +13980,7 @@ yydefault:
 	case 1107:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL int32
-//line mysql_sql.y:6702
+//line mysql_sql.y:6703
 		{
 			yyLOCAL = int32(yyDollar[2].item.(int64))
 		}
@@ -13987,7 +13988,7 @@ yydefault:
 	case 1108:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL int32
-//line mysql_sql.y:6707
+//line mysql_sql.y:6708
 		{
 			yyLOCAL = int32(-1)
 		}
@@ -13995,7 +13996,7 @@ yydefault:
 	case 1109:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL int32
-//line mysql_sql.y:6711
+//line mysql_sql.y:6712
 		{
 			yyLOCAL = int32(yyDollar[2].item.(int64))
 		}
@@ -14003,7 +14004,7 @@ yydefault:
 	case 1110:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL int32
-//line mysql_sql.y:6717
+//line mysql_sql.y:6718
 		{
 			yyLOCAL = tree.GetDisplayWith(int32(yyDollar[2].item.(int64)))
 		}
@@ -14011,7 +14012,7 @@ yydefault:
 	case 1111:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.LengthScaleOpt
-//line mysql_sql.y:6723
+//line mysql_sql.y:6724
 		{
 			yyLOCAL = tree.LengthScaleOpt{
 				DisplayWith: tree.NotDefineDisplayWidth,
@@ -14022,7 +14023,7 @@ yydefault:
 	case 1112:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.LengthScaleOpt
-//line mysql_sql.y:6730
+//line mysql_sql.y:6731
 		{
 			yyLOCAL = tree.LengthScaleOpt{
 				DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))),
@@ -14033,7 +14034,7 @@ yydefault:
 	case 1113:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.LengthScaleOpt
-//line mysql_sql.y:6737
+//line mysql_sql.y:6738
 		{
 			yyLOCAL = tree.LengthScaleOpt{
 				DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))),
@@ -14044,7 +14045,7 @@ yydefault:
 	case 1114:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL tree.LengthScaleOpt
-//line mysql_sql.y:6746
+//line mysql_sql.y:6747
 		{
 			yyLOCAL = tree.LengthScaleOpt{
 				DisplayWith: 34, // this is the default precision for decimal
@@ -14055,7 +14056,7 @@ yydefault:
 	case 1115:
 		yyDollar = yyS[yypt-3 : yypt+1]
 		var yyLOCAL tree.LengthScaleOpt
-//line mysql_sql.y:6753
+//line mysql_sql.y:6754
 		{
 			yyLOCAL = tree.LengthScaleOpt{
 				DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))),
@@ -14066,7 +14067,7 @@ yydefault:
 	case 1116:
 		yyDollar = yyS[yypt-5 : yypt+1]
 		var yyLOCAL tree.LengthScaleOpt
-//line mysql_sql.y:6760
+//line mysql_sql.y:6761
 		{
 			yyLOCAL = tree.LengthScaleOpt{
 				DisplayWith: tree.GetDisplayWith(int32(yyDollar[2].item.(int64))),
@@ -14077,7 +14078,7 @@ yydefault:
 	case 1117:
 		yyDollar = yyS[yypt-0 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:6769
+//line mysql_sql.y:6770
 		{
 			yyLOCAL = false
 		}
@@ -14085,7 +14086,7 @@ yydefault:
 	case 1118:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:6773
+//line mysql_sql.y:6774
 		{
 			yyLOCAL = true
 		}
@@ -14093,33 +14094,33 @@ yydefault:
 	case 1119:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:6777
+//line mysql_sql.y:6778
 		{
 			yyLOCAL = false
 		}
 		yyVAL.union = yyLOCAL
 	case 1120:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:6783
+//line mysql_sql.y:6784
 		{
 		}
 	case 1121:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		var yyLOCAL bool
-//line mysql_sql.y:6785
+//line mysql_sql.y:6786
 		{
 			yyLOCAL = true
 		}
 		yyVAL.union = yyLOCAL
 	case 1125:
 		yyDollar = yyS[yypt-0 : yypt+1]
-//line mysql_sql.y:6795
+//line mysql_sql.y:6796
 		{
 			yyVAL.str = ""
 		}
 	case 1126:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line mysql_sql.y:6799
+//line mysql_sql.y:6800
 		{
 			yyVAL.str = string(yyDollar[1].str)
 		}
diff --git a/pkg/sql/parsers/dialect/mysql/mysql_sql.y b/pkg/sql/parsers/dialect/mysql/mysql_sql.y
index 21e113e116f781b62ee8380e3001157b3aed4efa..fcab366192749b86b1780f53798428565175fd85 100644
--- a/pkg/sql/parsers/dialect/mysql/mysql_sql.y
+++ b/pkg/sql/parsers/dialect/mysql/mysql_sql.y
@@ -3886,6 +3886,7 @@ create_table_stmt:
 |   CREATE EXTERNAL TABLE not_exists_opt table_name '(' table_elem_list_opt ')' load_param_opt_2
     {
         $$ = &tree.CreateTable {
+            IfNotExists: $4,
             Table: *$5,
             Defs: $7,
             Param: $9,
diff --git a/pkg/sql/plan/query_builder.go b/pkg/sql/plan/query_builder.go
index 52335cd395f5b118cdd0abf724915435e2dd7043..bc8cef36348e1c805a427ae1ba705fe1e5f8c0f8 100644
--- a/pkg/sql/plan/query_builder.go
+++ b/pkg/sql/plan/query_builder.go
@@ -2037,7 +2037,7 @@ func (builder *QueryBuilder) pushdownFilters(nodeID int32, filters []*plan.Expr)
 
 	case plan.Node_PROJECT:
 		child := builder.qry.Nodes[node.Children[0]]
-		if child.NodeType == plan.Node_VALUE_SCAN && child.RowsetData == nil {
+		if (child.NodeType == plan.Node_VALUE_SCAN || child.NodeType == plan.Node_EXTERNAL_SCAN) && child.RowsetData == nil {
 			cantPushdown = filters
 			break
 		}
@@ -2060,7 +2060,7 @@ func (builder *QueryBuilder) pushdownFilters(nodeID int32, filters []*plan.Expr)
 
 		node.Children[0] = childID
 
-	case plan.Node_TABLE_SCAN:
+	case plan.Node_TABLE_SCAN, plan.Node_EXTERNAL_SCAN:
 		node.FilterList = append(node.FilterList, filters...)
 
 	default:
diff --git a/pkg/sql/plan/rule/predicate_pushdown.go b/pkg/sql/plan/rule/predicate_pushdown.go
index a285730829de0ec1fbe6ae772fc6e308d23e6a0a..a452ed0d562de5b7b0fec17463e6784c04ab0882 100644
--- a/pkg/sql/plan/rule/predicate_pushdown.go
+++ b/pkg/sql/plan/rule/predicate_pushdown.go
@@ -27,7 +27,7 @@ func NewPredicatePushdown() *PredicatePushdown {
 }
 
 func (r *PredicatePushdown) Match(n *plan.Node) bool {
-	return n.NodeType != plan.Node_TABLE_SCAN && len(n.FilterList) > 0
+	return n.NodeType != plan.Node_TABLE_SCAN && n.NodeType != plan.Node_EXTERNAL_SCAN && len(n.FilterList) > 0
 }
 
 func (r *PredicatePushdown) Apply(n *plan.Node, qry *plan.Query) {
diff --git a/pkg/vm/pipeline/pipeline.go b/pkg/vm/pipeline/pipeline.go
index db8a3bcff311375b6fae894372790b7333838937..c6f8d262b10c1b9a5e9075745f94d39d81376cc8 100644
--- a/pkg/vm/pipeline/pipeline.go
+++ b/pkg/vm/pipeline/pipeline.go
@@ -97,13 +97,14 @@ func (p *Pipeline) ConstRun(bat *batch.Batch, proc *process.Process) (bool, erro
 	// processing the batch according to the instructions
 	for {
 		proc.Reg.InputBatch = bat
-		end, err = vm.Run(p.instructions, proc)
+		if end, err = vm.Run(p.instructions, proc); err != nil || end {
+			return end, err
+		}
 		proc.Reg.InputBatch = nil
-		if end2, err2 := vm.Run(p.instructions, proc); err2 != nil || end2 {
-			break
+		if end, err = vm.Run(p.instructions, proc); err != nil || end {
+			return end, err
 		}
 	}
-	return end, err
 }
 
 func (p *Pipeline) MergeRun(proc *process.Process) (bool, error) {