Inzwischen gibt es ein Script, das das komplette Datenbankupdate mit Ausnahme der Tabellenänderungen übernimmt. Damit ist der Gesamtablauf wie folgt:
1. htdocs/doc/sql/db-changes.txt prüfen
2. Änderungen von Hand per phpMyAdmin einpflegen (Trigger ausgenommen)
3. php bin/dbupdate.php
Der letzte Schritt ist dann, den Rest auch noch zu automatisieren, so wie von Robert angedacht. Damit das mit dem Git-Workflow harmoniert wird es neben den .sql-Patches für neue Änderungen bei Bedarf auf welche geben, die nach dem Ausbau eines instabilen Code-Patches die Datenbankänderung wieder rückgängig machen.
Ich denke dass die .sql-Patchdateien halbautomatisch erzeugbar sind: problematisch sind der äußerst seltene Fall einer Feld-Umbenennung, und Änderungen an Feldern, bei denen zusätzlich Daten zu verarbeiten sind, die sich nicht in data.sql befinden - z.B. ein neues Feld mit bestimmten Werten aus anderen Feldern initialisieren. D.h. der Ablauf könnte sein:
- Die Entwickler checken Änderungen der Datenbankstrukturen per doc/sql/tables ein.
- Zusätzliche SQL-Kommandos, um Daten weiter zu verarbeiten, sind im Commit-Kommentar zu dokumentieren.
- Der Entwicklungsleiter merged (in seinem lokalen Klon) den Commit in den master und lässt anschließend ein Script laufen, das eine .sql-Datei mit dem Datenbankpatch erzeugt.
- Wenn spezielle Kommandos nötig sind, arbeitet er sie von Hand in die .sql-Datei ein.
- Test
- Die .sql-Datei wird zusammen mit der Änderung am master hochgeladen.
- Das bin/dbupdate-Script erkennt, wenn es neue .sql-Dateien gibt, und spielt sie vor dem übrigen Datenbankupdate ein.
Wer mag diese Aufgabe übernehmen und das Script für Punkt 3 schreiben? Es muss ein "git diff htdocs/sql/tables/*" in Bezug auf den Commit-Stand der letzten .sql-Datei machen (die Commit-ID kann z.B. in einem Kommentar in der .sql-Datei hinterlegt sein), daraus entsprechende CREATE/ALTER/DROP-TABLE/INDEX-Statements erzeugen und das Ganze zusammen mit der aktuellen commit-ID in eine neue .sql-Datei schreiben.