Skip to content

Commit

Permalink
ddl: allocate column ID and index ID in TableInfo. (pingcap#2205)
Browse files Browse the repository at this point in the history
  • Loading branch information
coocood authored Dec 9, 2016
1 parent 5917a78 commit 99b3465
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 50 deletions.
7 changes: 6 additions & 1 deletion ddl/column.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ func (d *ddl) createColumnInfo(tblInfo *model.TableInfo, colInfo *model.ColumnIn
// Insert position is after the mentioned column.
position = c.Offset + 1
}

colInfo.ID = allocateColumnID(tblInfo)
colInfo.State = model.StateNone
// To support add column asynchronous, we should mark its offset as the last column.
// So that we can use origin column offset to get value from row.
Expand Down Expand Up @@ -453,3 +453,8 @@ func (d *ddl) onModifyColumn(t *meta.Meta, job *model.Job) error {
addTableHistoryInfo(job, ver, tblInfo)
return nil
}

func allocateColumnID(tblInfo *model.TableInfo) int64 {
tblInfo.MaxColumnID++
return tblInfo.MaxColumnID
}
8 changes: 2 additions & 6 deletions ddl/column_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,7 @@ func testCreateColumn(c *C, ctx context.Context, d *ddl, dbInfo *model.DBInfo, t
Offset: len(tblInfo.Columns),
DefaultValue: defaultValue,
}

var err error
col.ID, err = d.genGlobalID()
c.Assert(err, IsNil)

col.ID = allocateColumnID(tblInfo)
col.FieldType = *types.NewFieldType(mysql.TypeLong)

job := &model.Job{
Expand All @@ -79,7 +75,7 @@ func testCreateColumn(c *C, ctx context.Context, d *ddl, dbInfo *model.DBInfo, t
Args: []interface{}{col, pos, 0},
}

err = d.doDDLJob(ctx, job)
err := d.doDDLJob(ctx, job)
c.Assert(err, IsNil)
v := getSchemaVer(c, ctx)
checkHistoryJobArgs(c, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo})
Expand Down
26 changes: 3 additions & 23 deletions ddl/ddl.go
Original file line number Diff line number Diff line change
Expand Up @@ -466,12 +466,6 @@ func (d *ddl) buildColumnAndConstraint(ctx context.Context, offset int,
if err != nil {
return nil, nil, errors.Trace(err)
}

col.ID, err = d.genGlobalID()
if err != nil {
return nil, nil, errors.Trace(err)
}

return col, cts, nil
}

Expand Down Expand Up @@ -757,6 +751,7 @@ func (d *ddl) buildTableInfo(tableName model.CIStr, cols []*table.Column, constr
return nil, errors.Trace(err)
}
for _, v := range cols {
v.ID = allocateColumnID(tbInfo)
tbInfo.Columns = append(tbInfo.Columns, v.ToInfo())
}
for _, constr := range constraints {
Expand Down Expand Up @@ -839,10 +834,7 @@ func (d *ddl) buildTableInfo(tableName model.CIStr, cols []*table.Column, constr
// Use btree as default index type.
idxInfo.Tp = model.IndexTypeBtree
}
idxInfo.ID, err = d.genGlobalID()
if err != nil {
return nil, errors.Trace(err)
}
idxInfo.ID = allocateIndexID(tbInfo)
tbInfo.Indices = append(tbInfo.Indices, idxInfo)
}
return
Expand Down Expand Up @@ -1275,22 +1267,16 @@ func (d *ddl) CreateIndex(ctx context.Context, ti ast.Ident, unique bool, indexN
if err != nil {
return errors.Trace(infoschema.ErrTableNotExists)
}
indexID, err := d.genGlobalID()
if err != nil {
return errors.Trace(err)
}

// Deal with anonymous index.
if len(indexName.L) == 0 {
indexName = getAnonymousIndex(t, idxColNames[0].Column.Name)
}

job := &model.Job{
SchemaID: schema.ID,
TableID: t.Meta().ID,
Type: model.ActionAddIndex,
BinlogInfo: &model.HistoryInfo{},
Args: []interface{}{unique, indexName, indexID, idxColNames},
Args: []interface{}{unique, indexName, idxColNames},
}

err = d.doDDLJob(ctx, job)
Expand All @@ -1299,13 +1285,7 @@ func (d *ddl) CreateIndex(ctx context.Context, ti ast.Ident, unique bool, indexN
}

func (d *ddl) buildFKInfo(fkName model.CIStr, keys []*ast.IndexColName, refer *ast.ReferenceDef) (*model.FKInfo, error) {
fkID, err := d.genGlobalID()
if err != nil {
return nil, errors.Trace(err)
}

var fkInfo model.FKInfo
fkInfo.ID = fkID
fkInfo.Name = fkName
fkInfo.RefTable = refer.Table.Name

Expand Down
4 changes: 1 addition & 3 deletions ddl/ddl_worker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,9 +216,7 @@ func (s *testDDLSuite) TestColumnError(c *C) {
Offset: len(tblInfo.Columns),
DefaultValue: 0,
}
var err error
col.ID, err = d.genGlobalID()
c.Assert(err, IsNil)
col.ID = allocateColumnID(tblInfo)
col.FieldType = *types.NewFieldType(mysql.TypeLong)
pos := &ast.ColumnPosition{Tp: ast.ColumnPositionAfter, RelativeColumn: &ast.ColumnName{Name: model.NewCIStr("c5")}}

Expand Down
2 changes: 1 addition & 1 deletion ddl/foreign_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ func (d *ddl) onCreateForeignKey(t *meta.Meta, job *model.Job) error {
job.State = model.JobCancelled
return errors.Trace(err)
}
fkInfo.ID = allocateIndexID(tblInfo)
tblInfo.ForeignKeys = append(tblInfo.ForeignKeys, &fkInfo)

ver, err := updateSchemaVersion(t, job)
if err != nil {
return errors.Trace(err)
Expand Down
5 changes: 1 addition & 4 deletions ddl/foreign_key_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,7 @@ func (s *testForeighKeySuite) testCreateForeignKey(c *C, tblInfo *model.TableInf
RefKeys[i] = model.NewCIStr(key)
}

fkID, err := s.d.genGlobalID()
c.Assert(err, IsNil)
fkInfo := &model.FKInfo{
ID: fkID,
Name: FKName,
RefTable: RefTable,
RefCols: RefKeys,
Expand All @@ -76,7 +73,7 @@ func (s *testForeighKeySuite) testCreateForeignKey(c *C, tblInfo *model.TableInf
Type: model.ActionAddForeignKey,
Args: []interface{}{fkInfo},
}
err = s.d.doDDLJob(s.ctx, job)
err := s.d.doDDLJob(s.ctx, job)
c.Assert(err, IsNil)
return job
}
Expand Down
14 changes: 9 additions & 5 deletions ddl/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import (

const maxPrefixLength = 767

func buildIndexInfo(tblInfo *model.TableInfo, unique bool, indexName model.CIStr, indexID int64,
func buildIndexInfo(tblInfo *model.TableInfo, unique bool, indexName model.CIStr,
idxColNames []*ast.IndexColName) (*model.IndexInfo, error) {
// build offsets
idxColumns := make([]*model.IndexColumn, 0, len(idxColNames))
Expand Down Expand Up @@ -68,7 +68,6 @@ func buildIndexInfo(tblInfo *model.TableInfo, unique bool, indexName model.CIStr
}
// create index info
idxInfo := &model.IndexInfo{
ID: indexID,
Name: indexName,
Columns: idxColumns,
Unique: unique,
Expand Down Expand Up @@ -130,10 +129,9 @@ func (d *ddl) onCreateIndex(t *meta.Meta, job *model.Job) error {
var (
unique bool
indexName model.CIStr
indexID int64
idxColNames []*ast.IndexColName
)
err = job.DecodeArgs(&unique, &indexName, &indexID, &idxColNames)
err = job.DecodeArgs(&unique, &indexName, &idxColNames)
if err != nil {
job.State = model.JobCancelled
return errors.Trace(err)
Expand All @@ -153,11 +151,12 @@ func (d *ddl) onCreateIndex(t *meta.Meta, job *model.Job) error {
}

if indexInfo == nil {
indexInfo, err = buildIndexInfo(tblInfo, unique, indexName, indexID, idxColNames)
indexInfo, err = buildIndexInfo(tblInfo, unique, indexName, idxColNames)
if err != nil {
job.State = model.JobCancelled
return errors.Trace(err)
}
indexInfo.ID = allocateIndexID(tblInfo)
tblInfo.Indices = append(tblInfo.Indices, indexInfo)
}

Expand Down Expand Up @@ -518,3 +517,8 @@ func (d *ddl) dropTableIndex(indexInfo *model.IndexInfo, job *model.Job) error {
_, _, err := d.delKeysWithStartKey(startKey, startKey, ddlJobFlag, job, deleteAll)
return errors.Trace(err)
}

func allocateIndexID(tblInfo *model.TableInfo) int64 {
tblInfo.MaxIndexID++
return tblInfo.MaxIndexID
}
6 changes: 2 additions & 4 deletions ddl/index_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,14 @@ func (s *testIndexSuite) TearDownSuite(c *C) {
}

func testCreateIndex(c *C, ctx context.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, unique bool, indexName string, colName string) *model.Job {
id, err := d.genGlobalID()
c.Assert(err, IsNil)
job := &model.Job{
SchemaID: dbInfo.ID,
TableID: tblInfo.ID,
Type: model.ActionAddIndex,
Args: []interface{}{unique, model.NewCIStr(indexName), id, []*ast.IndexColName{{Column: &ast.ColumnName{Name: model.NewCIStr(colName)}, Length: types.UnspecifiedLength}}},
Args: []interface{}{unique, model.NewCIStr(indexName), []*ast.IndexColName{{Column: &ast.ColumnName{Name: model.NewCIStr(colName)}, Length: types.UnspecifiedLength}}},
}

err = d.doDDLJob(ctx, job)
err := d.doDDLJob(ctx, job)
c.Assert(err, IsNil)
v := getSchemaVer(c, ctx)
checkHistoryJobArgs(c, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo})
Expand Down
4 changes: 1 addition & 3 deletions ddl/table_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@ func testTableInfo(c *C, d *ddl, name string, num int) *model.TableInfo {
}

col.FieldType = *types.NewFieldType(mysql.TypeLong)

col.ID, err = d.genGlobalID()
c.Assert(err, IsNil)
col.ID = allocateColumnID(tblInfo)
cols[i] = col
}

Expand Down
2 changes: 2 additions & 0 deletions model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ type TableInfo struct {
PKIsHandle bool `json:"pk_is_handle"`
Comment string `json:"comment"`
AutoIncID int64 `json:"auto_inc_id"`
MaxColumnID int64 `json:"max_col_id"`
MaxIndexID int64 `json:"max_idx_id"`
}

// Clone clones TableInfo.
Expand Down

0 comments on commit 99b3465

Please sign in to comment.