From 2ceadc0db2d48101deed696b260f2843f3a21d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Hems=C3=B8=20Rasmussen?= Date: Fri, 8 Jan 2016 05:12:13 +0100 Subject: [PATCH 1/5] Added parameter "default_dbname" to pdo_pgsql driver which can be used to override the default database --- docs/en/reference/configuration.rst | 2 ++ lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php | 3 ++- .../Functional/Driver/PDOPgSql/DriverTest.php | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/en/reference/configuration.rst b/docs/en/reference/configuration.rst index 32733fdd1f8..1350e9ee8e1 100644 --- a/docs/en/reference/configuration.rst +++ b/docs/en/reference/configuration.rst @@ -250,6 +250,8 @@ pdo\_pgsql - ``dbname`` (string): Name of the database/schema to connect to. - ``charset`` (string): The charset used when connecting to the database. +- ``default_dbname`` (string): Override the default database(postgres) + to connect to. - ``sslmode`` (string): Determines whether or with what priority a SSL TCP/IP connection will be negotiated with the server. See the list of available modes: diff --git a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php b/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php index 5f1a0cd6a74..3249df76886 100644 --- a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php +++ b/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php @@ -88,12 +88,13 @@ private function _constructPdoDsn(array $params) if (isset($params['dbname'])) { $dsn .= 'dbname=' . $params['dbname'] . ' '; + } elseif (isset($params['default_dbname'])) { + $dsn .= 'dbname=' . $params['default_dbname'] . ' '; } else { // Used for temporary connections to allow operations like dropping the database currently connected to. // Connecting without an explicit database does not work, therefore "postgres" database is used // as it is certainly present in every server setup. $dsn .= 'dbname=postgres' . ' '; - } if (isset($params['sslmode'])) { $dsn .= 'sslmode=' . $params['sslmode'] . ' '; diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php index 813216babf5..ee6787983da 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\DBAL\Functional\Driver\PDOPgSql; +use Doctrine\DBAL\Connection; use Doctrine\DBAL\Driver\PDOPgSql\Driver; use Doctrine\Tests\DBAL\Functional\Driver\AbstractDriverTest; @@ -20,6 +21,26 @@ protected function setUp() } } + public function testDefaultDatabaseOption() + { + $params = $this->_conn->getParams(); + $dbName = $params['dbname']; + $params['default_dbname'] = $dbName; + unset($params['dbname']); + + $connection = new Connection( + $params, + $this->_conn->getDriver(), + $this->_conn->getConfiguration(), + $this->_conn->getEventManager() + ); + + $this->assertSame( + $dbName, + $this->driver->getDatabase($connection) + ); + } + /** * @group DBAL-1146 */ From c31de12bee4039b92b9e9bcdcf61af4cd1fdaf56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Hems=C3=B8=20Rasmussen?= Date: Fri, 8 Jan 2016 15:22:52 +0100 Subject: [PATCH 2/5] Added whitespace --- docs/en/reference/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/reference/configuration.rst b/docs/en/reference/configuration.rst index 1350e9ee8e1..ebe1ffd4174 100644 --- a/docs/en/reference/configuration.rst +++ b/docs/en/reference/configuration.rst @@ -250,7 +250,7 @@ pdo\_pgsql - ``dbname`` (string): Name of the database/schema to connect to. - ``charset`` (string): The charset used when connecting to the database. -- ``default_dbname`` (string): Override the default database(postgres) +- ``default_dbname`` (string): Override the default database (postgres) to connect to. - ``sslmode`` (string): Determines whether or with what priority a SSL TCP/IP connection will be negotiated with the server. From d7bbd303cf9f096680ca4f32d5a3cf3ccd999a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Hems=C3=B8=20Rasmussen?= Date: Fri, 8 Jan 2016 16:03:19 +0100 Subject: [PATCH 3/5] Always connect postgres schema if dbname or default_dbname is not provided --- lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php b/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php index 3249df76886..c1af58e7256 100644 --- a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php +++ b/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php @@ -93,8 +93,9 @@ private function _constructPdoDsn(array $params) } else { // Used for temporary connections to allow operations like dropping the database currently connected to. // Connecting without an explicit database does not work, therefore "postgres" database is used - // as it is certainly present in every server setup. + // as it is mostly present in every server setup. $dsn .= 'dbname=postgres' . ' '; + } if (isset($params['sslmode'])) { $dsn .= 'sslmode=' . $params['sslmode'] . ' '; From f471a0fd1cf4a9af0f78dd8ad9fe0434f53db240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Hems=C3=B8=20Rasmussen?= Date: Mon, 11 Jan 2016 21:47:23 +0100 Subject: [PATCH 4/5] Added tests for all variants --- .../Functional/Driver/PDOPgSql/DriverTest.php | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php index ee6787983da..d3906224602 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Driver\PDOPgSql\Driver; use Doctrine\Tests\DBAL\Functional\Driver\AbstractDriverTest; +use Doctrine\Tests\TestUtil; class DriverTest extends AbstractDriverTest { @@ -21,12 +22,14 @@ protected function setUp() } } - public function testDefaultDatabaseOption() + /** + @dataProvider getDatabaseParameter + */ + public function testDatabaseParameters($databaseName, $defaultDatabaseName, $expectedDatabaseName) { $params = $this->_conn->getParams(); - $dbName = $params['dbname']; - $params['default_dbname'] = $dbName; - unset($params['dbname']); + $params['dbname'] = $databaseName; + $params['default_dbname'] = $defaultDatabaseName; $connection = new Connection( $params, @@ -36,11 +39,26 @@ public function testDefaultDatabaseOption() ); $this->assertSame( - $dbName, + $expectedDatabaseName, $this->driver->getDatabase($connection) ); } + public function getDatabaseParameter() + { + $params = TestUtil::getConnection()->getParams(); + $realDatabaseName = $params['dbname']; + $dummyDatabaseName = $realDatabaseName . 'a'; + + return array( + // dbname, default_dbname, expected + array($realDatabaseName, null, $realDatabaseName), + array($realDatabaseName, $dummyDatabaseName, $realDatabaseName), + array(null, $realDatabaseName, $realDatabaseName), + array(null, null, $this->getDatabaseNameForConnectionWithoutDatabaseNameParameter()), + ); + } + /** * @group DBAL-1146 */ From 253b602c14d2c45904f1713a7f067f4c041a1cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20Hems=C3=B8=20Rasmussen?= Date: Tue, 12 Jan 2016 18:59:03 +0100 Subject: [PATCH 5/5] Fixed indenting after rebase --- .../Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php index d3906224602..e58be27aa20 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php @@ -23,7 +23,7 @@ protected function setUp() } /** - @dataProvider getDatabaseParameter + * @dataProvider getDatabaseParameter */ public function testDatabaseParameters($databaseName, $defaultDatabaseName, $expectedDatabaseName) {