Fassung 1.4.2: die Systempruefung nennt die SQLite-Fassung
Auf dem Hosting brach die Installation im dritten Schritt ab: near
"(": syntax error. Dort laeuft SQLite in einer Fassung vor 3.16, und
Doctrine liest das Schema mit Tabellenfunktionen wie
pragma_table_info(...), die es erst seit 3.16 gibt.
Die Pruefung nennt die gefundene Fassung jetzt vor der Wahl der
Datenbank, und der Datenbankschritt bietet SQLite gar nicht erst an,
wenn sie zu alt ist - mit dem Hinweis auf MySQL. Eine Voraussetzung,
die erst mitten in der Installation auffaellt, ist keine Pruefung wert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c517173579
commit
ea3dd4ddf2
7 files changed
+73
-3
No files matched your search
@@ -235,6 +235,33 @@ final class InstallationTest extends TestCase
|
||||
self::fail('Prüfung fehlt: '.$label);
|
||||
}
|
||||
|
||||
public function testTheSystemCheckNamesTheSqliteVersionBeforeItMatters(): void
|
||||
{
|
||||
// Auf einem echten Hosting gefunden: SQLite war zu alt für die Tabellenfunktionen, mit
|
||||
// denen Doctrine das Schema liest. Die Installation brach erst im dritten Schritt ab, mit
|
||||
// „near "(": syntax error" - eine Meldung, die niemandem sagt, was zu tun ist. Die Fassung
|
||||
// gehört deshalb in die Systemprüfung, vor die Wahl der Datenbank.
|
||||
$version = $this->installation->sqliteVersion();
|
||||
self::assertNotNull($version, 'Auf diesem Rechner gibt es pdo_sqlite - dann muss auch die Fassung lesbar sein.');
|
||||
self::assertMatchesRegularExpression('/^\d+\.\d+/', $version);
|
||||
|
||||
$namen = array_column($this->installation->checks(), 'label');
|
||||
self::assertContains('SQLite-Fassung', $namen);
|
||||
|
||||
$eintrag = null;
|
||||
foreach ($this->installation->checks() as $check) {
|
||||
if ('SQLite-Fassung' === $check['label']) {
|
||||
$eintrag = $check;
|
||||
}
|
||||
}
|
||||
self::assertNotNull($eintrag);
|
||||
self::assertSame($version, $eintrag['found']);
|
||||
// Sie ist eine Empfehlung, kein Hindernis: mit MySQL läuft die Installation auch auf einem
|
||||
// Server mit altem SQLite.
|
||||
self::assertFalse($eintrag['required']);
|
||||
self::assertSame(version_compare($version, Installation::MIN_SQLITE, '>='), $eintrag['ok']);
|
||||
}
|
||||
|
||||
private function removeDirectory(string $path): void
|
||||
{
|
||||
if (!is_dir($path)) {
|
||||
|
||||
Reference in new issue
Block a user