Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(Micro PR) Created DatabaseInterface and simple implementations #200

Open
wants to merge 4 commits into
base: v1.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
43 changes: 43 additions & 0 deletions src/Meta/AdapterFactory.php
@@ -0,0 +1,43 @@
<?php

namespace Reliese\Meta;

use Illuminate\Database\MySqlConnection;
use Illuminate\Database\PostgresConnection;
use Illuminate\Database\SQLiteConnection;
use Reliese\Meta\MySql\Database as MySqlDatabase;
use Reliese\Meta\Postgres\Database as PostgresDatabase;
use Reliese\Meta\Sqlite\Database as SqliteDatabase;
use Reliese\Meta\MySql\Schema as MySqlSchema;
use Reliese\Meta\Postgres\Schema as PostgresSchema;
use Reliese\Meta\Sqlite\Schema as SqliteSchema;

use function get_class;

/**
* Class AdapterFactory
*/
class AdapterFactory
{
/**
* @param \Illuminate\Database\Connection $connection
* @return DatabaseInterface
*/
public function database($connection)
{
switch (get_class($connection)) {
case \Larapack\DoctrineSupport\Connections\MySqlConnection::class:
case MySqlConnection::class:
/** @noinspection PhpParamsInspection */
return new MySqlDatabase($connection);
case SQLiteConnection::class:
/** @noinspection PhpParamsInspection */
return new SqliteDatabase($connection);
case PostgresConnection::class:
/** @noinspection PhpParamsInspection */
return new PostgresDatabase($connection);
}

throw new \RuntimeException(__METHOD__." does not define an implementation for ".DatabaseInterface::class);
}
}
24 changes: 24 additions & 0 deletions src/Meta/DatabaseInterface.php
@@ -0,0 +1,24 @@
<?php

namespace Reliese\Meta;

use Reliese\Meta\MySql\Schema;

/**
* Interface DatabaseInterface
*/
interface DatabaseInterface
{
/**
* Returns an array of accessible schema names
*
* @return string[]
*/
public function getSchemaNames();

/**
* @param string $schemaName
* @return Schema
*/
public function getSchema($schemaName);
}
59 changes: 59 additions & 0 deletions src/Meta/MySql/Database.php
@@ -0,0 +1,59 @@
<?php

namespace Reliese\Meta\MySql;

use Reliese\Meta\DatabaseInterface;

use function array_diff;

/**
* Class Database
*/
class Database implements DatabaseInterface
{
/**
* @var Schema[]
*/
private $schemaAdapters = [];

/**
* @var \Illuminate\Database\MySqlConnection
*/
private $connection;

/**
* Database constructor.
* @param \Illuminate\Database\MySqlConnection $connection
*/
public function __construct(\Illuminate\Database\MySqlConnection $connection)
{
$this->connection = $connection;
}

/**
* @inheritDoc
*/
public function getSchemaNames()
{
$schemas = $this->connection->getDoctrineSchemaManager()->listDatabases();

return array_diff($schemas, [
'information_schema',
'sys',
'mysql',
'performance_schema',
]);
}

/**
* @param string $schemaName
* @return Schema
*/
public function getSchema($schemaName)
{
if (!empty($this->schemaAdapters[$schemaName])) {
return $this->schemaAdapters[$schemaName];
}
return $this->schemaAdapters[$schemaName] = new Schema($schemaName, $this->connection);
}
}
11 changes: 2 additions & 9 deletions src/Meta/MySql/Schema.php
Expand Up @@ -265,19 +265,12 @@ protected function resolveForeignTable($table, Blueprint $blueprint)

/**
* @param \Illuminate\Database\Connection $connection
*
* @deprecated use \Reliese\Meta\MySql\Database::getSchemaNames instead
* @return array
*/
public static function schemas(Connection $connection)
{
$schemas = $connection->getDoctrineSchemaManager()->listDatabases();

return array_diff($schemas, [
'information_schema',
'sys',
'mysql',
'performance_schema',
]);
return (new Database($connection))->getSchemaNames();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method's cohesion is very low compared to the rest of the methods. It makes sense to put this logic elsewhere.

}

