@@ -32,7 +32,7 @@ func onCreateSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error
32
32
dbInfo .ID = schemaID
33
33
dbInfo .State = model .StateNone
34
34
35
- err := checkSchemaNotExists (d , t , schemaID , dbInfo )
35
+ err := checkSchemaNotExists (d , t , schemaID , dbInfo . Name )
36
36
if err != nil {
37
37
if infoschema .ErrDatabaseExists .Equal (err ) {
38
38
// The database already exists, can't create it, we should cancel this job now.
@@ -63,10 +63,10 @@ func onCreateSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error
63
63
}
64
64
}
65
65
66
- func checkSchemaNotExists (d * ddlCtx , t * meta.Meta , schemaID int64 , dbInfo * model.DBInfo ) error {
66
+ func checkSchemaNotExists (d * ddlCtx , t * meta.Meta , schemaID int64 , dbName model.CIStr ) error {
67
67
// d.infoHandle maybe nil in some test.
68
68
if d .infoHandle == nil {
69
- return checkSchemaNotExistsFromStore (t , schemaID , dbInfo )
69
+ return checkSchemaNotExistsFromStore (t , schemaID , dbName )
70
70
}
71
71
// Try to use memory schema info to check first.
72
72
currVer , err := t .GetSchemaVersion ()
@@ -75,35 +75,34 @@ func checkSchemaNotExists(d *ddlCtx, t *meta.Meta, schemaID int64, dbInfo *model
75
75
}
76
76
is := d .infoHandle .Get ()
77
77
if is .SchemaMetaVersion () == currVer {
78
- return checkSchemaNotExistsFromInfoSchema (is , schemaID , dbInfo )
78
+ return checkSchemaNotExistsFromInfoSchema (is , schemaID , dbName )
79
79
}
80
- return checkSchemaNotExistsFromStore (t , schemaID , dbInfo )
80
+ return checkSchemaNotExistsFromStore (t , schemaID , dbName )
81
81
}
82
82
83
- func checkSchemaNotExistsFromInfoSchema (is infoschema.InfoSchema , schemaID int64 , dbInfo * model.DBInfo ) error {
83
+ func checkSchemaNotExistsFromInfoSchema (is infoschema.InfoSchema , schemaID int64 , dbName model.CIStr ) error {
84
84
// Check database exists by name.
85
- if is .SchemaExists (dbInfo . Name ) {
86
- return infoschema .ErrDatabaseExists .GenWithStackByArgs (dbInfo . Name )
85
+ if is .SchemaExists (dbName ) {
86
+ return infoschema .ErrDatabaseExists .GenWithStackByArgs (dbName )
87
87
}
88
88
// Check database exists by ID.
89
89
if _ , ok := is .SchemaByID (schemaID ); ok {
90
- return infoschema .ErrDatabaseExists .GenWithStackByArgs (dbInfo . Name )
90
+ return infoschema .ErrDatabaseExists .GenWithStackByArgs (dbName )
91
91
}
92
92
return nil
93
93
}
94
94
95
- func checkSchemaNotExistsFromStore (t * meta.Meta , schemaID int64 , dbInfo * model.DBInfo ) error {
95
+ func checkSchemaNotExistsFromStore (t * meta.Meta , schemaID int64 , dbName model.CIStr ) error {
96
96
dbs , err := t .ListDatabases ()
97
97
if err != nil {
98
98
return errors .Trace (err )
99
99
}
100
100
101
101
for _ , db := range dbs {
102
- if db .Name .L == dbInfo . Name .L {
102
+ if db .Name .L == dbName .L {
103
103
if db .ID != schemaID {
104
104
return infoschema .ErrDatabaseExists .GenWithStackByArgs (db .Name )
105
105
}
106
- dbInfo = db
107
106
}
108
107
}
109
108
return nil
@@ -140,6 +139,34 @@ func onModifySchemaCharsetAndCollate(t *meta.Meta, job *model.Job) (ver int64, _
140
139
return ver , nil
141
140
}
142
141
142
+ func onRenameSchema (t * meta.Meta , job * model.Job ) (ver int64 , _ error ) {
143
+ var newDBName model.CIStr
144
+ if err := job .DecodeArgs (& newDBName ); err != nil {
145
+ job .State = model .JobStateCancelled
146
+ return ver , errors .Trace (err )
147
+ }
148
+
149
+ dbInfo , err := t .GetDatabase (job .SchemaID )
150
+ if err != nil {
151
+ job .State = model .JobStateCancelled
152
+ return ver , errors .Trace (err )
153
+ }
154
+ if err = checkSchemaNotExistsFromStore (t , job .SchemaID , newDBName ); err != nil {
155
+ job .State = model .JobStateCancelled
156
+ return ver , errors .Trace (err )
157
+ }
158
+
159
+ dbInfo .Name = newDBName
160
+ if err = t .UpdateDatabase (dbInfo ); err != nil {
161
+ return ver , errors .Trace (err )
162
+ }
163
+ if ver , err = updateSchemaVersion (t , job ); err != nil {
164
+ return ver , errors .Trace (err )
165
+ }
166
+ job .FinishDBJob (model .JobStateDone , model .StatePublic , ver , dbInfo )
167
+ return ver , nil
168
+ }
169
+
143
170
func onDropSchema (t * meta.Meta , job * model.Job ) (ver int64 , _ error ) {
144
171
dbInfo , err := checkSchemaExistAndCancelNotExistJob (t , job )
145
172
if err != nil {
0 commit comments