Fassung 1.4.2: die Systempruefung nennt die SQLite-Fassung
CMS quality / php (8.2) (push) Canceled after 0s
CMS quality / php (8.4) (push) Canceled after 0s
CMS quality / browser (push) Canceled after 0s
CMS quality / mysql (push) Canceled after 0s

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:
kantarciandClaude Opus 5 committed 2026-09-13 21:56:17 +02:00
1 parent c517173579
commit ea3dd4ddf2
7 files changed
+73 -3

No files matched your search

+27
View File
@@ -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)) {