/** * Initializes a new instance of the Connection class. * * @param array $params The connection parameters. * @param \Doctrine\DBAL\Driver $driver The driver to use. * @param \Doctrine\DBAL\Configuration|null $config The configuration, optional. * @param \Doctrine\Common\EventManager|null $eventManager The event manager, optional. * * @throws \Doctrine\DBAL\DBALException */ public function __construct(array $params, Driver $driver, Configuration $config = null, EventManager $eventManager = null) { $this->_driver = $driver; $this->_params = $params; if (isset($params['pdo'])) { $this->_conn = $params['pdo']; $this->_isConnected = true; } // Create default config and event manager if none given if (!$config) { $config = new Configuration(); } if (!$eventManager) { $eventManager = new EventManager(); } $this->_config = $config; $this->_eventManager = $eventManager; $this->_expr = new Query\Expression\ExpressionBuilder($this); if (!isset($params['platform'])) { $this->_platform = $driver->getDatabasePlatform(); } else { if ($params['platform'] instanceof Platforms\AbstractPlatform) { $this->_platform = $params['platform']; } else { throw DBALException::invalidPlatformSpecified(); } } $this->_platform->setEventManager($eventManager); $this->_transactionIsolationLevel = $this->_platform->getDefaultTransactionIsolationLevel(); }
/** * Detects and sets the database platform. * * Evaluates custom platform class and version in order to set the correct platform. * * @throws DBALException if an invalid platform was specified for this connection. */ private function detectDatabasePlatform() { if (!isset($this->_params['platform'])) { $version = $this->getDatabasePlatformVersion(); if (null !== $version) { $this->platform = $this->_driver->createDatabasePlatformForVersion($version); } else { $this->platform = $this->_driver->getDatabasePlatform(); } } elseif ($this->_params['platform'] instanceof Platforms\AbstractPlatform) { $this->platform = $this->_params['platform']; } else { throw DBALException::invalidPlatformSpecified(); } $this->platform->setEventManager($this->_eventManager); }