diff --git a/cmd/importer/parser.go b/cmd/importer/parser.go index a1b0d4f2a4..4b7ee01b84 100644 --- a/cmd/importer/parser.go +++ b/cmd/importer/parser.go @@ -275,7 +275,7 @@ func parseIndex(table *table, stmt *ast.CreateIndexStmt) error { if table.name != stmt.Table.Name.L { return errors.Errorf("mismatch table name for create index - %s : %s", table.name, stmt.Table.Name.L) } - for _, indexCol := range stmt.IndexColNames { + for _, indexCol := range stmt.IndexPartSpecifications { name := indexCol.Column.Name.L if stmt.KeyType == ast.IndexKeyTypeUnique { table.uniqIndices[name] = table.findCol(table.columns, name) diff --git a/ddl/column.go b/ddl/column.go index 8662369216..743f742231 100644 --- a/ddl/column.go +++ b/ddl/column.go @@ -609,7 +609,7 @@ func generateOriginDefaultValue(col *model.ColumnInfo) (interface{}, error) { return odValue, nil } -func findColumnInIndexCols(c string, cols []*ast.IndexColName) bool { +func findColumnInIndexCols(c string, cols []*ast.IndexPartSpecification) bool { for _, c1 := range cols { if c == c1.Column.Name.L { return true diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 4fabc86e74..277524ff32 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -1010,7 +1010,7 @@ func (s *testIntegrationSuite5) TestBackwardCompatibility(c *C) { unique := false indexName := model.NewCIStr("idx_b") - idxColName := &ast.IndexColName{ + idxColName := &ast.IndexPartSpecification{ Column: &ast.ColumnName{ Schema: schemaName, Table: tableName, @@ -1018,7 +1018,7 @@ func (s *testIntegrationSuite5) TestBackwardCompatibility(c *C) { }, Length: types.UnspecifiedLength, } - idxColNames := []*ast.IndexColName{idxColName} + idxColNames := []*ast.IndexPartSpecification{idxColName} var indexOption *ast.IndexOption job := &model.Job{ SchemaID: schema.ID, diff --git a/ddl/ddl.go b/ddl/ddl.go index fcacfbb6b1..f791c02d1b 100644 --- a/ddl/ddl.go +++ b/ddl/ddl.go @@ -237,7 +237,7 @@ type DDL interface { RecoverTable(ctx sessionctx.Context, tbInfo *model.TableInfo, schemaID, autoID, dropJobID int64, snapshotTS uint64) (err error) DropView(ctx sessionctx.Context, tableIdent ast.Ident) (err error) CreateIndex(ctx sessionctx.Context, tableIdent ast.Ident, keyType ast.IndexKeyType, indexName model.CIStr, - columnNames []*ast.IndexColName, indexOption *ast.IndexOption, ifNotExists bool) error + columnNames []*ast.IndexPartSpecification, indexOption *ast.IndexOption, ifNotExists bool) error DropIndex(ctx sessionctx.Context, tableIdent ast.Ident, indexName model.CIStr, ifExists bool) error AlterTable(ctx sessionctx.Context, tableIdent ast.Ident, spec []*ast.AlterTableSpec) error TruncateTable(ctx sessionctx.Context, tableIdent ast.Ident) error diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index db16bcb555..923fd2bdfa 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -514,7 +514,7 @@ func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, o if colDef.Options != nil { length := types.UnspecifiedLength - keys := []*ast.IndexColName{ + keys := []*ast.IndexPartSpecification{ { Column: colDef.Name, Length: length, @@ -3300,7 +3300,7 @@ func getAnonymousIndex(t table.Table, colName model.CIStr) model.CIStr { } func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName model.CIStr, - idxColNames []*ast.IndexColName, indexOption *ast.IndexOption) error { + idxColNames []*ast.IndexPartSpecification, indexOption *ast.IndexOption) error { if !config.GetGlobalConfig().AlterPrimaryKey { return ErrUnsupportedModifyPrimaryKey.GenWithStack("Unsupported add primary key, alter-primary-key is false") } @@ -3362,7 +3362,7 @@ func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName m } func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.IndexKeyType, indexName model.CIStr, - idxColNames []*ast.IndexColName, indexOption *ast.IndexOption, ifNotExists bool) error { + idxColNames []*ast.IndexPartSpecification, indexOption *ast.IndexOption, ifNotExists bool) error { // not support Spatial and FullText index if keyType == ast.IndexKeyTypeFullText || keyType == ast.IndexKeyTypeSpatial { @@ -3432,8 +3432,8 @@ func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.Inde return errors.Trace(err) } -func buildFKInfo(fkName model.CIStr, keys []*ast.IndexColName, refer *ast.ReferenceDef, cols []*table.Column, tbInfo *model.TableInfo) (*model.FKInfo, error) { - if len(keys) != len(refer.IndexColNames) { +func buildFKInfo(fkName model.CIStr, keys []*ast.IndexPartSpecification, refer *ast.ReferenceDef, cols []*table.Column, tbInfo *model.TableInfo) (*model.FKInfo, error) { + if len(keys) != len(refer.IndexPartSpecifications) { return nil, infoschema.ErrForeignKeyNotMatch.GenWithStackByArgs("foreign key without name") } @@ -3495,8 +3495,8 @@ func buildFKInfo(fkName model.CIStr, keys []*ast.IndexColName, refer *ast.Refere fkInfo.Cols[i] = key.Column.Name } - fkInfo.RefCols = make([]model.CIStr, len(refer.IndexColNames)) - for i, key := range refer.IndexColNames { + fkInfo.RefCols = make([]model.CIStr, len(refer.IndexPartSpecifications)) + for i, key := range refer.IndexPartSpecifications { fkInfo.RefCols[i] = key.Column.Name } @@ -3506,7 +3506,7 @@ func buildFKInfo(fkName model.CIStr, keys []*ast.IndexColName, refer *ast.Refere return fkInfo, nil } -func (d *ddl) CreateForeignKey(ctx sessionctx.Context, ti ast.Ident, fkName model.CIStr, keys []*ast.IndexColName, refer *ast.ReferenceDef) error { +func (d *ddl) CreateForeignKey(ctx sessionctx.Context, ti ast.Ident, fkName model.CIStr, keys []*ast.IndexPartSpecification, refer *ast.ReferenceDef) error { is := d.infoHandle.Get() schema, ok := is.SchemaByName(ti.Schema) if !ok { diff --git a/ddl/ddl_test.go b/ddl/ddl_test.go index 6eb35c41a6..4b6abc5f7f 100644 --- a/ddl/ddl_test.go +++ b/ddl/ddl_test.go @@ -186,7 +186,7 @@ func buildCreateIdxJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, unique bo Type: model.ActionAddIndex, BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{unique, model.NewCIStr(indexName), - []*ast.IndexColName{{ + []*ast.IndexPartSpecification{{ Column: &ast.ColumnName{Name: model.NewCIStr(colName)}, Length: types.UnspecifiedLength}}}, } diff --git a/ddl/ddl_worker_test.go b/ddl/ddl_worker_test.go index b202009ab8..75ef3bd29d 100644 --- a/ddl/ddl_worker_test.go +++ b/ddl/ddl_worker_test.go @@ -252,14 +252,14 @@ func (s *testDDLSuite) TestIndexError(c *C) { doDDLJobErr(c, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, []interface{}{1}, ctx, d) doDDLJobErr(c, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, []interface{}{false, model.NewCIStr("t"), 1, - []*ast.IndexColName{{Column: &ast.ColumnName{Name: model.NewCIStr("c")}, Length: 256}}}, ctx, d) + []*ast.IndexPartSpecification{{Column: &ast.ColumnName{Name: model.NewCIStr("c")}, Length: 256}}}, ctx, d) doDDLJobErr(c, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, []interface{}{false, model.NewCIStr("c1_index"), 1, - []*ast.IndexColName{{Column: &ast.ColumnName{Name: model.NewCIStr("c")}, Length: 256}}}, ctx, d) + []*ast.IndexPartSpecification{{Column: &ast.ColumnName{Name: model.NewCIStr("c")}, Length: 256}}}, ctx, d) testCreateIndex(c, ctx, d, dbInfo, tblInfo, false, "c1_index", "c1") doDDLJobErr(c, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, []interface{}{false, model.NewCIStr("c1_index"), 1, - []*ast.IndexColName{{Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, Length: 256}}}, ctx, d) + []*ast.IndexPartSpecification{{Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, Length: 256}}}, ctx, d) // for dropping index doDDLJobErr(c, dbInfo.ID, tblInfo.ID, model.ActionDropIndex, []interface{}{1}, ctx, d) @@ -592,7 +592,7 @@ func (s *testDDLSuite) TestCancelJob(c *C) { updateTest(&tests[0]) idxOrigName := "idx" validArgs := []interface{}{false, model.NewCIStr(idxOrigName), - []*ast.IndexColName{{ + []*ast.IndexPartSpecification{{ Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, Length: -1, }}, nil} @@ -814,7 +814,7 @@ func (s *testDDLSuite) TestCancelJob(c *C) { updateTest(&tests[28]) idxOrigName = "primary" validArgs = []interface{}{false, model.NewCIStr(idxOrigName), - []*ast.IndexColName{{ + []*ast.IndexPartSpecification{{ Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, Length: -1, }}, nil} diff --git a/ddl/index.go b/ddl/index.go index 31b565e812..5a9e8aed23 100644 --- a/ddl/index.go +++ b/ddl/index.go @@ -53,7 +53,7 @@ const ( MaxCommentLength = 1024 ) -func buildIndexColumns(columns []*model.ColumnInfo, idxColNames []*ast.IndexColName) ([]*model.IndexColumn, error) { +func buildIndexColumns(columns []*model.ColumnInfo, idxColNames []*ast.IndexPartSpecification) ([]*model.IndexColumn, error) { // Build offsets. idxColumns := make([]*model.IndexColumn, 0, len(idxColNames)) @@ -90,7 +90,7 @@ func buildIndexColumns(columns []*model.ColumnInfo, idxColNames []*ast.IndexColN return idxColumns, nil } -func checkPKOnGeneratedColumn(tblInfo *model.TableInfo, idxColNames []*ast.IndexColName) (*model.ColumnInfo, error) { +func checkPKOnGeneratedColumn(tblInfo *model.TableInfo, idxColNames []*ast.IndexPartSpecification) (*model.ColumnInfo, error) { var lastCol *model.ColumnInfo for _, colName := range idxColNames { lastCol = getColumnInfoByName(tblInfo, colName.Column.Name.L) @@ -128,7 +128,7 @@ func checkIndexPrefixLength(columns []*model.ColumnInfo, idxColumns []*model.Ind return nil } -func checkIndexColumn(col *model.ColumnInfo, ic *ast.IndexColName) error { +func checkIndexColumn(col *model.ColumnInfo, ic *ast.IndexPartSpecification) error { if col.Flen == 0 && (types.IsTypeChar(col.FieldType.Tp) || types.IsTypeVarchar(col.FieldType.Tp)) { return errors.Trace(errWrongKeyColumn.GenWithStackByArgs(ic.Column.Name)) } @@ -203,7 +203,7 @@ func calcBytesLengthForDecimal(m int) int { return (m / 9 * 4) + ((m%9)+1)/2 } -func buildIndexInfo(tblInfo *model.TableInfo, indexName model.CIStr, idxColNames []*ast.IndexColName, state model.SchemaState) (*model.IndexInfo, error) { +func buildIndexInfo(tblInfo *model.TableInfo, indexName model.CIStr, idxColNames []*ast.IndexPartSpecification, state model.SchemaState) (*model.IndexInfo, error) { if err := checkTooLongIndex(indexName); err != nil { return nil, errors.Trace(err) } @@ -356,7 +356,7 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo var ( unique bool indexName model.CIStr - idxColNames []*ast.IndexColName + idxColNames []*ast.IndexPartSpecification indexOption *ast.IndexOption sqlMode mysql.SQLMode warnings []string diff --git a/ddl/partition.go b/ddl/partition.go index 75241571f6..8249281836 100644 --- a/ddl/partition.go +++ b/ddl/partition.go @@ -687,7 +687,7 @@ func checkRangePartitioningKeysConstraints(sctx sessionctx.Context, s *ast.Creat return nil } -func checkPartitionKeysConstraint(pi *model.PartitionInfo, idxColNames []*ast.IndexColName, tblInfo *model.TableInfo, isPK bool) error { +func checkPartitionKeysConstraint(pi *model.PartitionInfo, idxColNames []*ast.IndexPartSpecification, tblInfo *model.TableInfo, isPK bool) error { var ( partCols []*model.ColumnInfo err error @@ -772,7 +772,7 @@ type stringSlice interface { } // checkUniqueKeyIncludePartKey checks that the partitioning key is included in the constraint. -func checkUniqueKeyIncludePartKey(partCols stringSlice, idxCols []*ast.IndexColName) bool { +func checkUniqueKeyIncludePartKey(partCols stringSlice, idxCols []*ast.IndexPartSpecification) bool { for i := 0; i < partCols.Len(); i++ { partCol := partCols.At(i) if !findColumnInIndexCols(partCol, idxCols) { diff --git a/ddl/rollingback.go b/ddl/rollingback.go index 360743249b..3969805e4e 100644 --- a/ddl/rollingback.go +++ b/ddl/rollingback.go @@ -84,7 +84,7 @@ func convertNotStartAddIdxJob2RollbackJob(t *meta.Meta, job *model.Job, occuredE var ( unique bool indexName model.CIStr - idxColNames []*ast.IndexColName + idxColNames []*ast.IndexPartSpecification indexOption *ast.IndexOption ) err = job.DecodeArgs(&unique, &indexName, &idxColNames, &indexOption) diff --git a/executor/ddl.go b/executor/ddl.go index f897c060d9..2eef095dbb 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -195,7 +195,7 @@ func (e *DDLExec) executeCreateView(s *ast.CreateViewStmt) error { func (e *DDLExec) executeCreateIndex(s *ast.CreateIndexStmt) error { ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} err := domain.GetDomain(e.ctx).DDL().CreateIndex(e.ctx, ident, s.KeyType, model.NewCIStr(s.IndexName), - s.IndexColNames, s.IndexOption, s.IfNotExists) + s.IndexPartSpecifications, s.IndexOption, s.IfNotExists) return err } diff --git a/go.mod b/go.mod index 1f690691ae..a3fe566444 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808 // indirect github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef @@ -36,7 +37,7 @@ require ( github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e github.com/pingcap/kvproto v0.0.0-20191202044712-32be31591b03 github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 - github.com/pingcap/parser v0.0.0-20191205103532-f9aa02863ec0 + github.com/pingcap/parser v0.0.0-20191210055545-753e13bfdbf0 github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0 github.com/pingcap/sysutil v0.0.0-20191126040022-986c5b3ed9a3 github.com/pingcap/tidb-tools v3.0.6-0.20191106033616-90632dda3863+incompatible @@ -60,9 +61,9 @@ require ( go.uber.org/atomic v1.5.0 go.uber.org/automaxprocs v1.2.0 go.uber.org/zap v1.12.0 - golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c // indirect + golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 // indirect golang.org/x/net v0.0.0-20190909003024-a7b16738d86b - golang.org/x/sys v0.0.0-20190909082730-f460065e899a + golang.org/x/sys v0.0.0-20191210023423-ac6580df4449 golang.org/x/text v0.3.2 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect golang.org/x/tools v0.0.0-20191107010934-f79515f33823 diff --git a/go.sum b/go.sum index b4bb8c9d93..82abb15b88 100644 --- a/go.sum +++ b/go.sum @@ -128,8 +128,9 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -187,8 +188,10 @@ github.com/pingcap/kvproto v0.0.0-20191202044712-32be31591b03/go.mod h1:WWLmULLO github.com/pingcap/log v0.0.0-20190715063458-479153f07ebd/go.mod h1:WpHUKhNZ18v116SvGrmjkA9CBhYmuUTKL+p8JC9ANEw= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= -github.com/pingcap/parser v0.0.0-20191205103532-f9aa02863ec0 h1:gIBYyKaqynsMUZeo/HxW8OG0V4Kl8UsgKEr/QlnjykQ= -github.com/pingcap/parser v0.0.0-20191205103532-f9aa02863ec0/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= +github.com/pingcap/parser v0.0.0-20191209191717-b26f24ac026c h1:YS+2VBeqf5w+MTjdhnmOd937fd5P6zs/zwzKVOT3Xnk= +github.com/pingcap/parser v0.0.0-20191209191717-b26f24ac026c/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= +github.com/pingcap/parser v0.0.0-20191210055545-753e13bfdbf0 h1:BmayUSQpOj05pzVprTZ9HCoarUlap4gYNjlHijNxx8w= +github.com/pingcap/parser v0.0.0-20191210055545-753e13bfdbf0/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0 h1:GIEq+wZfrl2bcJxpuSrEH4H7/nlf5YdmpS+dU9lNIt8= github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0/go.mod h1:G/6rJpnYwM0LKMec2rI82/5Kg6GaZMvlfB+e6/tvYmI= github.com/pingcap/sysutil v0.0.0-20191126040022-986c5b3ed9a3 h1:HCNif3lukL83gNC2EBAoh2Qbz36+2p0bm0LjgnNfl1s= @@ -237,7 +240,6 @@ github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJ github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca h1:3fECS8atRjByijiI8yYiuwLwQ2ZxXobW7ua/8GRB3pI= github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -305,8 +307,9 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c h1:/nJuwDLoL/zrqY6gf57vxC+Pi+pZ8bfhpPkicO5H7W4= golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -339,9 +342,11 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190909082730-f460065e899a h1:mIzbOulag9/gXacgxKlFVwpCOWSfBT3/pDyyCwGA9as= golang.org/x/sys v0.0.0-20190909082730-f460065e899a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449 h1:gSbV7h1NRL2G1xTg/owz62CST1oJBmxy4QpMMregXVQ= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= diff --git a/planner/core/preprocess.go b/planner/core/preprocess.go index 8c2b192c17..111c10d378 100644 --- a/planner/core/preprocess.go +++ b/planner/core/preprocess.go @@ -500,7 +500,7 @@ func (p *preprocessor) checkCreateIndexGrammar(stmt *ast.CreateIndexStmt) { p.err = ddl.ErrWrongTableName.GenWithStackByArgs(tName) return } - p.err = checkIndexInfo(stmt.IndexName, stmt.IndexColNames) + p.err = checkIndexInfo(stmt.IndexName, stmt.IndexPartSpecifications) } func (p *preprocessor) checkRenameTableGrammar(stmt *ast.RenameTableStmt) { @@ -578,10 +578,10 @@ func (p *preprocessor) checkAlterTableGrammar(stmt *ast.AlterTableStmt) { } // checkDuplicateColumnName checks if index exists duplicated columns. -func checkDuplicateColumnName(indexColNames []*ast.IndexColName) error { - colNames := make(map[string]struct{}, len(indexColNames)) - for _, indexColName := range indexColNames { - name := indexColName.Column.Name +func checkDuplicateColumnName(IndexPartSpecifications []*ast.IndexPartSpecification) error { + colNames := make(map[string]struct{}, len(IndexPartSpecifications)) + for _, IndexColNameWithExpr := range IndexPartSpecifications { + name := IndexColNameWithExpr.Column.Name if _, ok := colNames[name.L]; ok { return infoschema.ErrColumnExists.GenWithStackByArgs(name) } @@ -591,14 +591,14 @@ func checkDuplicateColumnName(indexColNames []*ast.IndexColName) error { } // checkIndexInfo checks index name and index column names. -func checkIndexInfo(indexName string, indexColNames []*ast.IndexColName) error { +func checkIndexInfo(indexName string, IndexPartSpecifications []*ast.IndexPartSpecification) error { if strings.EqualFold(indexName, mysql.PrimaryKeyName) { return ddl.ErrWrongNameForIndex.GenWithStackByArgs(indexName) } - if len(indexColNames) > mysql.MaxKeyParts { + if len(IndexPartSpecifications) > mysql.MaxKeyParts { return infoschema.ErrTooManyKeyParts.GenWithStackByArgs(mysql.MaxKeyParts) } - return checkDuplicateColumnName(indexColNames) + return checkDuplicateColumnName(IndexPartSpecifications) } // checkColumn checks if the column definition is valid.