MCPcopy
hub / github.com/pingcap/tidb / onCreateSchema

Function onCreateSchema

pkg/ddl/schema.go:33–74  ·  view source on GitHub ↗
(jobCtx *jobContext, job *model.Job)

Source from the content-addressed store, hash-verified

31)
32
33func onCreateSchema(jobCtx *jobContext, job *model.Job) (ver int64, _ error) {
34 schemaID := job.SchemaID
35 args, err := model.GetCreateSchemaArgs(job)
36 if err != nil {
37 // Invalid arguments, cancel this job.
38 job.State = model.JobStateCancelled
39 return ver, errors.Trace(err)
40 }
41 dbInfo := args.DBInfo
42 dbInfo.ID = schemaID
43 dbInfo.State = model.StateNone
44
45 err = checkSchemaNotExists(jobCtx.infoCache, schemaID, dbInfo)
46 if err != nil {
47 if infoschema.ErrDatabaseExists.Equal(err) {
48 // The database already exists, can't create it, we should cancel this job now.
49 job.State = model.JobStateCancelled
50 }
51 return ver, errors.Trace(err)
52 }
53
54 ver, err = updateSchemaVersion(jobCtx, job)
55 if err != nil {
56 return ver, errors.Trace(err)
57 }
58
59 switch dbInfo.State {
60 case model.StateNone:
61 // none -> public
62 dbInfo.State = model.StatePublic
63 err = jobCtx.metaMut.CreateDatabase(dbInfo)
64 if err != nil {
65 return ver, errors.Trace(err)
66 }
67 // Finish this job.
68 job.FinishDBJob(model.JobStateDone, model.StatePublic, ver, dbInfo)
69 return ver, nil
70 default:
71 // We can't enter here.
72 return ver, errors.Errorf("invalid db state %v", dbInfo.State)
73 }
74}
75
76// checkSchemaNotExists checks whether the database already exists.
77// see checkTableNotExists for the rationale of why we check using info schema only.

Callers 1

runOneJobStepMethod · 0.85

Calls 7

GetCreateSchemaArgsFunction · 0.92
checkSchemaNotExistsFunction · 0.85
updateSchemaVersionFunction · 0.85
FinishDBJobMethod · 0.80
EqualMethod · 0.65
CreateDatabaseMethod · 0.65
ErrorfMethod · 0.65

Tested by

no test coverage detected