feat: implement database management API with MySQL driver and schema operations

This commit is contained in:
Ümit Tunç
2026-04-28 20:19:56 +03:00
parent 2e529bb61c
commit 01ddb81aa9
7 changed files with 276 additions and 9 deletions
@@ -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;
}
}
+16
View File
@@ -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);
}
}