Joomla Extension Entwicklung: SQL Update Files nutzen

Wer schonmal eine Joomla Komponente entwickelt hat kennt das Problem: Früher oder später ändert sich etwas an der Datenbankstruktur. Bei einem Update der Komponente muss also die Tabellenstruktur geändert werden, neue Tabellen angelegt werden o.Ä.

Für diesen Fall bietet Joomla die Möglichkeit "Update SQL files" zu verwenden. Allerdings gibt es hierbei einen Stolperstein auf den ich hier kurz hinweisen möchte da mich schon einige Minuten Debug-Zeit gekostet hat. Vorher jedoch kurz das generelle Vorgehen um die "Update sql files" zu nutzen:

Im XML Manifest der Komponente wird zunächst folgender Code eingefügt:

<update> 
        <schemas> 
                <schemapath type="mysql">sql/updates</schemapath> 
        </schemas> 
</update>

Der Pfad "sql/updates" muss sich innerhalb des "administrator" Ordners im Archiv der Komponente befinden und während der Installation mit auf den Server kopiert werden. Ein entsprechder Eintrag im "files" Bereich des Manifests ist also notwendig. In dem oben angegeben Pfad muss sich nun für jede Version der Komponente ein entsprechndes SQL-File befinden. Also z.B. "1.0.sql", "1.1.sql" u.s.w. Bei einem Update der Komponente werden dann die entrsprechenden SQL Dateien ausgeführt. Und genau an dieser Stelle kann man sehr schnell ein Problem bekommen, denn es muss von Anfang an für jede Version der Komponente eine entsprechende SQL-Datei vorliegen. Diese kann auch leer sein. In der Dokumentation heisst es dazu:

For example, if you have version 1.0 and are updating to version 1.1, the 1.1.sql file will not be executed if there was no 1.0.sql file in the 1.0 release. For this reason, it is good practice to have a SQL update file for each version, even if there is no SQL change in that version.

Das ist allerdings nur ein Teil des Problems. Denn wenn man versucht einfach nachträglich die entsprechenden SQL-Datein anzulegen und in den oben angegebenen Pfad zu kopieren, werden diese dennoch nicht ausgeführt. Es gibt leider auch keine Fehlermeldung während der Installation. Die Ursache ist folgende: Wenn bei der Installation der Komponente eine "schemapath" für die SQL update files im Manifest definiert ist (siehe Beispiel oben) und die entsprechende SQL Datei vorhanden ist, wird nicht nur die SQL Datei ausgeführt sondern es wird auch ein Eintrag mit der entsprechenden Version in der #schemas Tabelle von Joomla angelegt. Wenn dann später beim Update der Komponente ein entsprechender Eintrag in der #schemas Tabelle fehlt werden SQL-Update files nicht ausgeführt.

Wenn also bei einem Komponenten-Update die SQL update files nicht ausgeführt werden lohnt es sich einen Blick in die #__schemas Tabelle zu werfen. Fehlt dort ein Eintrag für die Komponente (z.B. weil man erst nach mehreren Updates feststellt, dass man die Datenbankstruktur anpassen muss) hilft nur die Verwendung eines Script-Files während der Installation bzw. des Updates.