diff --git a/go/logic/inspect.go b/go/logic/inspect.go index ea8c3adca..bfe2c1eb2 100644 --- a/go/logic/inspect.go +++ b/go/logic/inspect.go @@ -779,8 +779,9 @@ func (this *Inspector) getSharedUniqueKeys(originalUniqueKeys, ghostUniqueKeys [ // the ALTER is on the name itself... for _, originalUniqueKey := range originalUniqueKeys { for _, ghostUniqueKey := range ghostUniqueKeys { - if originalUniqueKey.Columns.EqualsByNames(&ghostUniqueKey.Columns) { + if originalUniqueKey.Columns.IsSubsetOf(&ghostUniqueKey.Columns) { uniqueKeys = append(uniqueKeys, originalUniqueKey) + break } } } diff --git a/go/logic/inspect_test.go b/go/logic/inspect_test.go index ca6ad8254..ac24f35ef 100644 --- a/go/logic/inspect_test.go +++ b/go/logic/inspect_test.go @@ -16,6 +16,7 @@ func TestInspectGetSharedUniqueKeys(t *testing.T) { origUniqKeys := []*sql.UniqueKey{ {Columns: *sql.NewColumnList([]string{"id", "item_id"})}, {Columns: *sql.NewColumnList([]string{"id", "org_id"})}, + {Columns: *sql.NewColumnList([]string{"id"})}, } ghostUniqKeys := []*sql.UniqueKey{ {Columns: *sql.NewColumnList([]string{"id", "item_id"})}, @@ -24,7 +25,8 @@ func TestInspectGetSharedUniqueKeys(t *testing.T) { } inspector := &Inspector{} sharedUniqKeys := inspector.getSharedUniqueKeys(origUniqKeys, ghostUniqKeys) - require.Len(t, sharedUniqKeys, 2) + require.Len(t, sharedUniqKeys, 3) require.Equal(t, "id,item_id", sharedUniqKeys[0].Columns.String()) require.Equal(t, "id,org_id", sharedUniqKeys[1].Columns.String()) + require.Equal(t, "id", sharedUniqKeys[2].Columns.String()) } diff --git a/localtests/fail-no-shared-uk/create.sql b/localtests/fail-no-shared-uk/create.sql index 5bb45f2a3..8f092e790 100644 --- a/localtests/fail-no-shared-uk/create.sql +++ b/localtests/fail-no-shared-uk/create.sql @@ -1,10 +1,10 @@ drop table if exists gh_ost_test; create table gh_ost_test ( - id int auto_increment, + id int not null, i int not null, ts timestamp, primary key(id) -) auto_increment=1; +); drop event if exists gh_ost_test; delimiter ;; diff --git a/localtests/fail-no-shared-uk/extra_args b/localtests/fail-no-shared-uk/extra_args index 379a77d85..6f66ccdb9 100644 --- a/localtests/fail-no-shared-uk/extra_args +++ b/localtests/fail-no-shared-uk/extra_args @@ -1 +1 @@ ---alter="drop primary key, add primary key (id, i)" +--alter="drop primary key, add primary key (i)" diff --git a/localtests/shared-uk/create.sql b/localtests/shared-uk/create.sql new file mode 100644 index 000000000..5bb45f2a3 --- /dev/null +++ b/localtests/shared-uk/create.sql @@ -0,0 +1,22 @@ +drop table if exists gh_ost_test; +create table gh_ost_test ( + id int auto_increment, + i int not null, + ts timestamp, + primary key(id) +) auto_increment=1; + +drop event if exists gh_ost_test; +delimiter ;; +create event gh_ost_test + on schedule every 1 second + starts current_timestamp + ends current_timestamp + interval 60 second + on completion not preserve + enable + do +begin + insert into gh_ost_test values (null, 11, now()); + insert into gh_ost_test values (null, 13, now()); + insert into gh_ost_test values (null, 17, now()); +end ;; diff --git a/localtests/shared-uk/extra_args b/localtests/shared-uk/extra_args new file mode 100644 index 000000000..379a77d85 --- /dev/null +++ b/localtests/shared-uk/extra_args @@ -0,0 +1 @@ +--alter="drop primary key, add primary key (id, i)"