Merge pull request #134 from mrbase/backport-slaves-configuration

Backport slaves configuration
This commit is contained in:
William Durand 2012-04-17 06:01:20 -07:00
commit c032f468b3
4 changed files with 107 additions and 5 deletions

View file

@ -169,6 +169,18 @@ class Configuration implements ConfigurationInterface
->scalarNode('password')->defaultValue('')->end()
->scalarNode('dsn')->defaultValue('')->end()
->scalarNode('classname')->defaultValue($this->debug ? 'DebugPDO' : 'PropelPDO')->end()
->arrayNode('slaves')
->useAttributeAsKey('name')
->prototype('array')
->children()
->scalarNode('driver')->defaultValue('mysql')->end()
->scalarNode('user')->defaultValue('root')->end()
->scalarNode('password')->defaultValue('')->end()
->scalarNode('dsn')->defaultValue('')->end()
->scalarNode('classname')->defaultValue($this->debug ? 'DebugPDO' : 'PropelPDO')->end()
->end()
->end()
->end()
->end()
->fixXmlConfig('option')
->children()

View file

@ -104,6 +104,9 @@ class PropelExtension extends Extension
$c = array();
foreach ($config['connections'] as $name => $conf) {
$c['datasources'][$name]['adapter'] = $conf['driver'];
if (!empty($conf['slaves'])) {
$c['datasources'][$name]['slaves']['connection'] = $conf['slaves'];
}
foreach (array('dsn', 'user', 'password', 'classname', 'options', 'attributes', 'settings') as $att) {
if (isset($conf[$att])) {

View file

@ -90,11 +90,17 @@ propel:
attributes: {}
# default_connection: default
# connections:
# default:
# driver: mysql
# user: root
# password: null
# dsn: mysql:host=localhost;dbname=test
# default:
# driver: mysql
# user: root
# password: null
# dsn: mysql:host=localhost;dbname=test
# slaves:
# slave_server_1:
# user: root
# password: null
# dsn: mysql:host=localhost;dbname=test_slave_1
#
# options:
# ATTR_PERSISTENT: false
# attributes:

View file

@ -271,4 +271,85 @@ class PropelExtensionTest extends TestCase
$this->assertEquals('SET NAMES UTF8', $config['datasources']['default']['connection']['settings']['queries']['query']);
}
public function testDbalWithSlaves()
{
$container = $this->getContainer();
$loader = new PropelExtension();
$config_base = array(
'path' => '/propel',
'phing_path' => '/phing',
);
$config_mysql = array(
'user' => 'mysql_usr',
'password' => 'mysql_pwd',
'dsn' => 'mysql_dsn',
'driver' => 'mysql',
'slaves' => array(
'mysql_slave1' => array(
'user' => 'mysql_usrs1',
'password' => 'mysql_pwds1',
'dsn' => 'mysql_dsns1',
),
'mysql_slave2' => array(
'user' => 'mysql_usrs2',
'password' => 'mysql_pwds2',
'dsn' => 'mysql_dsns2',
),
),
);
$configs = array($config_base, array('dbal' => $config_mysql));
$loader->load($configs, $container);
$arguments = $container->getDefinition('propel.configuration')->getArguments();
$config = $arguments[0];
$this->assertArrayHasKey('slaves', $config['datasources']['default']);
$this->assertArrayHasKey('connection', $config['datasources']['default']['slaves']);
$this->assertArrayHasKey('mysql_slave1', $config['datasources']['default']['slaves']['connection']);
$this->assertArrayHasKey('user', $config['datasources']['default']['slaves']['connection']['mysql_slave1']);
$this->assertArrayHasKey('password', $config['datasources']['default']['slaves']['connection']['mysql_slave1']);
$this->assertArrayHasKey('dsn', $config['datasources']['default']['slaves']['connection']['mysql_slave1']);
$this->assertArrayHasKey('mysql_slave2', $config['datasources']['default']['slaves']['connection']);
$this->assertArrayHasKey('user', $config['datasources']['default']['slaves']['connection']['mysql_slave2']);
$this->assertArrayHasKey('password', $config['datasources']['default']['slaves']['connection']['mysql_slave2']);
$this->assertArrayHasKey('dsn', $config['datasources']['default']['slaves']['connection']['mysql_slave2']);
$this->assertEquals("mysql_usrs1", $config['datasources']['default']['slaves']['connection']['mysql_slave1']['user']);
$this->assertEquals("mysql_pwds1", $config['datasources']['default']['slaves']['connection']['mysql_slave1']['password']);
$this->assertEquals("mysql_dsns1", $config['datasources']['default']['slaves']['connection']['mysql_slave1']['dsn']);
$this->assertEquals("mysql_usrs2", $config['datasources']['default']['slaves']['connection']['mysql_slave2']['user']);
$this->assertEquals("mysql_pwds2", $config['datasources']['default']['slaves']['connection']['mysql_slave2']['password']);
$this->assertEquals("mysql_dsns2", $config['datasources']['default']['slaves']['connection']['mysql_slave2']['dsn']);
}
public function testDbalWithNoSlaves()
{
$container = $this->getContainer();
$loader = new PropelExtension();
$config_base = array(
'path' => '/propel',
'phing_path' => '/phing',
);
$config_mysql = array(
'user' => 'mysql_usr',
'password' => 'mysql_pwd',
'dsn' => 'mysql_dsn',
'driver' => 'mysql'
);
$configs = array($config_base, array('dbal' => $config_mysql));
$loader->load($configs, $container);
$arguments = $container->getDefinition('propel.configuration')->getArguments();
$config = $arguments[0];
$this->assertArrayNotHasKey('slaves', $config['datasources']['default']);
}
}