diff --git a/src/Configuration/Connections/MysqlConnection.php b/src/Configuration/Connections/MysqlConnection.php index f5ecb044..7d15717d 100644 --- a/src/Configuration/Connections/MysqlConnection.php +++ b/src/Configuration/Connections/MysqlConnection.php @@ -4,7 +4,7 @@ namespace LaravelDoctrine\ORM\Configuration\Connections; -use Illuminate\Support\Arr; +use function array_merge; class MysqlConnection extends Connection { @@ -15,25 +15,29 @@ class MysqlConnection extends Connection */ public function resolve(array $settings = []): array { - return [ - 'driver' => 'pdo_mysql', - 'host' => Arr::get($settings, 'host'), - 'dbname' => Arr::get($settings, 'database'), - 'user' => Arr::get($settings, 'username'), - 'password' => Arr::get($settings, 'password'), - 'charset' => Arr::get($settings, 'charset'), - 'port' => Arr::get($settings, 'port'), - 'unix_socket' => Arr::get($settings, 'unix_socket'), - 'ssl_key' => Arr::get($settings, 'ssl_key'), - 'ssl_cert' => Arr::get($settings, 'ssl_cert'), - 'ssl_ca' => Arr::get($settings, 'ssl_ca'), - 'ssl_capath' => Arr::get($settings, 'ssl_capath'), - 'ssl_cipher' => Arr::get($settings, 'ssl_cipher'), - 'prefix' => Arr::get($settings, 'prefix'), - 'defaultTableOptions' => Arr::get($settings, 'defaultTableOptions', []), - 'serverVersion' => Arr::get($settings, 'serverVersion'), - 'wrapperClass' => Arr::get($settings, 'wrapperClass'), - 'driverOptions' => Arr::get($settings, 'options', []), - ]; + $overrides = ['driver' => 'pdo_mysql']; + + // Map Laravel keys to Doctrine DBAL keys + if (isset($settings['database'])) { + $overrides['dbname'] = $settings['database']; + unset($settings['database']); + } + + if (isset($settings['username'])) { + $overrides['user'] = $settings['username']; + unset($settings['username']); + } + + if (isset($settings['options'])) { + $overrides['driverOptions'] = $settings['options']; + unset($settings['options']); + } + + // Set default for defaultTableOptions if not present + if (! isset($settings['defaultTableOptions'])) { + $overrides['defaultTableOptions'] = []; + } + + return array_merge($settings, $overrides); } } diff --git a/src/Configuration/Connections/OracleConnection.php b/src/Configuration/Connections/OracleConnection.php index 5f98848e..2237bf7d 100644 --- a/src/Configuration/Connections/OracleConnection.php +++ b/src/Configuration/Connections/OracleConnection.php @@ -4,7 +4,7 @@ namespace LaravelDoctrine\ORM\Configuration\Connections; -use Illuminate\Support\Arr; +use function array_merge; class OracleConnection extends Connection { @@ -15,21 +15,34 @@ class OracleConnection extends Connection */ public function resolve(array $settings = []): array { - return [ - 'driver' => 'oci8', - 'host' => Arr::get($settings, 'host'), - 'dbname' => Arr::get($settings, 'database'), - 'servicename' => Arr::get($settings, 'service_name'), - 'service' => Arr::get($settings, 'service'), - 'user' => Arr::get($settings, 'username'), - 'password' => Arr::get($settings, 'password'), - 'charset' => Arr::get($settings, 'charset'), - 'port' => Arr::get($settings, 'port'), - 'prefix' => Arr::get($settings, 'prefix'), - 'defaultTableOptions' => Arr::get($settings, 'defaultTableOptions', []), - 'persistent' => Arr::get($settings, 'persistent'), - 'wrapperClass' => Arr::get($settings, 'wrapperClass'), - 'connectstring' => Arr::get($settings, 'connectstring'), - ]; + $overrides = ['driver' => 'oci8']; + + // Map Laravel keys to Doctrine DBAL keys + if (isset($settings['database'])) { + $overrides['dbname'] = $settings['database']; + unset($settings['database']); + } + + if (isset($settings['username'])) { + $overrides['user'] = $settings['username']; + unset($settings['username']); + } + + if (isset($settings['service_name'])) { + $overrides['servicename'] = $settings['service_name']; + unset($settings['service_name']); + } + + if (isset($settings['options'])) { + $overrides['driverOptions'] = $settings['options']; + unset($settings['options']); + } + + // Set default for defaultTableOptions if not present + if (! isset($settings['defaultTableOptions'])) { + $overrides['defaultTableOptions'] = []; + } + + return array_merge($settings, $overrides); } } diff --git a/src/Configuration/Connections/PgsqlConnection.php b/src/Configuration/Connections/PgsqlConnection.php index e0aa92ad..ebbe53ae 100644 --- a/src/Configuration/Connections/PgsqlConnection.php +++ b/src/Configuration/Connections/PgsqlConnection.php @@ -4,7 +4,7 @@ namespace LaravelDoctrine\ORM\Configuration\Connections; -use Illuminate\Support\Arr; +use function array_merge; class PgsqlConnection extends Connection { @@ -15,25 +15,29 @@ class PgsqlConnection extends Connection */ public function resolve(array $settings = []): array { - return [ - 'driver' => 'pdo_pgsql', - 'host' => Arr::get($settings, 'host'), - 'dbname' => Arr::get($settings, 'database'), - 'user' => Arr::get($settings, 'username'), - 'password' => Arr::get($settings, 'password'), - 'charset' => Arr::get($settings, 'charset'), - 'port' => Arr::get($settings, 'port'), - 'sslmode' => Arr::get($settings, 'sslmode'), - 'sslkey' => Arr::get($settings, 'sslkey'), - 'sslcert' => Arr::get($settings, 'sslcert'), - 'sslrootcert' => Arr::get($settings, 'sslrootcert'), - 'sslcrl' => Arr::get($settings, 'sslcrl'), - 'gssencmode' => Arr::get($settings, 'gssencmode'), - 'prefix' => Arr::get($settings, 'prefix'), - 'defaultTableOptions' => Arr::get($settings, 'defaultTableOptions', []), - 'serverVersion' => Arr::get($settings, 'serverVersion'), - 'wrapperClass' => Arr::get($settings, 'wrapperClass'), - 'driverOptions' => Arr::get($settings, 'options', []), - ]; + $overrides = ['driver' => 'pdo_pgsql']; + + // Map Laravel keys to Doctrine DBAL keys + if (isset($settings['database'])) { + $overrides['dbname'] = $settings['database']; + unset($settings['database']); + } + + if (isset($settings['username'])) { + $overrides['user'] = $settings['username']; + unset($settings['username']); + } + + if (isset($settings['options'])) { + $overrides['driverOptions'] = $settings['options']; + unset($settings['options']); + } + + // Set default for defaultTableOptions if not present + if (! isset($settings['defaultTableOptions'])) { + $overrides['defaultTableOptions'] = []; + } + + return array_merge($settings, $overrides); } } diff --git a/src/Configuration/Connections/SqliteConnection.php b/src/Configuration/Connections/SqliteConnection.php index ffe045e1..62e140ca 100644 --- a/src/Configuration/Connections/SqliteConnection.php +++ b/src/Configuration/Connections/SqliteConnection.php @@ -7,6 +7,8 @@ use Illuminate\Support\Arr; use Illuminate\Support\Str; +use function array_merge; + class SqliteConnection extends Connection { /** @@ -16,17 +18,32 @@ class SqliteConnection extends Connection */ public function resolve(array $settings = []): array { - return [ - 'driver' => 'pdo_sqlite', - 'user' => Arr::get($settings, 'username'), - 'password' => Arr::get($settings, 'password'), - 'prefix' => Arr::get($settings, 'prefix'), - 'memory' => $this->isMemory($settings), - 'path' => Arr::get($settings, 'database'), - 'defaultTableOptions' => Arr::get($settings, 'defaultTableOptions', []), - 'driverOptions' => Arr::get($settings, 'options', []), - 'wrapperClass' => Arr::get($settings, 'wrapperClass'), - ]; + $overrides = ['driver' => 'pdo_sqlite']; + + $overrides['memory'] = $this->isMemory($settings); + + // Map Laravel keys to Doctrine DBAL keys + if (isset($settings['database'])) { + $overrides['path'] = $settings['database']; + unset($settings['database']); + } + + if (isset($settings['username'])) { + $overrides['user'] = $settings['username']; + unset($settings['username']); + } + + if (isset($settings['options'])) { + $overrides['driverOptions'] = $settings['options']; + unset($settings['options']); + } + + // Set default for defaultTableOptions if not present + if (! isset($settings['defaultTableOptions'])) { + $overrides['defaultTableOptions'] = []; + } + + return array_merge($settings, $overrides); } /** @param mixed[] $settings */ diff --git a/src/Configuration/Connections/SqlsrvConnection.php b/src/Configuration/Connections/SqlsrvConnection.php index 36499aaf..7d6c1317 100644 --- a/src/Configuration/Connections/SqlsrvConnection.php +++ b/src/Configuration/Connections/SqlsrvConnection.php @@ -4,8 +4,6 @@ namespace LaravelDoctrine\ORM\Configuration\Connections; -use Illuminate\Support\Arr; - use function array_merge; class SqlsrvConnection extends Connection @@ -17,29 +15,38 @@ class SqlsrvConnection extends Connection */ public function resolve(array $settings = []): array { - return [ - 'driver' => 'pdo_sqlsrv', - 'host' => Arr::get($settings, 'host'), - 'dbname' => Arr::get($settings, 'database'), - 'user' => Arr::get($settings, 'username'), - 'password' => Arr::get($settings, 'password'), - 'port' => Arr::get($settings, 'port'), - 'prefix' => Arr::get($settings, 'prefix'), - 'charset' => Arr::get($settings, 'charset'), - 'defaultTableOptions' => Arr::get($settings, 'defaultTableOptions', []), - 'serverVersion' => Arr::get($settings, 'serverVersion'), - 'wrapperClass' => Arr::get($settings, 'wrapperClass'), - 'driverOptions' => array_merge( - Arr::get($settings, 'options', []), - // @codeCoverageIgnoreStart - isset($settings['encrypt']) - ? ['encrypt' => Arr::get($settings, 'encrypt')] - : [], - isset($settings['trust_server_certificate']) - ? ['trustServerCertificate' => Arr::get($settings, 'trust_server_certificate')] - : [], - // @codeCoverageIgnoreEnd - ), - ]; + $overrides = ['driver' => 'pdo_sqlsrv']; + + // Map Laravel keys to Doctrine DBAL keys + if (isset($settings['database'])) { + $overrides['dbname'] = $settings['database']; + unset($settings['database']); + } + + if (isset($settings['username'])) { + $overrides['user'] = $settings['username']; + unset($settings['username']); + } + + $overrides['driverOptions'] = []; + if (isset($settings['options'])) { + $overrides['driverOptions'] = $settings['options']; + unset($settings['options']); + } + + if (isset($settings['encrypt'])) { + $overrides['driverOptions']['encrypt'] = $settings['encrypt']; + } + + if (isset($settings['trust_server_certificate'])) { + $overrides['driverOptions']['trustServerCertificate'] = $settings['trust_server_certificate']; + } + + // Set default for defaultTableOptions if not present + if (! isset($settings['defaultTableOptions'])) { + $overrides['defaultTableOptions'] = []; + } + + return array_merge($settings, $overrides); } } diff --git a/tests/Feature/Configuration/Connections/OracleConnectionTest.php b/tests/Feature/Configuration/Connections/OracleConnectionTest.php index 3f38aff7..60f9e227 100644 --- a/tests/Feature/Configuration/Connections/OracleConnectionTest.php +++ b/tests/Feature/Configuration/Connections/OracleConnectionTest.php @@ -29,18 +29,20 @@ public function testCanResolve(): void $resolved = $this->connection->resolve([ 'driver' => 'oci8', 'host' => 'host', + 'service_name' => 'service_name', 'database' => 'database', 'username' => 'username', 'password' => 'password', 'charset' => 'charset', 'port' => 'port', 'prefix' => 'prefix', - 'defaultTableOptions' => [], + 'options' => [], 'persistent' => 'persistent', ]); $this->assertEquals('oci8', $resolved['driver']); $this->assertEquals('host', $resolved['host']); + $this->assertEquals('service_name', $resolved['servicename']); $this->assertEquals('database', $resolved['dbname']); $this->assertEquals('username', $resolved['user']); $this->assertEquals('password', $resolved['password']); @@ -48,6 +50,7 @@ public function testCanResolve(): void $this->assertEquals('port', $resolved['port']); $this->assertEquals('prefix', $resolved['prefix']); $this->assertCount(0, $resolved['defaultTableOptions']); + $this->assertCount(0, $resolved['driverOptions']); $this->assertEquals('persistent', $resolved['persistent']); } diff --git a/tests/Feature/Configuration/Connections/PgsqlConnectionTest.php b/tests/Feature/Configuration/Connections/PgsqlConnectionTest.php index bef99775..a1256a5a 100644 --- a/tests/Feature/Configuration/Connections/PgsqlConnectionTest.php +++ b/tests/Feature/Configuration/Connections/PgsqlConnectionTest.php @@ -41,8 +41,8 @@ public function testCanResolve(): void 'sslrootcert' => 'sslrootcert', 'sslcrl' => 'sslcrl', 'gssencmode' => 'gssencmode', - 'defaultTableOptions' => [], - 'driverOptions' => [], + 'application_name' => 'application_name', + 'options' => [], ]); $this->assertEquals('pdo_pgsql', $resolved['driver']); @@ -59,6 +59,7 @@ public function testCanResolve(): void $this->assertEquals('sslcrl', $resolved['sslcrl']); $this->assertEquals('gssencmode', $resolved['gssencmode']); $this->assertEquals('prefix', $resolved['prefix']); + $this->assertEquals('application_name', $resolved['application_name']); $this->assertCount(0, $resolved['defaultTableOptions']); $this->assertCount(0, $resolved['driverOptions']); } diff --git a/tests/Feature/Configuration/Connections/SqliteConnectionTest.php b/tests/Feature/Configuration/Connections/SqliteConnectionTest.php index 28f8fa33..536b0ba7 100644 --- a/tests/Feature/Configuration/Connections/SqliteConnectionTest.php +++ b/tests/Feature/Configuration/Connections/SqliteConnectionTest.php @@ -32,8 +32,7 @@ public function testCanResolve(): void 'username' => 'username', 'password' => 'password', 'prefix' => 'prefix', - 'defaultTableOptions' => [], - 'driverOptions' => [], + 'options' => [], ]); $this->assertEquals('pdo_sqlite', $resolved['driver']); diff --git a/tests/Feature/Configuration/Connections/SqlsrvConnectionTest.php b/tests/Feature/Configuration/Connections/SqlsrvConnectionTest.php index e863f737..f64db2dd 100644 --- a/tests/Feature/Configuration/Connections/SqlsrvConnectionTest.php +++ b/tests/Feature/Configuration/Connections/SqlsrvConnectionTest.php @@ -35,8 +35,9 @@ public function testCanResolve(): void 'port' => 'port', 'prefix' => 'prefix', 'charset' => 'charset', - 'defaultTableOptions' => [], - 'driverOptions' => [], + 'encrypt' => 'encrypt', + 'trust_server_certificate' => 'trust_server_certificate', + 'options' => [], ]); $this->assertEquals('pdo_sqlsrv', $resolved['driver']); @@ -48,7 +49,8 @@ public function testCanResolve(): void $this->assertEquals('prefix', $resolved['prefix']); $this->assertEquals('charset', $resolved['charset']); $this->assertCount(0, $resolved['defaultTableOptions']); - $this->assertCount(0, $resolved['driverOptions']); + $this->assertEquals('encrypt', $resolved['driverOptions']['encrypt']); + $this->assertEquals('trust_server_certificate', $resolved['driverOptions']['trustServerCertificate']); } protected function tearDown(): void