Skip to content

Commit aee176b

Browse files
authored
statstics,ddl: fix FK table forgets to send CreateTable event (#53654)
close #53652
1 parent fc2d0a6 commit aee176b

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

pkg/ddl/table.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,11 @@ func createTableWithForeignKeys(d *ddlCtx, t *meta.Meta, job *model.Job, tbInfo
217217
return ver, errors.Trace(err)
218218
}
219219
job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo)
220+
createTableEvent := statsutil.NewCreateTableEvent(
221+
job.SchemaID,
222+
tbInfo,
223+
)
224+
asyncNotifyEvent(d, createTableEvent)
220225
return ver, nil
221226
default:
222227
return ver, errors.Trace(dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tbInfo.State))

pkg/statistics/handle/ddl/ddl_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,30 @@ func TestDDLTable(t *testing.T) {
8686
require.Nil(t, h.Update(is))
8787
statsTbl = h.GetTableStats(tableInfo)
8888
require.False(t, statsTbl.Pseudo)
89+
90+
// For FK table's CreateTable Event
91+
// https://github.com/pingcap/tidb/issues/53652
92+
testKit.MustExec("create table t_parent (id int primary key)")
93+
is = do.InfoSchema()
94+
tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_parent"))
95+
require.NoError(t, err)
96+
tableInfo = tbl.Meta()
97+
err = h.HandleDDLEvent(<-h.DDLEventCh())
98+
require.NoError(t, err)
99+
require.Nil(t, h.Update(is))
100+
statsTbl = h.GetTableStats(tableInfo)
101+
require.False(t, statsTbl.Pseudo)
102+
103+
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);")
104+
is = do.InfoSchema()
105+
tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_child"))
106+
require.NoError(t, err)
107+
tableInfo = tbl.Meta()
108+
err = h.HandleDDLEvent(<-h.DDLEventCh())
109+
require.NoError(t, err)
110+
require.Nil(t, h.Update(is))
111+
statsTbl = h.GetTableStats(tableInfo)
112+
require.False(t, statsTbl.Pseudo)
89113
}
90114

91115
func TestCreateASystemTable(t *testing.T) {

0 commit comments

Comments
 (0)