Skip to content

Commit

Permalink
ddl: allow multiple unique attributes in a column (#12165) (#12469)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tanner authored and sre-bot committed Oct 3, 2019
1 parent 89b35b3 commit ee9971c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
14 changes: 14 additions & 0 deletions ddl/db_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -923,3 +923,17 @@ func (s *testIntegrationSuite) TestDropAutoIncrement(c *C) {
tk.MustExec("alter table t1 modify column a int")
tk.MustExec("set @@tidb_allow_remove_auto_inc = off")
}

func (s *testIntegrationSuite) TestMultipleUnique(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("create database if not exists test")
tk.MustExec("use test")

tk.MustExec("drop table if exists multi_unique")
tk.MustExec("create table multi_unique (a int unique unique)")
tk.MustExec("drop table multi_unique")
tk.MustExec("create table multi_unique (a int key primary key unique unique)")
tk.MustExec("drop table multi_unique")
tk.MustExec("create table multi_unique (a int key unique unique key unique)")
tk.MustExec("drop table multi_unique")
}
18 changes: 12 additions & 6 deletions ddl/ddl_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -496,13 +496,19 @@ func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, o
case ast.ColumnOptionAutoIncrement:
col.Flag |= mysql.AutoIncrementFlag
case ast.ColumnOptionPrimaryKey:
constraint := &ast.Constraint{Tp: ast.ConstraintPrimaryKey, Keys: keys}
constraints = append(constraints, constraint)
col.Flag |= mysql.PriKeyFlag
// Check PriKeyFlag first to avoid extra duplicate constraints.
if col.Flag&mysql.PriKeyFlag == 0 {
constraint := &ast.Constraint{Tp: ast.ConstraintPrimaryKey, Keys: keys}
constraints = append(constraints, constraint)
col.Flag |= mysql.PriKeyFlag
}
case ast.ColumnOptionUniqKey:
constraint := &ast.Constraint{Tp: ast.ConstraintUniqKey, Name: colDef.Name.Name.O, Keys: keys}
constraints = append(constraints, constraint)
col.Flag |= mysql.UniqueKeyFlag
// Check UniqueFlag first to avoid extra duplicate constraints.
if col.Flag&mysql.UniqueFlag == 0 {
constraint := &ast.Constraint{Tp: ast.ConstraintUniqKey, Keys: keys}
constraints = append(constraints, constraint)
col.Flag |= mysql.UniqueKeyFlag
}
case ast.ColumnOptionDefaultValue:
hasDefaultValue, err = setDefaultValue(ctx, col, v)
if err != nil {
Expand Down

0 comments on commit ee9971c

Please sign in to comment.