tao-test/app/vendor/doctrine/migrations/lib/Doctrine/Migrations/FileQueryWriter.php

68 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Doctrine\Migrations;
use DateTimeImmutable;
use DateTimeInterface;
use Doctrine\Migrations\Generator\FileBuilder;
use Doctrine\Migrations\Query\Query;
use Psr\Log\LoggerInterface;
use function file_put_contents;
use function is_dir;
use function realpath;
/**
* The FileQueryWriter class is responsible for writing migration SQL queries to a file on disk.
*
* @internal
*/
final class FileQueryWriter implements QueryWriter
{
/** @var FileBuilder */
private $migrationFileBuilder;
/** @var LoggerInterface */
private $logger;
public function __construct(
FileBuilder $migrationFileBuilder,
LoggerInterface $logger
) {
$this->migrationFileBuilder = $migrationFileBuilder;
$this->logger = $logger;
}
/**
* @param array<string,Query[]> $queriesByVersion
*/
public function write(
string $path,
string $direction,
array $queriesByVersion,
?DateTimeInterface $now = null
) : bool {
$now = $now ?? new DateTimeImmutable();
$string = $this->migrationFileBuilder
->buildMigrationFile($queriesByVersion, $direction, $now);
$path = $this->buildMigrationFilePath($path, $now);
$this->logger->info('Writing migration file to "{path}"', ['path' => $path]);
return file_put_contents($path, $string) !== false;
}
private function buildMigrationFilePath(string $path, DateTimeInterface $now) : string
{
if (is_dir($path)) {
$path = realpath($path);
$path .= '/doctrine_migration_' . $now->format('YmdHis') . '.sql';
}
return $path;
}
}