| 123 | } |
| 124 | |
| 125 | func (r *Router) CreateDatabase(db string) error { |
| 126 | r.mu.Lock() |
| 127 | defer r.mu.Unlock() |
| 128 | |
| 129 | log := r.log |
| 130 | if len(db) > NAME_CHAR_LEN { |
| 131 | return sqldb.NewSQLError(sqldb.ER_TOO_LONG_IDENT, db) |
| 132 | } |
| 133 | if r.checkNameInvalid(db) { |
| 134 | log.Error("frm.check.database.name[%v].invalid.contains.char:'/' or space ' '", db) |
| 135 | return errors.Errorf("invalid.database.name.currently.not.support.dbname[%v].contains.with.char:'/' or space ' '", db) |
| 136 | } |
| 137 | if err := r.addDatabase(db); err != nil { |
| 138 | log.Error("frm.create.addDatabase.error:%v", err) |
| 139 | return err |
| 140 | } |
| 141 | if err := r.writeDatabaseFrmData(db); err != nil { |
| 142 | log.Error("frm.writeTableFrmData[db:%v].file.error:%+v", db, err) |
| 143 | // if write fail, drop db in memory cache added by addDatabase |
| 144 | if err := r.dropDatabase(db); err != nil { |
| 145 | log.Error("frm.drop.database[db:%v].error.from.router.cache.when.write.to.disk.failed:%+v", db, err) |
| 146 | } |
| 147 | return err |
| 148 | } |
| 149 | if err := config.UpdateVersion(r.metadir); err != nil { |
| 150 | log.Panicf("frm.create.table.update.version.error:%v", err) |
| 151 | return err |
| 152 | } |
| 153 | return nil |
| 154 | } |
| 155 | |
| 156 | // DropDatabase used to remove a database-schema from the schemas |
| 157 | // and remove all the table-schema files who belongs to this database. |