From 5a94ec5c9081ddf10061b95e0c140dc260d6b6d3 Mon Sep 17 00:00:00 2001 From: Pete Walker Date: Tue, 10 Nov 2020 20:24:48 +0000 Subject: [PATCH] Make master connections respect driverOptions (#1253) Changes introduced in https://github.com/doctrine/DoctrineBundle/pull/1240/commits/43536860ed18d6f4f79f30b4ed89987f6f7ac58a fixed the problem for creating and dropping commands, but introduced issues everywhere else where primary/replica options are used. This patch reverts back previous handling and patches only individual commands that manipulate with connection options. --- Command/CreateDatabaseDoctrineCommand.php | 14 +++++++++++--- Command/DropDatabaseDoctrineCommand.php | 14 +++++++++++--- DependencyInjection/DoctrineExtension.php | 1 + .../AbstractDoctrineExtensionTest.php | 1 - 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Command/CreateDatabaseDoctrineCommand.php b/Command/CreateDatabaseDoctrineCommand.php index be160e05b..d06306648 100644 --- a/Command/CreateDatabaseDoctrineCommand.php +++ b/Command/CreateDatabaseDoctrineCommand.php @@ -52,14 +52,22 @@ protected function execute(InputInterface $input, OutputInterface $output) $ifNotExists = $input->getOption('if-not-exists'); - $params = $connection->getParams(); + $driverOptions = []; + $params = $connection->getParams(); + + if (isset($params['driverOptions'])) { + $driverOptions = $params['driverOptions']; + } + if (isset($params['master'])) { - $params = $params['master']; + $params = $params['master']; + $params['driverOptions'] = $driverOptions; } // Since doctrine/dbal 2.11 master has been replaced by primary if (isset($params['primary'])) { - $params = $params['primary']; + $params = $params['primary']; + $params['driverOptions'] = $driverOptions; } // Cannot inject `shard` option in parent::getDoctrineConnection diff --git a/Command/DropDatabaseDoctrineCommand.php b/Command/DropDatabaseDoctrineCommand.php index 6f7935279..df1bbc411 100644 --- a/Command/DropDatabaseDoctrineCommand.php +++ b/Command/DropDatabaseDoctrineCommand.php @@ -61,14 +61,22 @@ protected function execute(InputInterface $input, OutputInterface $output) $ifExists = $input->getOption('if-exists'); - $params = $connection->getParams(); + $driverOptions = []; + $params = $connection->getParams(); + + if (isset($params['driverOptions'])) { + $driverOptions = $params['driverOptions']; + } + if (isset($params['master'])) { - $params = $params['master']; + $params = $params['master']; + $params['driverOptions'] = $driverOptions; } // Since doctrine/dbal 2.11 master has been replaced by primary if (isset($params['primary'])) { - $params = $params['primary']; + $params = $params['primary']; + $params['driverOptions'] = $driverOptions; } if (isset($params['shards'])) { diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index c468ff2b2..b76138093 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -261,6 +261,7 @@ protected function getConnectionOptions($connection) if (! empty($options['slaves'])) { $nonRewrittenKeys = [ 'driver' => true, + 'driverOptions' => true, 'driverClass' => true, 'wrapperClass' => true, 'keepSlave' => true, diff --git a/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php b/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php index cbaf8ef5e..703cdb84d 100644 --- a/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php +++ b/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php @@ -126,7 +126,6 @@ public function testDbalLoadSingleMasterSlaveConnection() 'dbname' => 'mysql_db', 'host' => 'localhost', 'unix_socket' => '/path/to/mysqld.sock', - 'driverOptions' => [], ], $param['master'] );