From 6fe154ab94c1d2581570d6c39fb17dd1efbbccc0 Mon Sep 17 00:00:00 2001 From: Joel Wurtz Date: Thu, 10 Nov 2011 16:09:22 +0100 Subject: [PATCH 1/4] Add slaves configuration for propel in config.yml --- DependencyInjection/Configuration.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 0a782f3..f7b0e34 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -107,6 +107,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() @@ -169,6 +181,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() From 0507a572779fd25d7ade06ccd01faf03dc302d39 Mon Sep 17 00:00:00 2001 From: ulrik nielsen Date: Tue, 17 Apr 2012 12:12:23 +0200 Subject: [PATCH 2/4] Avoid error when no slave database configuration are given + adding case in the test --- DependencyInjection/PropelExtension.php | 3 + .../PropelExtensionTest.php | 81 +++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/DependencyInjection/PropelExtension.php b/DependencyInjection/PropelExtension.php index eff62ea..f00f89b 100644 --- a/DependencyInjection/PropelExtension.php +++ b/DependencyInjection/PropelExtension.php @@ -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])) { diff --git a/Tests/DependencyInjection/PropelExtensionTest.php b/Tests/DependencyInjection/PropelExtensionTest.php index 7b920b3..6010177 100644 --- a/Tests/DependencyInjection/PropelExtensionTest.php +++ b/Tests/DependencyInjection/PropelExtensionTest.php @@ -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']); + } + } From 97dbf813dd6749f66cfac11546501aa4592e4ef3 Mon Sep 17 00:00:00 2001 From: ulrik nielsen Date: Tue, 17 Apr 2012 14:25:13 +0200 Subject: [PATCH 3/4] slaves should only be added as child of a master connection --- DependencyInjection/Configuration.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index f7b0e34..efc092c 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -107,18 +107,6 @@ 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() From 04d607bbf85c834247b5c5b64edd0d4b5e1ec6a9 Mon Sep 17 00:00:00 2001 From: ulrik nielsen Date: Tue, 17 Apr 2012 14:56:17 +0200 Subject: [PATCH 4/4] updated docs --- Resources/doc/README.markdown | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Resources/doc/README.markdown b/Resources/doc/README.markdown index 2328813..da93f24 100644 --- a/Resources/doc/README.markdown +++ b/Resources/doc/README.markdown @@ -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: