<!-- 
RSS generated by JIRA (5.2.7#850-sha1:b2af0c8dc8537b36121c6a579fabbdf79fc919e5) at Mon May 20 06:51:44 UTC 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://www.doctrine-project.org/jira/si/jira.issueviews:issue-xml/DBAL-20/DBAL-20.xml?field=key&field=summary
-->
<rss version="0.92" >
<channel>
    <title>Doctrine Project</title>
    <link>http://www.doctrine-project.org/jira</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>5.2.7</version>
        <build-number>850</build-number>
        <build-date>21-02-2013</build-date>
    </build-info>

<item>
            <title>[DBAL-20] Add Connection Resolver</title>
                <link>http://www.doctrine-project.org/jira/browse/DBAL-20</link>
                <project id="10040" key="DBAL">Doctrine DBAL</project>
                        <description>&lt;p&gt;There should be an additional, optional &quot;connectionResolver&quot; which returns a driver instance for differentation between different drivers in Doctrine\DBAL\Connection instead of using $this-&amp;gt;_conn (which stays the default case)&lt;/p&gt;

&lt;p&gt;This is useful for master/slave, master/master or failover strategies inside the application&lt;/p&gt;</description>
                <environment></environment>
            <key id="11483">DBAL-20</key>
            <summary>Add Connection Resolver</summary>
                <type id="2" iconUrl="http://www.doctrine-project.org/jira/images/icons/issuetypes/newfeature.png">New Feature</type>
                                <priority id="3" iconUrl="http://www.doctrine-project.org/jira/images/icons/priorities/major.png">Major</priority>
                    <status id="5" iconUrl="http://www.doctrine-project.org/jira/images/icons/statuses/resolved.png">Resolved</status>
                    <resolution id="1">Fixed</resolution>
                                <assignee username="beberlei">Benjamin Eberlei</assignee>
                                <reporter username="beberlei">Benjamin Eberlei</reporter>
                        <labels>
                    </labels>
                <created>Sun, 13 Jun 2010 06:32:54 +0000</created>
                <updated>Sun, 1 Apr 2012 16:10:21 +0000</updated>
                    <resolved>Mon, 19 Dec 2011 14:56:53 +0000</resolved>
                                            <fixVersion>2.2</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="13394" author="diego.lewin" created="Mon, 21 Jun 2010 17:14:54 +0000"  >&lt;p&gt;I have done some working code, I extended  \Doctrine\DBAL\Connection:&lt;/p&gt;


&lt;p&gt;From the controllers/ service layer:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;$em-&amp;gt;getConnection()-&amp;gt;setConnection(&apos;write&apos;);

&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; {
    $em-&amp;gt;persist($user);
} &lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; (Exception $e) {
     echo $e-&amp;gt;getMessage();
}


$em-&amp;gt;getConnection()-&amp;gt;setConnection(&apos;read_1&apos;);

...

$em-&amp;gt;getConnection()-&amp;gt;setConnection(&apos;read_2&apos;);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;Obviously all the statements related with a unit of work will be associated with only one connection.&lt;/p&gt;

&lt;p&gt;_________________________________________&lt;/p&gt;

&lt;p&gt;When setting the event manager:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt; $connectionOptions =
              array(
            &apos;driver&apos;    =&amp;gt; $doctrineConfig[&apos;conn&apos;][&apos;driv&apos;],
            &apos;user&apos;      =&amp;gt; $doctrineConfig[&apos;conn&apos;][&apos;user&apos;],
            &apos;password&apos;  =&amp;gt; $doctrineConfig[&apos;conn&apos;][&apos;pass&apos;],
            &apos;dbname&apos;    =&amp;gt; $doctrineConfig[&apos;conn&apos;][&apos;dbname&apos;],
            &apos;host&apos;      =&amp;gt; $doctrineConfig[&apos;conn&apos;][&apos;host&apos;],
       
            &apos;wrapperClass&apos; =&amp;gt;&apos;\Fishpond\Doctrine\DBAL\Connections\Multiple&apos;
           
        );


        $connectionOptions[&apos;multiple_connections&apos;][&apos;read&apos;] = array(
        &lt;span class=&quot;code-quote&quot;&gt;&quot;driver&quot;&lt;/span&gt; =&amp;gt;  &lt;span class=&quot;code-quote&quot;&gt;&quot;pdo_mysql&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;user&quot;&lt;/span&gt; =
        &lt;span class=&quot;code-quote&quot;&gt;&quot;password&quot;&lt;/span&gt; =&amp;gt;
        &lt;span class=&quot;code-quote&quot;&gt;&quot;dbname&quot;&lt;/span&gt;=&amp;gt;
        &lt;span class=&quot;code-quote&quot;&gt;&quot;host&quot;&lt;/span&gt; =&amp;gt;
     

        );


        $connectionOptions[&apos;multiple_connections&apos;][&apos;write&apos;] = array(
        &lt;span class=&quot;code-quote&quot;&gt;&quot;driver&quot;&lt;/span&gt; =&amp;gt;  &lt;span class=&quot;code-quote&quot;&gt;&quot;pdo_mysql&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;user&quot;&lt;/span&gt; =&amp;gt; 
        &lt;span class=&quot;code-quote&quot;&gt;&quot;password&quot;&lt;/span&gt; =&amp;gt;
        &lt;span class=&quot;code-quote&quot;&gt;&quot;dbname&quot;&lt;/span&gt;=&amp;gt;
        &lt;span class=&quot;code-quote&quot;&gt;&quot;host&quot;&lt;/span&gt; =&amp;gt;

        );


$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;



&lt;p&gt;_________________________________________&lt;/p&gt;


&lt;p&gt;The new connection class itself:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;namespace Fishpond\Doctrine\DBAL\Connections;


class Multiple &lt;span class=&quot;code-keyword&quot;&gt;extends&lt;/span&gt; \Doctrine\DBAL\Connection
{
    /**
     * An array with the different database connection used by the EntityManager.
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; array of Doctrine\DBAL\Connection
     */
    &lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt; $_connections;

    /**
     * The index that indicate which
     * connection is used, &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; index is &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
     * the defaul connection is used
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;
     */
    &lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt; $_selectedConnection;


    /**
     * Initializes a &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; instance of the Connection class.
     *
     * @param array $params  The connection parameters.
     * @param Driver $driver
     * @param Configuration $config
     * @param EventManager $eventManager
     */

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function __construct(array $params, Driver  $driver, Configuration $config = &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;,
       EventManager     $eventManager = &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;)
    {

        parent::__construct($params, $driver, $config, $eventManager);
      
        foreach ($params[&apos;multiple_connections&apos;] as $connectionKey =&amp;gt; $paramsMultipleConnection) {
            $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connections[$connectionKey] = &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; \Doctrine\DBAL\Connection($paramsMultipleConnection, $driver, $config, $eventManager);
        }
    }
 


    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function setConnection($selectedConnection) {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_selectedConnection = $selectedConnection;
   
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;;
    }


    /**
     * Establishes the connection with the database.
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; TRUE &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; the connection was successfully established, FALSE &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;
     *                 the connection is already open.
     */
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function connect()
    {
        $status = parent::connect();
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($status == &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;) {
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;;
        }
       
        foreach ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connections as $connection) {
            $connection-&amp;gt;connect();
        }


        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;;
    }

    /**
     * Executes an, optionally parameterized, SQL query.
     *
     * If the query is parameterized, a prepared statement is used.
     * If an SQLLogger is configured, the execution is logged.
     *
     * @param string $query The SQL query to execute.
     * @param array $params The parameters to bind to the query, &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; any.
     * @&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; Doctrine\DBAL\Driver\Statement The executed statement.
     * @internal PERF: Directly prepares a driver statement, not a wrapper.
     */
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function executeQuery($query, array $params = array(), $types = array())
    {
    
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_selectedConnection == &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;) {
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::executeQuery($query, $params, $types);
        }

        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connections[$&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_selectedConnection]-&amp;gt;executeQuery($query, $params, $types);
       
       
    }



    /**
     * Starts a transaction by suspending auto-commit mode.
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; void
     */
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function beginTransaction()
    {
       parent::beginTransaction();
       foreach ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connections as $connection) {
            $connection-&amp;gt;beginTransaction();
       }
    }

    /**
     * Commits the current transaction.
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; void
     * @&lt;span class=&quot;code-keyword&quot;&gt;throws&lt;/span&gt; ConnectionException If the commit failed due to no active transaction or
     *                             because the transaction was marked &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; rollback only.
     */
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function commit()
    {
       parent::commit();
       foreach ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connections as $connection) {
            $connection-&amp;gt;commit();
       }
    }


  /**
     * Gets the wrapped driver connection.
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; Doctrine\DBAL\Driver\Connection
     */
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function getWrappedConnection()
    {
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_selectedConnection == &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;) {
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::getWrappedConnection();
        }

        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connections[$&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_selectedConnection]-&amp;gt;getWrappedConnection();
    }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; ..........&lt;br/&gt;
 ........&lt;/p&gt;

