public function testGetAlterTableSqlDispatchEvent()
 {
     $events = array('onSchemaAlterTable', 'onSchemaAlterTableAddColumn', 'onSchemaAlterTableRemoveColumn', 'onSchemaAlterTableChangeColumn', 'onSchemaAlterTableRenameColumn');
     $listenerMock = $this->getMock('GetAlterTableSqlDispatchEvenListener', $events);
     $listenerMock->expects($this->once())->method('onSchemaAlterTable');
     $listenerMock->expects($this->once())->method('onSchemaAlterTableAddColumn');
     $listenerMock->expects($this->once())->method('onSchemaAlterTableRemoveColumn');
     $listenerMock->expects($this->once())->method('onSchemaAlterTableChangeColumn');
     $listenerMock->expects($this->once())->method('onSchemaAlterTableRenameColumn');
     $eventManager = new EventManager();
     $events = array(Events::onSchemaAlterTable, Events::onSchemaAlterTableAddColumn, Events::onSchemaAlterTableRemoveColumn, Events::onSchemaAlterTableChangeColumn, Events::onSchemaAlterTableRenameColumn);
     $eventManager->addEventListener($events, $listenerMock);
     $this->_platform->setEventManager($eventManager);
     $table = new Table('mytable');
     $table->addColumn('removed', 'integer');
     $table->addColumn('changed', 'integer');
     $table->addColumn('renamed', 'integer');
     $tableDiff = new TableDiff('mytable');
     $tableDiff->fromTable = $table;
     $tableDiff->addedColumns['added'] = new \Doctrine\DBAL\Schema\Column('added', \Doctrine\DBAL\Types\Type::getType('integer'), array());
     $tableDiff->removedColumns['removed'] = new \Doctrine\DBAL\Schema\Column('removed', \Doctrine\DBAL\Types\Type::getType('integer'), array());
     $tableDiff->changedColumns['changed'] = new \Doctrine\DBAL\Schema\ColumnDiff('changed', new \Doctrine\DBAL\Schema\Column('changed2', \Doctrine\DBAL\Types\Type::getType('string'), array()), array());
     $tableDiff->renamedColumns['renamed'] = new \Doctrine\DBAL\Schema\Column('renamed2', \Doctrine\DBAL\Types\Type::getType('integer'), array());
     $this->_platform->getAlterTableSQL($tableDiff);
 }
 /**
  * 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);
 }