From 0f0ad85de6abd5fef955a8e79aaa5705a3fcda58 Mon Sep 17 00:00:00 2001 From: Adam Lenda Date: Fri, 26 Mar 2021 15:57:14 -0400 Subject: [PATCH 1/4] Created DatabaseInterface and simple implementations --- src/Meta/MySql/Database.php | 36 ++++++++++++++++++++++++++++++++++ src/Meta/MySql/Schema.php | 11 ++--------- src/Meta/Postgres/Database.php | 35 +++++++++++++++++++++++++++++++++ src/Meta/Postgres/Schema.php | 10 ++-------- src/Meta/Sqlite/Database.php | 27 +++++++++++++++++++++++++ src/Meta/Sqlite/Schema.php | 4 ++-- 6 files changed, 104 insertions(+), 19 deletions(-) create mode 100644 src/Meta/MySql/Database.php create mode 100644 src/Meta/Postgres/Database.php create mode 100644 src/Meta/Sqlite/Database.php diff --git a/src/Meta/MySql/Database.php b/src/Meta/MySql/Database.php new file mode 100644 index 00000000..4b3ab03f --- /dev/null +++ b/src/Meta/MySql/Database.php @@ -0,0 +1,36 @@ +connection = $connection; + } + + /** + * @inheritDoc + */ + public function getSchemaNames() + { + $schemas = $this->connection->getDoctrineSchemaManager()->listDatabases(); + + return array_diff($schemas, [ + 'information_schema', + 'sys', + 'mysql', + 'performance_schema', + ]); + } +} \ No newline at end of file diff --git a/src/Meta/MySql/Schema.php b/src/Meta/MySql/Schema.php index 186010f7..e8b755fc 100644 --- a/src/Meta/MySql/Schema.php +++ b/src/Meta/MySql/Schema.php @@ -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(); } /** diff --git a/src/Meta/Postgres/Database.php b/src/Meta/Postgres/Database.php new file mode 100644 index 00000000..e6295fd3 --- /dev/null +++ b/src/Meta/Postgres/Database.php @@ -0,0 +1,35 @@ +connection = $connection; + } + + /** + * @inheritDoc + */ + public function getSchemaNames() + { + $schemas = $this->connection->getDoctrineSchemaManager()->listDatabases(); + + return array_diff($schemas, [ + 'postgres', + 'template0', + 'template1', + ]); + } +} \ No newline at end of file diff --git a/src/Meta/Postgres/Schema.php b/src/Meta/Postgres/Schema.php index abe2c455..6f81620f 100644 --- a/src/Meta/Postgres/Schema.php +++ b/src/Meta/Postgres/Schema.php @@ -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(); } /** diff --git a/src/Meta/Sqlite/Database.php b/src/Meta/Sqlite/Database.php new file mode 100644 index 00000000..69c9858b --- /dev/null +++ b/src/Meta/Sqlite/Database.php @@ -0,0 +1,27 @@ +connection = $connection; + } + + /** + * @inheritDoc + */ + public function getSchemaNames() + { + return ['database']; + } +} \ No newline at end of file diff --git a/src/Meta/Sqlite/Schema.php b/src/Meta/Sqlite/Schema.php index 7c611692..f42568b7 100644 --- a/src/Meta/Sqlite/Schema.php +++ b/src/Meta/Sqlite/Schema.php @@ -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(); } /** From dd8952667a6d8b799fe8b099c98e93b82c55cfc0 Mon Sep 17 00:00:00 2001 From: Adam Lenda Date: Fri, 26 Mar 2021 16:17:21 -0400 Subject: [PATCH 2/4] added file omitted from prior commit --- src/Meta/DatabaseInterface.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/Meta/DatabaseInterface.php diff --git a/src/Meta/DatabaseInterface.php b/src/Meta/DatabaseInterface.php new file mode 100644 index 00000000..290d2a64 --- /dev/null +++ b/src/Meta/DatabaseInterface.php @@ -0,0 +1,16 @@ + Date: Fri, 26 Mar 2021 16:19:33 -0400 Subject: [PATCH 3/4] added implements statements for DatabaseAdapterInterface --- src/Meta/MySql/Database.php | 4 +++- src/Meta/Postgres/Database.php | 4 +++- src/Meta/Sqlite/Database.php | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Meta/MySql/Database.php b/src/Meta/MySql/Database.php index 4b3ab03f..61932429 100644 --- a/src/Meta/MySql/Database.php +++ b/src/Meta/MySql/Database.php @@ -2,12 +2,14 @@ namespace Reliese\Meta\MySql; +use Reliese\Meta\DatabaseInterface; + use function array_diff; /** * Class Database */ -class Database +class Database implements DatabaseInterface { /** * @var \Illuminate\Database\Connection diff --git a/src/Meta/Postgres/Database.php b/src/Meta/Postgres/Database.php index e6295fd3..5860905e 100644 --- a/src/Meta/Postgres/Database.php +++ b/src/Meta/Postgres/Database.php @@ -2,12 +2,14 @@ namespace Reliese\Meta\Postgres; +use Reliese\Meta\DatabaseInterface; + use function array_diff; /** * Class Database */ -class Database +class Database implements DatabaseInterface { /** * @var \Illuminate\Database\Connection diff --git a/src/Meta/Sqlite/Database.php b/src/Meta/Sqlite/Database.php index 69c9858b..fdbf4109 100644 --- a/src/Meta/Sqlite/Database.php +++ b/src/Meta/Sqlite/Database.php @@ -2,10 +2,12 @@ namespace Reliese\Meta\Sqlite; +use Reliese\Meta\DatabaseInterface; + /** * Class Database */ -class Database +class Database implements DatabaseInterface { /** * @var \Illuminate\Database\Connection From ce917b61a27c395ced4bfa22055744948c279f0f Mon Sep 17 00:00:00 2001 From: Adam Lenda Date: Fri, 26 Mar 2021 17:09:35 -0400 Subject: [PATCH 4/4] Added Adapter Factory --- src/Meta/AdapterFactory.php | 43 ++++++++++++++++++++++++++++++++++ src/Meta/DatabaseInterface.php | 8 +++++++ src/Meta/MySql/Database.php | 25 ++++++++++++++++++-- src/Meta/Postgres/Database.php | 25 ++++++++++++++++++-- src/Meta/Sqlite/Database.php | 25 ++++++++++++++++++-- src/Meta/Sqlite/Schema.php | 2 +- 6 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 src/Meta/AdapterFactory.php diff --git a/src/Meta/AdapterFactory.php b/src/Meta/AdapterFactory.php new file mode 100644 index 00000000..7e1a474b --- /dev/null +++ b/src/Meta/AdapterFactory.php @@ -0,0 +1,43 @@ +connection = $connection; } @@ -35,4 +44,16 @@ public function getSchemaNames() '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); + } } \ No newline at end of file diff --git a/src/Meta/Postgres/Database.php b/src/Meta/Postgres/Database.php index 5860905e..243e2004 100644 --- a/src/Meta/Postgres/Database.php +++ b/src/Meta/Postgres/Database.php @@ -12,11 +12,20 @@ class Database implements DatabaseInterface { /** - * @var \Illuminate\Database\Connection + * @var Schema[] + */ + private $schemaAdapters = []; + + /** + * @var \Illuminate\Database\PostgresConnection */ private $connection; - public function __construct(\Illuminate\Database\Connection $connection) + /** + * Database constructor. + * @param \Illuminate\Database\PostgresConnection $connection + */ + public function __construct(\Illuminate\Database\PostgresConnection $connection) { $this->connection = $connection; } @@ -34,4 +43,16 @@ public function getSchemaNames() '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); + } } \ No newline at end of file diff --git a/src/Meta/Sqlite/Database.php b/src/Meta/Sqlite/Database.php index fdbf4109..b4376cfe 100644 --- a/src/Meta/Sqlite/Database.php +++ b/src/Meta/Sqlite/Database.php @@ -10,11 +10,20 @@ class Database implements DatabaseInterface { /** - * @var \Illuminate\Database\Connection + * @var Schema[] + */ + private $schemaAdapters = []; + + /** + * @var \Illuminate\Database\SQLiteConnection */ private $connection; - public function __construct(\Illuminate\Database\Connection $connection) + /** + * Database constructor. + * @param \Illuminate\Database\SQLiteConnection $connection + */ + public function __construct(\Illuminate\Database\SQLiteConnection $connection) { $this->connection = $connection; } @@ -26,4 +35,16 @@ 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); + } } \ No newline at end of file diff --git a/src/Meta/Sqlite/Schema.php b/src/Meta/Sqlite/Schema.php index f42568b7..9f99e0c2 100644 --- a/src/Meta/Sqlite/Schema.php +++ b/src/Meta/Sqlite/Schema.php @@ -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) {