Skip to content

Commit 578037d

Browse files
Add "dbname_suffix" config option to vary the dbname per env
1 parent 79f11f8 commit 578037d

File tree

8 files changed

+44
-1
lines changed

8 files changed

+44
-1
lines changed

ConnectionFactory.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public function createConnection(array $params, ?Configuration $config = null, ?
5757
$overriddenOptions = $params['connection_override_options'] ?? [];
5858
unset($params['connection_override_options']);
5959

60-
if (! isset($params['pdo']) && (! isset($params['charset']) || $overriddenOptions)) {
60+
if (! isset($params['pdo']) && (! isset($params['charset']) || $overriddenOptions || isset($params['dbname_suffix']))) {
6161
$wrapperClass = null;
6262

6363
if (isset($params['wrapperClass'])) {
@@ -77,6 +77,10 @@ public function createConnection(array $params, ?Configuration $config = null, ?
7777
$params = array_merge($connection->getParams(), $overriddenOptions);
7878
$driver = $connection->getDriver();
7979

80+
if (isset($params['dbname']) && isset($params['dbname_suffix'])) {
81+
$params['dbname'] .= $params['dbname_suffix'];
82+
}
83+
8084
if ($driver instanceof AbstractMySQLDriver) {
8185
$params['charset'] = 'utf8mb4';
8286

DependencyInjection/Configuration.php

+1
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ private function configureDbalDriverNode(ArrayNodeDefinition $node): void
242242
->scalarNode('user')->info('Defaults to "root" at runtime.')->end()
243243
->scalarNode('password')->info('Defaults to null at runtime.')->end()
244244
->booleanNode('override_url')->defaultValue(false)->info('Allows overriding parts of the "url" parameter with dbname, host, port, user, and/or password parameters.')->end()
245+
->scalarNode('dbname_suffix')->end()
245246
->scalarNode('application_name')->end()
246247
->scalarNode('charset')->end()
247248
->scalarNode('path')->end()

Resources/config/schema/doctrine-1.0.xsd

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<xsd:attribute name="user" type="xsd:string" />
5353
<xsd:attribute name="password" type="xsd:string" />
5454
<xsd:attribute name="override-url" type="xsd:boolean" />
55+
<xsd:attribute name="dbname-suffix" type="xsd:string" />
5556
<xsd:attribute name="application-name" type="xsd:string" />
5657
<xsd:attribute name="path" type="xsd:string" />
5758
<xsd:attribute name="unix-socket" type="xsd:string" />

Resources/doc/configuration.rst

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Configuration Reference
3131
user: root
3232
password: ~
3333
charset: "UTF8"
34+
dbname_suffix: ~
3435
3536
# SQLite specific
3637
path: ~
@@ -939,6 +940,7 @@ can configure. The following block shows all possible configuration keys:
939940
port: 1234
940941
user: user
941942
password: secret
943+
dbname_suffix: _test
942944
driver: pdo_mysql
943945
driver_class: MyNamespace\MyDriverImpl
944946
options:

Tests/ConnectionFactoryTest.php

+10
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,16 @@ public function testConnectionOverrideOptions(): void
9696

9797
$this->assertEquals($params, array_intersect_key($connection->getParams(), $params));
9898
}
99+
100+
public function testDbnameSuffix(): void
101+
{
102+
$connection = (new ConnectionFactory([]))->createConnection([
103+
'url' => 'mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8',
104+
'dbname_suffix' => '_test',
105+
]);
106+
107+
$this->assertSame('main_test', $connection->getParams()['dbname']);
108+
}
99109
}
100110

101111
/**

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php

+9
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,15 @@ public function testDbalLoadPartialUrlOverrideSetsDefaults(): void
166166
$this->assertFalse(isset($config['override_url']));
167167
}
168168

169+
public function testDbalDbnameSuffix(): void
170+
{
171+
$container = $this->loadContainer('dbal_dbname_suffix');
172+
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
173+
174+
$this->assertSame('mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8', $config['url']);
175+
$this->assertSame('_test', $config['dbname_suffix']);
176+
}
177+
169178
public function testDbalLoadSingleMasterSlaveConnection(): void
170179
{
171180
$container = $this->loadContainer('dbal_service_single_master_slave_connection');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" ?>
2+
3+
<srv:container xmlns="http://symfony.com/schema/dic/doctrine"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:srv="http://symfony.com/schema/dic/services"
6+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
7+
http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
8+
9+
<config>
10+
<dbal url="mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8" dbname-suffix="_test" />
11+
</config>
12+
</srv:container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
doctrine:
2+
dbal:
3+
url: 'mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8'
4+
dbname_suffix: _test

0 commit comments

Comments
 (0)