*: rename IndexColName to IndexPartSpecification (#13941)
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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}}},
|
||||
}
|
||||
|
||||
@ -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}
|
||||
|
||||
10
ddl/index.go
10
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
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
7
go.mod
7
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
|
||||
|
||||
17
go.sum
17
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=
|
||||
|
||||
@ -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.
|
||||
|
||||
Reference in New Issue
Block a user