diff --git a/ddl/db_rename_test.go b/ddl/db_rename_test.go index d2a33c2556734..0bbe0eaea7e3e 100644 --- a/ddl/db_rename_test.go +++ b/ddl/db_rename_test.go @@ -293,3 +293,15 @@ func TestRenameMultiTables(t *testing.T) { tk.MustExec("drop database test1") tk.MustExec("drop database test") } + +func TestRenameMultiTablesIssue47064(t *testing.T) { + store := testkit.CreateMockStore(t, mockstore.WithDDLChecker()) + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1(a int)") + tk.MustExec("create table t2(a int)") + tk.MustExec("create database test1") + tk.MustExec("rename table test.t1 to test1.t1, test.t2 to test1.t2") + tk.MustQuery("select column_name from information_schema.columns where table_name = 't1'").Check(testkit.Rows("a")) +} diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index 30782fa694985..9b447af86eba5 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -1352,9 +1352,13 @@ func updateSchemaVersion(d *ddlCtx, t *meta.Meta, job *model.Job, multiInfos ... if err != nil { return 0, errors.Trace(err) } - affects := make([]*model.AffectedOption, len(newSchemaIDs)) + affects := make([]*model.AffectedOption, len(newSchemaIDs)-1) for i, newSchemaID := range newSchemaIDs { - affects[i] = &model.AffectedOption{ + // Do not add the first table to AffectedOpts. Related issue tidb#47064. + if i == 0 { + continue + } + affects[i-1] = &model.AffectedOption{ SchemaID: newSchemaID, TableID: tableIDs[i], OldTableID: tableIDs[i], diff --git a/ddl/fktest/foreign_key_test.go b/ddl/fktest/foreign_key_test.go index b3af6a87050e7..c739e40121118 100644 --- a/ddl/fktest/foreign_key_test.go +++ b/ddl/fktest/foreign_key_test.go @@ -1566,7 +1566,7 @@ func TestRenameTablesWithForeignKey(t *testing.T) { // check the schema diff diff := getLatestSchemaDiff(t, tk) require.Equal(t, model.ActionRenameTables, diff.Type) - require.Equal(t, 3, len(diff.AffectedOpts)) + require.Equal(t, 2, len(diff.AffectedOpts)) // check referred foreign key information. t1ReferredFKs := getTableInfoReferredForeignKeys(t, dom, "test", "t1")