feat(dump): parse dump filenames and detect MySQL variant

This commit is contained in:
2026-09-14 22:00:26 +02:00
parent b4e84d0570
commit 957588d0b1
2 changed files with 54 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Service;
/**
* Dumps are named dump_YYYY-MM-DD_HH-mm-ss.sql.gz — lexicographically sortable,
* and the filename is the single source of truth for a dump's datetime (not
* filesystem mtime, which can drift across copies/touches).
*/
class DumpFilenameParser
{
private const PATTERN = '/^dump_(\d{4}-\d{2}-\d{2})_(\d{2}-\d{2}-\d{2})\.sql\.gz$/';
public function format(\DateTimeImmutable $dateTime): string
{
return 'dump_' . $dateTime->format('Y-m-d_H-i-s') . '.sql.gz';
}
public function parse(string $filename): ?\DateTimeImmutable
{
if (preg_match(self::PATTERN, $filename, $matches) !== 1) {
return null;
}
$dateTime = \DateTimeImmutable::createFromFormat(
'Y-m-d_H-i-s',
$matches[1] . '_' . $matches[2]
);
return $dateTime ?: null;
}
public function isValid(string $filename): bool
{
return $this->parse($filename) !== null;
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Service;
/**
* Pure version-string check, split out of DumpBinaryLocator so it's
* unit-testable without a live Shopware kernel/DB connection. Mirrors
* Doctrine DBAL's own AbstractMySQLDriver::createDatabasePlatformForVersion()
* check — the stable, version-portable way to tell MariaDB from MySQL.
*/
class MySqlVariant
{
public static function isMariaDb(string $serverVersion): bool
{
return stripos($serverVersion, 'mariadb') !== false;
}
}