/**
  * @param Schema           $schema
  * @param AbstractPlatform $platform
  * @param Migration        $migration
  * @param bool             $dryRun
  *
  * @return bool
  */
 public function executeUpMigration(Schema &$schema, AbstractPlatform $platform, Migration $migration, $dryRun = false)
 {
     $result = true;
     $this->logger->notice(sprintf('> %s', get_class($migration)));
     $toSchema = clone $schema;
     $this->setExtensions($migration);
     try {
         $queryBag = new QueryBag();
         $migration->up($toSchema, $queryBag);
         $comparator = new Comparator();
         $schemaDiff = $comparator->compare($schema, $toSchema);
         $this->checkTables($schemaDiff, $migration);
         $this->checkIndexes($schemaDiff, $migration);
         $queries = array_merge($queryBag->getPreQueries(), $schemaDiff->toSql($platform), $queryBag->getPostQueries());
         $schema = $toSchema;
         foreach ($queries as $query) {
             $this->queryExecutor->execute($query, $dryRun);
         }
     } catch (\Exception $ex) {
         $result = false;
         $this->logger->error(sprintf('  ERROR: %s', $ex->getMessage()));
     }
     return $result;
 }