/**
Expand Down
58 changes: 58 additions & 0 deletions src/Meta/Postgres/Database.php
@@ -0,0 +1,58 @@
<?php

namespace Reliese\Meta\Postgres;

use Reliese\Meta\DatabaseInterface;

use function array_diff;

/**
* Class Database
*/
class Database implements DatabaseInterface
{
/**
* @var Schema[]
*/
private $schemaAdapters = [];

/**
* @var \Illuminate\Database\PostgresConnection
*/
private $connection;

/**
* Database constructor.
* @param \Illuminate\Database\PostgresConnection $connection
*/
public function __construct(\Illuminate\Database\PostgresConnection $connection)
{
$this->connection = $connection;
}

/**
* @inheritDoc
*/
public function getSchemaNames()
{
$schemas = $this->connection->getDoctrineSchemaManager()->listDatabases();

return array_diff($schemas, [
'postgres',
'template0',
'template1',
]);
}

/**
* @param string $schemaName
* @return Schema
*/
public function getSchema($schemaName)
{
if (!empty($this->schemaAdapters[$schemaName])) {
return $this->schemaAdapters[$schemaName];
}
return $this->schemaAdapters[$schemaName] = new Schema($schemaName, $this->connection);
}
}
10 changes: 2 additions & 8 deletions src/Meta/Postgres/Schema.php
Expand Up @@ -268,18 +268,12 @@ protected function wrap($table)

/**
* @param \Illuminate\Database\Connection $connection
*
* @deprecated use \Reliese\Meta\Postgres\Database::getSchemaNames
* @return array
*/
public static function schemas(Connection $connection)
{
$schemas = $connection->getDoctrineSchemaManager()->listDatabases();

return array_diff($schemas, [
'postgres',
'template0',
'template1',
]);
return (new Database($connection))->getSchemaNames();
}

/**
Expand Down
50 changes: 50 additions & 0 deletions src/Meta/Sqlite/Database.php
@@ -0,0 +1,50 @@
<?php

namespace Reliese\Meta\Sqlite;

use Reliese\Meta\DatabaseInterface;

/**
* Class Database
*/
class Database implements DatabaseInterface
{
/**
* @var Schema[]
*/
private $schemaAdapters = [];

/**
* @var \Illuminate\Database\SQLiteConnection
*/
private $connection;

/**
* Database constructor.
* @param \Illuminate\Database\SQLiteConnection $connection
*/
public function __construct(\Illuminate\Database\SQLiteConnection $connection)
{
$this->connection = $connection;
}

/**
* @inheritDoc
*/
public function getSchemaNames()
{
return ['database'];
}

/**
* @param string $schemaName
* @return Schema
*/
public function getSchema($schemaName)
{
if (!empty($this->schemaAdapters[$schemaName])) {
return $this->schemaAdapters[$schemaName];
}
return $this->schemaAdapters[$schemaName] = new Schema($schemaName, $this->connection);
}
}
6 changes: 3 additions & 3 deletions src/Meta/Sqlite/Schema.php
Expand Up @@ -36,7 +36,7 @@ class Schema implements \Reliese\Meta\Schema
* Mapper constructor.
*
* @param string $schema
* @param \Illuminate\Database\MySqlConnection $connection
* @param \Illuminate\Database\SQLiteConnection $connection
*/
public function __construct($schema, $connection)
{
Expand Down Expand Up @@ -194,12 +194,12 @@ protected function fillRelations(Blueprint $blueprint)

/**
* @param \Illuminate\Database\Connection $connection
*
* @deprecated use \Reliese\Meta\Sqlite\Database::getSchemaNames
* @return array
*/
public static function schemas(Connection $connection)
{
return ['database'];
return (new Database($connection))->getSchemaNames();
}

/**
Expand Down