Exemple #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $this->createVersionTable();
     $migrations = $this->getMigrations();
     if (!$migrations) {
         $output->writeln('No migration files found.');
         return;
     }
     $currentVersion = $this->getCurrentVersion();
     $output->writeln("<info>Current version is: {$currentVersion}</info>");
     $specifiedVersion = $input->getArgument('version');
     if ($specifiedVersion) {
         $output->writeln("<info>Downgrading to: {$specifiedVersion}</info>");
         $downgradeVersion = $specifiedVersion;
     } else {
         $downgradeVersion = $currentVersion - 1;
         $output->writeln("<info>Downgrading to: previous ({$downgradeVersion})</info>");
     }
     if ($downgradeVersion == $currentVersion) {
         $output->writeln("<info>Nothing to do.</info>");
     } else {
         $pdo = $this->getConnection();
         for ($c = $currentVersion; $c > $downgradeVersion; $c--) {
             $data = $migrations[$c];
             $sql = new SqlString($data['down']);
             $queries = $sql->getQueries();
             if ($queries) {
                 $pdo->query("SET FOREIGN_KEY_CHECKS=0");
             } else {
                 continue;
             }
             foreach ($queries as $query) {
                 try {
                     $stmt = $pdo->query($query);
                     $stmt->closeCursor();
                     unset($stmt);
                 } catch (\PDOException $e) {
                     if (!$input->getOption('continue')) {
                         throw $e;
                     }
                 }
             }
             $sql = "DELETE FROM yak_version\n                            WHERE version='{$c}'";
             $stmt = $pdo->query($sql);
             if ($stmt) {
                 $stmt->closeCursor();
             }
             $pdo->query("SET FOREIGN_KEY_CHECKS=1");
         }
     }
 }
Exemple #2
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $this->createVersionTable();
     $migrations = $this->getMigrations();
     if (!$migrations) {
         $output->writeln('No migration files found.');
         return;
     }
     $currentVersion = $this->getCurrentVersion();
     $output->writeln("<info>Current version is: {$currentVersion}</info>");
     $versionNumbers = array_keys($migrations);
     $specifiedVersion = $input->getArgument('version');
     if ($specifiedVersion) {
         $output->writeln("<info>Upgrading to: {$specifiedVersion}</info>");
         $upgradeVersion = $specifiedVersion;
     } else {
         $maxVersion = max($versionNumbers);
         $output->writeln("<info>Upgrading to: latest ({$maxVersion})</info>");
         $upgradeVersion = $maxVersion;
     }
     if ($upgradeVersion == $currentVersion) {
         $output->writeln("<info>Nothing to do.</info>");
     } else {
         $pdo = $this->getConnection();
         for ($c = $currentVersion + 1; $c <= $upgradeVersion; $c++) {
             $data = $migrations[$c];
             $checksum = $data['checksum'];
             $description = $data['description'];
             $output->writeln("<info>Applying {$c}: {$description}...</info>");
             $sql = new SqlString($data['up']);
             $queries = $sql->getQueries();
             foreach ($queries as $query) {
                 try {
                     $stmt = $pdo->query($query);
                     $stmt->closeCursor();
                     unset($stmt);
                 } catch (\PDOException $e) {
                     if (!$input->getOption('continue')) {
                         throw $e;
                     }
                 }
             }
             $date = date("YmdHis");
             $sql = "INSERT INTO yak_version\n                        VALUES ('{$c}', '{$description}', '{$checksum}', '{$date}')";
             $stmt = $pdo->query($sql);
             if ($stmt) {
                 $stmt->closeCursor();
             }
         }
     }
 }