. */ #namespace Doctrine::DBAL; /** * Factory for creating dbms-specific Connection instances. * * @author Roman Borschel * @since 2.0 */ class Doctrine_ConnectionFactory { /** * List of supported drivers and their mappings to the driver class. * * @var array */ private $_drivers = array( 'mysql' => 'Doctrine_Connection_Mysql', 'sqlite' => 'Doctrine_Connection_Sqlite', 'pgsql' => 'Doctrine_Connection_Pgsql', 'oci' => 'Doctrine_Connection_Oracle', 'oci8' => 'Doctrine_Connection_Oracle', 'oracle' => 'Doctrine_Connection_Oracle', 'mssql' => 'Doctrine_Connection_Mssql', 'dblib' => 'Doctrine_Connection_Mssql', 'firebird' => 'Doctrine_Connection_Firebird', 'informix' => 'Doctrine_Connection_Informix', 'mock' => 'Doctrine_Connection_Mock'); /** * The EventManager that is injected into all created Connections. * * @var EventManager */ private $_eventManager; /** * The Configuration that is injected into all created Connections. * * @var Configuration */ private $_config; public function __construct() { } /** * Sets the Configuration that is injected into all Connections. * * @param Doctrine_Configuration $config */ public function setConfiguration(Doctrine_Configuration $config) { $this->_config = $config; } /** * Sets the EventManager that is injected into all Connections. * * @param Doctrine_EventManager $eventManager */ public function setEventManager(Doctrine_EventManager $eventManager) { $this->_eventManager = $eventManager; } /** * Creates a connection object with the specified parameters. * * @param array $params * @return Connection */ public function createConnection(array $params) { // create default config and event manager, if not set if ( ! $this->_config) { $this->_config = new Doctrine_Configuration(); } if ( ! $this->_eventManager) { $this->_eventManager = new Doctrine_EventManager(); } // check for existing pdo object if (isset($params['pdo']) && ! $params['pdo'] instanceof PDO) { throw Doctrine_ConnectionFactory_Exception::invalidPDOInstance(); } else if (isset($params['pdo'])) { $params['driver'] = $params['pdo']->getAttribute(PDO::ATTR_DRIVER_NAME); } else { $this->_checkParams($params); } $className = $this->_drivers[$params['driver']]; return new $className($params, $this->_config, $this->_eventManager); } /** * Checks the list of parameters. * * @param array $params */ private function _checkParams(array $params) { // check existance of mandatory parameters // driver if ( ! isset($params['driver'])) { throw Doctrine_ConnectionFactory_Exception::driverRequired(); } // check validity of parameters // driver if ( ! isset($this->_drivers[$params['driver']])) { throw Doctrine_ConnectionFactory_Exception::unknownDriver($driverName); } } } ?>