Skip to content

Commit eb7f3a2

Browse files
Fix db name suffix parsing for replica (#1470)
Co-authored-by: Gabriel Ostrolucký <gadelat@gmail.com> Co-authored-by: Gabriel Ostrolucký <gabriel.ostrolucky@gmail.com>
1 parent e7be98c commit eb7f3a2

File tree

3 files changed

+54
-5
lines changed

3 files changed

+54
-5
lines changed

ConnectionFactory.php

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,9 @@ public function createConnection(array $params, ?Configuration $config = null, ?
6969
}
7070

7171
$connection = DriverManager::getConnection($params, $config, $eventManager);
72-
$params = array_merge($connection->getParams(), $overriddenOptions);
72+
$params = $this->addDatabaseSuffix(array_merge($connection->getParams(), $overriddenOptions));
7373
$driver = $connection->getDriver();
7474

75-
if (isset($params['dbname']) && isset($params['dbname_suffix'])) {
76-
$params['dbname'] .= $params['dbname_suffix'];
77-
}
78-
7975
if (! isset($params['charset'])) {
8076
if ($driver instanceof AbstractMySQLDriver) {
8177
$params['charset'] = 'utf8mb4';
@@ -160,4 +156,30 @@ private function initializeTypes(): void
160156

161157
$this->initialized = true;
162158
}
159+
160+
/**
161+
* @param array<string, mixed> $params
162+
*
163+
* @return array<string, mixed>
164+
*/
165+
private function addDatabaseSuffix(array $params): array
166+
{
167+
if (isset($params['dbname']) && isset($params['dbname_suffix'])) {
168+
$params['dbname'] .= $params['dbname_suffix'];
169+
}
170+
171+
foreach ($params['replica'] ?? [] as $key => $replicaParams) {
172+
if (! isset($replicaParams['dbname'], $replicaParams['dbname_suffix'])) {
173+
continue;
174+
}
175+
176+
$params['replica'][$key]['dbname'] .= $replicaParams['dbname_suffix'];
177+
}
178+
179+
if (isset($params['primary']['dbname'], $params['primary']['dbname_suffix'])) {
180+
$params['primary']['dbname'] .= $params['primary']['dbname_suffix'];
181+
}
182+
183+
return $params;
184+
}
163185
}

Resources/doc/configuration.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ Configuration Reference
148148
user: root
149149
password: ~
150150
charset: ~
151+
dbname_suffix: ~
151152
path: ~
152153
memory: ~
153154
@@ -516,6 +517,7 @@ Configuration Reference
516517
user="root"
517518
password="null"
518519
charset=""
520+
dbname_suffix=""
519521
path=""
520522
memory=""
521523
unix-socket=""

Tests/ConnectionFactoryTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,31 @@ public function testDbnameSuffix(): void
167167

168168
$this->assertSame('main_test', $connection->getParams()['dbname']);
169169
}
170+
171+
public function testDbnameSuffixForReplicas(): void
172+
{
173+
$connection = (new ConnectionFactory([]))->createConnection([
174+
'driver' => 'pdo_mysql',
175+
'primary' => [
176+
'url' => 'mysql://root:password@database:3306/primary?serverVersion=mariadb-10.5.8',
177+
'dbname_suffix' => '_test',
178+
],
179+
'replica' => [
180+
'replica1' => [
181+
'url' => 'mysql://root:password@database:3306/replica?serverVersion=mariadb-10.5.8',
182+
'dbname_suffix' => '_test',
183+
],
184+
],
185+
]);
186+
187+
$parsedParams = $connection->getParams();
188+
$this->assertArrayHasKey('primary', $parsedParams);
189+
$this->assertArrayHasKey('replica', $parsedParams);
190+
$this->assertArrayHasKey('replica1', $parsedParams['replica']);
191+
192+
$this->assertSame('primary_test', $parsedParams['primary']['dbname']);
193+
$this->assertSame('replica_test', $parsedParams['replica']['replica1']['dbname']);
194+
}
170195
}
171196

172197
/**

0 commit comments

Comments
 (0)