&lt;p&gt;The class is working so far (need much more testing), but the idea is if is not selected a connection it will work as it is now. Also, an &apos;automatic&apos; selection of the connection could happen in an event listener, where we could define rules about which connection should be used for  different conditions/entities.&lt;/p&gt;</comment>
                    <comment id="13694" author="beberlei" created="Sun, 25 Jul 2010 10:39:27 +0000"  >&lt;p&gt;Rescheduled for Beta4&lt;/p&gt;</comment>
                    <comment id="13963" author="romanb" created="Mon, 16 Aug 2010 12:59:04 +0000"  >&lt;p&gt;We could even move this post-2.0 since this is a new feature and carries the risk of opening a set of new issues.&lt;/p&gt;</comment>
                    <comment id="15800" author="lstrojny" created="Mon, 2 May 2011 21:22:31 +0000"  >&lt;p&gt;Here is what we use in production for a few weeks now:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&amp;lt;?php
namespace Jarlssen\Doctrine2\DBAL;

use Doctrine\DBAL\Connection,
    Doctrine\DBAL\Driver,
    Doctrine\ORM\Configuration,
    Doctrine\Common\EventManager,
    Doctrine\DBAL\Events;

class MasterSlaveConnection &lt;span class=&quot;code-keyword&quot;&gt;extends&lt;/span&gt; Connection
{
    /**
     * Master connection
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; Doctrine\DBAL\Driver\Connection
     */
    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; $_masterConn;

