From c80077c13f3e3270249a107adacf947003a1d854 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 29 May 2024 17:10:00 +0800 Subject: [PATCH 1/2] statstics,ddl: fix FK table forgets to send CreateTable event Signed-off-by: Weizhen Wang --- pkg/ddl/table.go | 5 +++++ pkg/statistics/handle/ddl/ddl_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/pkg/ddl/table.go b/pkg/ddl/table.go index d750191359f8f..218701d5b8bcb 100644 --- a/pkg/ddl/table.go +++ b/pkg/ddl/table.go @@ -217,6 +217,11 @@ func createTableWithForeignKeys(d *ddlCtx, t *meta.Meta, job *model.Job, tbInfo return ver, errors.Trace(err) } job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) + createTableEvent := statsutil.NewCreateTableEvent( + job.SchemaID, + tbInfo, + ) + asyncNotifyEvent(d, createTableEvent) return ver, nil default: return ver, errors.Trace(dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tbInfo.State)) diff --git a/pkg/statistics/handle/ddl/ddl_test.go b/pkg/statistics/handle/ddl/ddl_test.go index 6bf394669f9c9..3bf380cf28a2e 100644 --- a/pkg/statistics/handle/ddl/ddl_test.go +++ b/pkg/statistics/handle/ddl/ddl_test.go @@ -86,6 +86,31 @@ func TestDDLTable(t *testing.T) { require.Nil(t, h.Update(is)) statsTbl = h.GetTableStats(tableInfo) require.False(t, statsTbl.Pseudo) + + // For FK table's CreateTable Event + // https://github.com/pingcap/tidb/issues/53652 + testKit.MustExec("create table t_parent (id int primary key)") + is = do.InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_parent")) + require.NoError(t, err) + tableInfo = tbl.Meta() + h := do.StatsHandle() + err = h.HandleDDLEvent(<-h.DDLEventCh()) + require.NoError(t, err) + require.Nil(t, h.Update(is)) + statsTbl = h.GetTableStats(tableInfo) + require.False(t, statsTbl.Pseudo) + + testKit.MustExec("create table t_child (id int primary key, pid int, foreign key (pid) references t_parent(id) on delete cascade on update cascade);") + is = do.InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_child")) + require.NoError(t, err) + tableInfo = tbl.Meta() + err = h.HandleDDLEvent(<-h.DDLEventCh()) + require.NoError(t, err) + require.Nil(t, h.Update(is)) + statsTbl = h.GetTableStats(tableInfo) + require.False(t, statsTbl.Pseudo) } func TestCreateASystemTable(t *testing.T) { From 39cfeea2650ebee6ffdfcdbdd69cd02112abe8b7 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 29 May 2024 17:22:25 +0800 Subject: [PATCH 2/2] fix linter --- pkg/statistics/handle/ddl/ddl_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/statistics/handle/ddl/ddl_test.go b/pkg/statistics/handle/ddl/ddl_test.go index 3bf380cf28a2e..3e120a15f4575 100644 --- a/pkg/statistics/handle/ddl/ddl_test.go +++ b/pkg/statistics/handle/ddl/ddl_test.go @@ -94,7 +94,6 @@ func TestDDLTable(t *testing.T) { tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_parent")) require.NoError(t, err) tableInfo = tbl.Meta() - h := do.StatsHandle() err = h.HandleDDLEvent(<-h.DDLEventCh()) require.NoError(t, err) require.Nil(t, h.Update(is))