feat: implement database management API with MySQL driver and schema operations
This commit is contained in:
@@ -454,4 +454,39 @@ class MySqlDriver implements DatabaseDriverInterface, SchemaDiscoveryInterface
|
||||
DB::connection($this->connectionName)->statement("CREATE DATABASE `{$name}` CHARACTER SET {$charset} COLLATE {$collation}");
|
||||
return true;
|
||||
}
|
||||
|
||||
public function dropDatabase(string $name): bool
|
||||
{
|
||||
DB::connection($this->connectionName)->statement("DROP DATABASE `{$name}`");
|
||||
return true;
|
||||
}
|
||||
|
||||
public function renameDatabase(string $oldName, string $newName): bool
|
||||
{
|
||||
// 1. Create new database
|
||||
$this->createDatabase($newName);
|
||||
|
||||
// 2. Get tables from old database
|
||||
$tables = $this->query("SHOW TABLES FROM `{$oldName}`");
|
||||
$key = "Tables_in_{$oldName}";
|
||||
|
||||
if (!empty($tables)) {
|
||||
$renameQueries = [];
|
||||
foreach ($tables as $table) {
|
||||
$tableName = $table->$key;
|
||||
$renameQueries[] = "`{$oldName}`.`{$tableName}` TO `{$newName}`.`{$tableName}`";
|
||||
}
|
||||
|
||||
// 3. Rename all tables
|
||||
if (!empty($renameQueries)) {
|
||||
$sql = "RENAME TABLE " . implode(', ', $renameQueries);
|
||||
DB::connection($this->connectionName)->statement($sql);
|
||||
}
|
||||
}
|
||||
|
||||
// 4. Drop old database
|
||||
$this->dropDatabase($oldName);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,4 +172,20 @@ class DatabaseService
|
||||
{
|
||||
return $this->getDriver()->createDatabase($name, $charset, $collation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop a database.
|
||||
*/
|
||||
public function dropDatabase(string $name): bool
|
||||
{
|
||||
return $this->getDriver()->dropDatabase($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename a database.
|
||||
*/
|
||||
public function renameDatabase(string $oldName, string $newName): bool
|
||||
{
|
||||
return $this->getDriver()->renameDatabase($oldName, $newName);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user