/** * Vytvoří DB a naplní testovacími daty. */ public function runMigrations() { if (!$this->context->parameters['migrations']['enabled']) { return; } $connection = $this->context->getService('dibiConnection'); $dbNamePrefix = $this->context->parameters['testDbPrefix'] . date('Ymd_His') . '_'; $i = 1; do { $dbName = $dbNamePrefix . $i; $i++; } while ($connection->query('SHOW DATABASES WHERE %n', 'Database', ' = %s', $dbName)->count()); $connection->query('CREATE DATABASE %n COLLATE=utf8_czech_ci', $dbName); $connection->query('USE %n', $dbName); $migrationsPath = $this->context->parameters['wwwDir'] . '/' . $this->context->parameters['migrations']['path']; $finder = new Migration\Finders\MultipleDirectories(); $finder->addDirectory($migrationsPath . '/struct'); $finder->addDirectory($migrationsPath . '/data'); $migrations = $this->createRunner($connection); ob_start(); $migrations->run($finder, FALSE, TRUE); $result = ob_get_clean(); if (substr(strip_tags($result), -2) !== 'OK') { throw new \Exception('Migrace neproběhly v pořádku: ' . $result); } $this->context->parameters['testDbName'] = $dbName; }
/** * @param array of extensionName * @return array path => Migration\File */ public function find(array $extensions) { $files = array(); foreach ($this->directories as $directory) { $files += $directory->find($extensions); } uasort($files, function ($a, $b) { if ($a->file === $b->file) { list($a, $b) = MultipleDirectories::pathDiff($a->path, $b->path); throw new Migration\Exception("Finders\\MultipleDirectories: migration file name is same in '{$b}' and '{$a}'."); } return strcmp($a->file, $b->file); }); return $files; }