    /**
     * Slave connection
     *
     * @&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; Doctrine\DBAL\Driver\Connection
     */
    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; $_slaveConn;

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function __construct(
        array $params,
        Driver $driver,
        Configuration $config = &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;,
        EventManager $eventManager = &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
    )
    {
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (!isset($params[&apos;slaves&apos;]) or !isset($params[&apos;master&apos;])) {
            &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; \InvalidArgumentsException(&apos;master or slaves configuration missing&apos;);
        }

        $params[&apos;master&apos;][&apos;driver&apos;] = $params[&apos;driver&apos;];
        foreach ($params[&apos;slaves&apos;] as &amp;amp;$slave) {
            $slave[&apos;driver&apos;] = $params[&apos;driver&apos;];
        }

        parent::__construct($params, $driver, $config, $eventManager);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function connect($connectionName = &apos;slave&apos;)
    {
        $forceMasterAsSlave = &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;;

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;getTransactionNestingLevel() &amp;gt; 0) {
            $connectionName = &apos;master&apos;;
            $forceMasterAsSlave = &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;;
        }

        $connectionProperty = &apos;_&apos; . $connectionName . &apos;Conn&apos;;
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;{$connectionProperty}) {
            &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($forceMasterAsSlave) {
                $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_slaveConn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_conn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_masterConn;
            } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
                $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_conn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;{$connectionProperty};
            }
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;;
        }

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($connectionName === &apos;master&apos;) {
            /** Set master and slave connection to master to avoid invalid reads */
            $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_masterConn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_slaveConn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_conn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connectTo($connectionName);
        } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
            $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_slaveConn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_conn = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_connectTo($connectionName);
        }

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_eventManager-&amp;gt;hasListeners(Events::postConnect)) {
            $eventArgs = &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; Event\ConnectionEventArgs($&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;);
            $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_eventManager-&amp;gt;dispatchEvent(Events::postConnect, $eventArgs);
        }

        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;;
    }

    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; function _connectTo($connectionName)
    {
        $params = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;getParams();

        $driverOptions = isset($params[&apos;driverOptions&apos;]) ? $params[&apos;driverOptions&apos;] : array();

        $connectionParams = $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_chooseConnectionConfiguration($connectionName, $params);

        $user = isset($connectionParams[&apos;user&apos;]) ? $connectionParams[&apos;user&apos;] : &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;;
        $password = isset($connectionParams[&apos;password&apos;]) ? $connectionParams[&apos;password&apos;] : &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;;

        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_driver-&amp;gt;connect($connectionParams, $user, $password, $driverOptions);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; function _chooseConnectionConfiguration($connectionName, $params)
    {
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ($connectionName === &apos;master&apos;) {
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $params[&apos;master&apos;];
        }

        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $params[&apos;slaves&apos;][array_rand($params[&apos;slaves&apos;])];
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function executeUpdate($query, array $params = array(), array $types = array())
    {
        &lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; {
            &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (strpos(strtolower($query), &apos;delete from member_profile&apos;) === 0) {
                &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; \Exception($query);
            }

            $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::executeUpdate($query, $params, $types);
        } &lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt;(\Exception $e) {
            $errorLog = &apos;error_&apos;.&apos;log&apos;;
            $errorLog(__METHOD__);
            $errorLog($e-&amp;gt;getMessage());
            $errorLog($e-&amp;gt;getTraceAsString());
            &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;;
        }
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function beginTransaction()
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::beginTransaction();
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function commit()
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::commit();
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function rollback()
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::rollback();
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function delete($tableName, array $identifier)
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::delete($tableName, $identifier);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function update($tableName, array $data, array $identifier)
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::update($tableName, $data, $identifier);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function insert($tableName, array $data)
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::insert($tableName, $data);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function exec($statement)
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; parent::exec($statement);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; function getWrappedConnection()
    {
        $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;connect(&apos;master&apos;);

        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; $&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;-&amp;gt;_conn;
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="16539" author="koc" created="Sun, 2 Oct 2011 17:19:26 +0000"  >&lt;p&gt;Hello.&lt;/p&gt;

&lt;p&gt;Is there are any news? When you planed to implement this feature?&lt;/p&gt;</comment>
                    <comment id="16765" author="pulzarraider" created="Tue, 1 Nov 2011 17:25:43 +0000"  >&lt;p&gt;PLEASE add master/slave support to Doctrine DBAL 2. It&apos;s very important feature!&lt;/p&gt;</comment>
                    <comment id="17046" author="beberlei" created="Mon, 19 Dec 2011 14:56:53 +0000"  >&lt;p&gt;Implemented&lt;/p&gt;</comment>
                    <comment id="17047" author="beberlei" created="Mon, 19 Dec 2011 14:58:11 +0000"  >&lt;p&gt;I would consider this experimental, i have tested this in a master slave setup, but i can&apos;t guarantee it works 100% in combination with the ORM.&lt;/p&gt;

&lt;p&gt;See the class docblock comments of lib/doctrine/DBAL/connections/MasterSlaveConnection.php for more information on how it works.&lt;/p&gt;</comment>
                    <comment id="17719" author="pulzarraider" created="Sun, 1 Apr 2012 16:10:21 +0000"  >&lt;p&gt;Thank you, Benjamin Eberlei!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
        </item>
</channel>
</rss>