Project

General

Profile

Support #3679

Automatic DB Update

Added by Carsten Rose over 3 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Target version:
-
Start date:
05.05.2017
Due date:
% Done:

0%

Estimated time:
Discuss:

Description

After first installing a QFQ extension or after updating a QFQ extension, it's (often) necessary to update the DB schema.

On every start of QFQ, ask for table version and start update if necessary.

  • Single '.sql' file for every table version update.

First installation of QFQ extension.

  • Missing DB
  • Play formEditor.sql.

Update QFQ installation.

  • Retrieve table version.
  • Update table if necessary.
  • Play formEditor.sql.

Associated revisions

Revision 05b32a30 (diff)
Added by Carsten Rose over 3 years ago

#3679, Automatic DB update - Schema & FormEditor
For updates of QFQ prior to 0.17.0, do: ALTER TABLE `Form` COMMENT = 'Version=<your old QFQ version>'
DatabaseUpdate.php, DatabaseUpdateData.php: new class.
QuickFormQuery.php: Add DB UpdateCheck
Database.php: moved to new subdirectory `database`. Add 'ALTER' as a new SQL command.
FormAction.php, TypeAhead.php, Report.php, Sendmail.php, FillStoreForm.php, Store.php, AbstractBuild.php, Delete.php, Evaluate.php: Update path to Database.php.

Revision 202534dc (diff)
Added by Carsten Rose over 3 years ago

#3679, Automatic DB update - Schema & FormEditor
Also respect version numbers which are not configured in DatabaseUpdateData.php and between two configured version numbers.

History

#1 Updated by Carsten Rose over 3 years ago

  • Description updated (diff)

#2 Updated by Carsten Rose over 3 years ago

Recherchiert welche Tools es gibt, um automatisiert MySQL Schema Update Scripts erstellen zu lassen: kein Open Source gefunden.

Aber das ist vermutlich auch gar nicht so wichtig:
  • Das Tool muesste manuell aufgerufen werden - theoretisch koennte es bei 'git commit' oder 'git tag' getriggert werden, aber ich denke es kommt nicht haeufig genug vor als das sich der Aufwand fuer die Implentierung lohnt. Evtl. kann mit dem folgenden Ansatz auch erstmal Praxiserfahrung gesammelt werden um dann genauer zu sagen was noetig ist.
  • Es gibt Schema Updates aber nicht so viele.
  • Manchmal sind die Updates mit weiterer Logik verbunden (Bsp: der Default einer neuen Spalte soll in Zukunft anders sein als die aktuellen Werte enthalten - 2 SQL Statements sind noetig)
  • Beim programmieren koennte die SQL Anweisung direkt im Update Skript eingebaut werden.

Notes

Konzeptidee

  • Es gibt eine PHP Datei mit einem statisch konifugriertem Array fuer alle Updates. $update[<tablename>][<version>]
  • In jeder Tabelle steht im 'Comment' die aktuelle Version (numerischer Wert, fortlaufend).
  • Check beim Start von QFQ ob ein Update noetig ist:
    • In `config.qfq.ini` steht eine Versionsnummer. Ist die unterschiedlich zu `ext_emconf.php`, wird der Update Process getriggert.
    • Das Update-array wird gelesen.
    • Von jeder MySQL Tabelle wird die Versionsnummer gelesen.
    • Pro Tabelle wird jeder Update durchgefuehrt. Anschliessend wird die neue Versionsnummer im Tabellen 'comment'-Feld eingetragen.
  • Wenn alles gut durchgelaufen ist wird die neue Versionsnummer in config.qfq.ini eingetragen.
  • Achtung: nur ein PHP Prozess darf den Update aufeinmal ausfuehren. Entsprechendes Locking einbauen.

#3 Updated by Carsten Rose over 3 years ago

  • Status changed from New to Closed

#4 Updated by Carsten Rose over 3 years ago

Final implementation:

  • Read the extension version number.
  • Read the QFQ database version number: stored in the comment field of table 'Form'. Format: Version=x.y.z
  • If versions different:
    • Read the update array 'DatabaseUpdateData.php'.
    • Play all changes after 'old' upto 'new'.
    • Save new QFQ database version in the comment field of table 'Form'
  • In a new QFQ installation, the comment field of table 'Form' is empty. On the first call of QFQ, the version string
    will be set. Also the 'formEditor.sql' will be played initially.

Also available in: Atom PDF