From a10490e6e47503cc1aece06ae3f837952953a3dc Mon Sep 17 00:00:00 2001 From: nick Date: Mon, 6 Sep 2021 10:46:57 +1000 Subject: [PATCH] added support for microsoft sql server database --- .../MicrosoftSQLDatabaseManager.php | 57 +++++++++++++++++++ tests/TenantDatabaseManagerTest.php | 2 + 2 files changed, 59 insertions(+) create mode 100644 src/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php diff --git a/src/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php b/src/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php new file mode 100644 index 00000000..0bc34623 --- /dev/null +++ b/src/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php @@ -0,0 +1,57 @@ +connection === null) { + throw new NoConnectionSetException(static::class); + } + + return DB::connection($this->connection); + } + + public function setConnection(string $connection): void + { + $this->connection = $connection; + } + + public function createDatabase(TenantWithDatabase $tenant): bool + { + $database = $tenant->database()->getName(); + $charset = $this->database()->getConfig('charset'); + $collation = $this->database()->getConfig('collation'); + + return $this->database()->statement("CREATE DATABASE [{$database}]"); + } + + public function deleteDatabase(TenantWithDatabase $tenant): bool + { + return $this->database()->statement("DROP DATABASE [{$tenant->database()->getName()}]"); + } + + public function databaseExists(string $name): bool + { + return (bool) $this->database()->select("SELECT name FROM master.sys.databases WHERE name = '$name'"); + } + + public function makeConnectionConfig(array $baseConfig, string $databaseName): array + { + $baseConfig['database'] = $databaseName; + + return $baseConfig; + } +} diff --git a/tests/TenantDatabaseManagerTest.php b/tests/TenantDatabaseManagerTest.php index ead2bba8..c16cd8f9 100644 --- a/tests/TenantDatabaseManagerTest.php +++ b/tests/TenantDatabaseManagerTest.php @@ -15,6 +15,7 @@ use Stancl\Tenancy\Events\TenantCreated; use Stancl\Tenancy\Exceptions\TenantDatabaseAlreadyExistsException; use Stancl\Tenancy\Jobs\CreateDatabase; use Stancl\Tenancy\Listeners\BootstrapTenancy; +use Stancl\Tenancy\TenantDatabaseManagers\MicrosoftSQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\PermissionControlledMySQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager; @@ -99,6 +100,7 @@ class TenantDatabaseManagerTest extends TestCase ['sqlite', SQLiteDatabaseManager::class], ['pgsql', PostgreSQLDatabaseManager::class], ['pgsql', PostgreSQLSchemaManager::class], + ['sqlsrv', MicrosoftSQLDatabaseManager::class], ]; }