Skip to content

Commit

Permalink
Merge pull request #2588 from Deltachaos/patch-1
Browse files Browse the repository at this point in the history
Inherit charset from master connection if not set explicitly
  • Loading branch information
lcobucci committed Nov 19, 2017
2 parents 6311567 + c614747 commit 8c1e513
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 5 deletions.
10 changes: 8 additions & 2 deletions lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php
Expand Up @@ -224,7 +224,13 @@ protected function chooseConnectionConfiguration($connectionName, $params)
return $params['master'];
}

return $params['slaves'][array_rand($params['slaves'])];
$config = $params['slaves'][array_rand($params['slaves'])];

if ( ! isset($config['charset']) && isset($params['master']['charset'])) {
$config['charset'] = $params['master']['charset'];
}

return $config;
}

/**
Expand Down Expand Up @@ -364,7 +370,7 @@ public function query()
if ($logger) {
$logger->startQuery($args[0]);
}

$statement = $this->_conn->query(...$args);

if ($logger) {
Expand Down
44 changes: 41 additions & 3 deletions tests/Doctrine/Tests/DBAL/Functional/MasterSlaveConnectionTest.php
Expand Up @@ -2,6 +2,7 @@

namespace Doctrine\Tests\DBAL\Functional;

use Doctrine\DBAL\Connections\MasterSlaveConnection;
use Doctrine\DBAL\DriverManager;
use Doctrine\Tests\DbalFunctionalTestCase;

Expand Down Expand Up @@ -38,15 +39,52 @@ protected function setUp()
$this->_conn->insert('master_slave_table', array('test_int' => 1));
}

public function createMasterSlaveConnection($keepSlave = false)
private function createMasterSlaveConnection(bool $keepSlave = false) : MasterSlaveConnection
{
return DriverManager::getConnection($this->createMasterSlaveConnectionParams($keepSlave));
}

private function createMasterSlaveConnectionParams(bool $keepSlave = false) : array
{
$params = $this->_conn->getParams();
$params['master'] = $params;
$params['slaves'] = array($params, $params);
$params['keepSlave'] = $keepSlave;
$params['wrapperClass'] = 'Doctrine\DBAL\Connections\MasterSlaveConnection';
$params['wrapperClass'] = MasterSlaveConnection::class;

return $params;
}

public function testInheritCharsetFromMaster() : void
{
$charsets = [
'utf8',
'latin1'
];

return DriverManager::getConnection($params);
foreach ($charsets as $charset) {
$params = $this->createMasterSlaveConnectionParams();
$params['master']['charset'] = $charset;

foreach ($params['slaves'] as $index => $slaveParams) {
if (isset($slaveParams['charset'])) {
unset($params['slaves'][$index]['charset']);
}
}

/** @var MasterSlaveConnection $conn */
$conn = DriverManager::getConnection($params);
$conn->connect('slave');

self::assertFalse($conn->isConnectedToMaster());

$clientCharset = $conn->fetchColumn('select @@character_set_client as c');

self::assertSame(
$charset,
substr(strtolower($clientCharset), 0, strlen($charset))
);
}
}

public function testMasterOnConnect()
Expand Down

0 comments on commit 8c1e513

Please sign in to comment.