86 lines
2.0 KiB
PHP
86 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Contracts\DatabaseDriverInterface;
|
|
use App\Contracts\SchemaDiscoveryInterface;
|
|
|
|
class DatabaseService
|
|
{
|
|
protected ?DatabaseDriverInterface $driver = null;
|
|
|
|
/**
|
|
* Set the database driver.
|
|
*/
|
|
public function setDriver(DatabaseDriverInterface $driver): self
|
|
{
|
|
$this->driver = $driver;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get the current driver.
|
|
*
|
|
* @throws \Exception
|
|
*/
|
|
public function getDriver(): DatabaseDriverInterface
|
|
{
|
|
if (!$this->driver) {
|
|
throw new \Exception("Database driver not initialized.");
|
|
}
|
|
return $this->driver;
|
|
}
|
|
|
|
/**
|
|
* Establish a connection.
|
|
*/
|
|
public function connect(array $config): bool
|
|
{
|
|
return $this->getDriver()->connect($config);
|
|
}
|
|
|
|
/**
|
|
* Get all databases.
|
|
*/
|
|
public function getDatabases(): array
|
|
{
|
|
$driver = $this->getDriver();
|
|
if ($driver instanceof SchemaDiscoveryInterface) {
|
|
return $driver->getDatabases();
|
|
}
|
|
throw new \Exception("Driver does not support schema discovery.");
|
|
}
|
|
|
|
/**
|
|
* Get all tables.
|
|
*/
|
|
public function getTables(): array
|
|
{
|
|
$driver = $this->getDriver();
|
|
if ($driver instanceof SchemaDiscoveryInterface) {
|
|
return $driver->getTables();
|
|
}
|
|
throw new \Exception("Driver does not support schema discovery.");
|
|
}
|
|
|
|
/**
|
|
* Get table schema.
|
|
*/
|
|
public function getTableSchema(string $table): array
|
|
{
|
|
$driver = $this->getDriver();
|
|
if ($driver instanceof SchemaDiscoveryInterface) {
|
|
return $driver->getTableSchema($table);
|
|
}
|
|
throw new \Exception("Driver does not support schema discovery.");
|
|
}
|
|
|
|
/**
|
|
* Get table data.
|
|
*/
|
|
public function getTableData(string $table, int $limit = 100, int $offset = 0): array
|
|
{
|
|
return $this->getDriver()->getTableData($table, $limit, $offset);
|
|
}
|
|
}
|