feat: implement MySQL driver for database management, schema discovery, and CRUD operations

This commit is contained in:
Ümit Tunç
2026-04-24 13:14:34 +03:00
parent e7ecf6cba1
commit 5d3afeadf2
6 changed files with 392 additions and 208 deletions
@@ -177,6 +177,67 @@ class SchemaController extends Controller
}
}
public function drop(Request $request, $table)
{
try {
$this->initializeDriver($request);
$this->databaseService->dropTable($table);
return Response::json(['message' => "Table '{$table}' dropped successfully"]);
} catch (\Exception $e) {
return Response::json(['error' => $e->getMessage()], 400);
}
}
public function optimize(Request $request, $table)
{
try {
$this->initializeDriver($request);
$this->databaseService->optimizeTable($table);
return Response::json(['message' => "Table '{$table}' optimized successfully"]);
} catch (\Exception $e) {
return Response::json(['error' => $e->getMessage()], 400);
}
}
public function bulkAction(Request $request)
{
$request->validate([
'tables' => 'required|array',
'action' => 'required|string|in:truncate,drop,optimize',
'database' => 'required|string'
]);
try {
$this->initializeDriver($request);
$tables = $request->tables;
$action = $request->action;
$results = [];
foreach ($tables as $table) {
try {
switch ($action) {
case 'truncate':
$this->databaseService->truncateTable($table);
break;
case 'drop':
$this->databaseService->dropTable($table);
break;
case 'optimize':
$this->databaseService->optimizeTable($table);
break;
}
$results[$table] = 'success';
} catch (\Exception $e) {
$results[$table] = 'error: ' . $e->getMessage();
}
}
return Response::json(['message' => 'Bulk operation completed', 'results' => $results]);
} catch (\Exception $e) {
return Response::json(['error' => $e->getMessage()], 400);
}
}
public function tablesMetadata(Request $request, $database)
{
try {
@@ -265,6 +265,18 @@ class MySqlDriver implements DatabaseDriverInterface, SchemaDiscoveryInterface
return true;
}
public function dropTable(string $table): bool
{
DB::connection($this->connectionName)->statement("DROP TABLE `{$table}`");
return true;
}
public function optimizeTable(string $table): bool
{
DB::connection($this->connectionName)->statement("OPTIMIZE TABLE `{$table}`");
return true;
}
public function getTablesMetadata(string $database): array
{
$sql = "
+10
View File
@@ -139,6 +139,16 @@ class DatabaseService
return $this->getDriver()->truncateTable($table);
}
public function dropTable(string $table): bool
{
return $this->getDriver()->dropTable($table);
}
public function optimizeTable(string $table): bool
{
return $this->getDriver()->optimizeTable($table);
}
/**
* Get metadata for all tables in a database.
*/