Example #1
0
 public function run($options = array())
 {
     Yentu::greet();
     $db = DatabaseManipulator::create();
     DatabaseItem::setDriver($db);
     ChangeReverser::setDriver($db);
     $previousMigration = '';
     if (isset($options['default-schema'])) {
         $this->schemaCondition = "default_schema = ?";
         $this->schemaConditionData[] = $options['default-schema'];
     }
     if (empty($options)) {
         $session = $db->getLastSession();
         $operations = $db->query("SELECT id, method, arguments, migration, default_schema FROM yentu_history WHERE {$this->schemaCondition} session = ? ORDER BY id DESC", $this->schemaConditionData + [$session]);
     } else {
         $operations = [];
         foreach ($options['stand_alones'] as $set) {
             $operations += $this->getOperations($db, $set);
         }
     }
     foreach ($operations as $operation) {
         if ($previousMigration !== $operation['migration']) {
             ClearIce::output("Rolling back '{$operation['migration']}' migration" . ($operation['default_schema'] != '' ? " on `{$operation['default_schema']}` schema." : ".") . "\n");
             $previousMigration = $operation['migration'];
         }
         ChangeReverser::call($operation['method'], json_decode($operation['arguments'], true));
         $db->query('DELETE FROM yentu_history WHERE id = ?', array($operation['id']));
     }
 }
Example #2
0
 private function countOperations($migrationFile)
 {
     if ($this->dryDriver === null) {
         $this->dryDriver = clone $this->driver;
         $this->dryDriver->setDryRun(true);
     }
     ClearIce::pushOutputLevel(ClearIce::OUTPUT_LEVEL_0);
     DatabaseItem::setDriver($this->dryDriver);
     require "{$migrationFile}";
     DatabaseItem::purge();
     DatabaseItem::setDriver($this->driver);
     ClearIce::popOutputLevel();
     $this->driver->setExpectedOperations($this->dryDriver->resetOperations());
 }