diff --git a/docs/en/reference/configuration.rst b/docs/en/reference/configuration.rst index 32733fdd1f8..ebe1ffd4174 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..c1af58e7256 100644 --- a/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php +++ b/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php @@ -88,10 +88,12 @@ 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. + // as it is mostly present in every server setup. $dsn .= 'dbname=postgres' . ' '; } diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php index 813216babf5..e58be27aa20 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php @@ -2,8 +2,10 @@ namespace Doctrine\Tests\DBAL\Functional\Driver\PDOPgSql; +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 { @@ -20,6 +22,43 @@ protected function setUp() } } + /** + * @dataProvider getDatabaseParameter + */ + public function testDatabaseParameters($databaseName, $defaultDatabaseName, $expectedDatabaseName) + { + $params = $this->_conn->getParams(); + $params['dbname'] = $databaseName; + $params['default_dbname'] = $defaultDatabaseName; + + $connection = new Connection( + $params, + $this->_conn->getDriver(), + $this->_conn->getConfiguration(), + $this->_conn->getEventManager() + ); + + $this->assertSame( + $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 */