+++ /dev/null
-Neuer Mechanismus für SQL-Upgradedateien
-----------------------------------------
-
-Der alte Mechanismus für SQL-Upgradescripte, der auf einer
-Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
-diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
-Entwicklung im stable- und unstable-Baum betrifft.
-
-Dieser Mechanismus wurde für Lx-Office 2.4.1 deutlich erweitert. Es
-werden weiterhin alle Scripte aus sql/Pg-upgrade
-ausgeführt. Zusätzlich gibt es aber ein zweites Verzeichnis,
-sql/Pg-upgrade2. In diesem Verzeichnis muss pro Datenbankupgrade eine
-Datei existieren, die neben den eigentlich auszuführenden SQL- oder
-Perl-Befehlen einige Kontrollinformationen enthält.
-
-Neu sind die Kontrollinformationen, die Abhängigkeiten und Prioritäten
-definieren können werden, sodass Datenbankscripte zwar in einer
-sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER TABLE"
-erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE" angelegt
-wurde), diese Reihenfolge aber so flexibel ist, dass man keine
-Versionsnummern mehr braucht.
-
-Lx-Office merkt sich dabei, welches der Upgradescripte in
-sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
-erneut aus. Dazu dient die Tabelle "schema_info", die bei der
-Anmeldung automatisch angelegt wird.
-
-Format der Kontrollinformationen
---------------------------------
-
-Die Kontrollinformationen sollten sich am Anfang der jeweiligen
-Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
-hat dabei das folgende Format:
-
-Für SQL-Upgradedateien:
-
--- @key: value
-
-
-Für Perl-Upgradedateien:
-
-# @key: value
-
-
-Leerzeichen vor "value" werden entfernt.
-
-Die folgenden Schlüsselworte werden verarbeitet:
-
-* tag: Wird zwingend benötigt. Dies ist der "Name" des
- Upgrades. Dieser "tag" kann von anderen Kontrolldateien in ihren
- Abhängigkeiten verwendet werden (Schlüsselwort "depends"). Der "tag"
- ist auch der Name, der in der Datenbank eingetragen wird.
-
- Normalerweise sollte die Kontrolldatei genau so heißen wie der
- "tag", nur mit der Endung ".sql" bzw. "pl".
-
- Ein Tag darf nur aus alphanumerischen Zeichen sowie den Zeichen _ -
- ( ) bestehen. Insbesondere sind Leerzeichen nicht erlaubt und
- sollten stattdessen mit Unterstrichen ersetzt werden.
-
-* description: Benötigt. Eine Beschreibung, was in diesem Update
- passiert. Diese wird dem Benutzer beim eigentlichen Datenbankupdate
- angezeigt. Während der Tag in englisch gehalten sein sollte, sollte
- die Beschreibung auf Deutsch erfolgen.
-
-* depends: Optional. Eine mit Leerzeichen getrennte Liste von "tags",
- von denen dieses Upgradescript abhängt. Lx-Office stellt sicher,
- dass die in dieser Liste aufgeführten Scripte bereits durchgeführt
- wurden, bevor dieses Script ausgeführt wird.
-
- Abhängigkeiten werden rekursiv betrachtet. Wenn also ein Script "b"
- existiert, das von Änderungen in "a" abhängt, und eine neue
- Kontrolldatei für "c" erstellt wird, die von Änderungen in "a" und
- "b" abhängt, so genügt es, in "c" nur den Tag "b" als Abhängigkeit
- zu definieren.
-
- Es ist nicht erlaubt, sich selbst referenzierende Abhängigkeiten zu
- definieren (z.B. "a" -> "b", "b" -> "c" und "c" -> "a").
-
-* priority: Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
- der Scripte ausgeführt werden, die die gleichen Abhängigkeitstiefen
- besitzen. Fehlt dieser Parameter, so wird der Wert 1000 benutzt.
-
- Dies ist reine Kosmetik. Für echte Reihenfolgen muss "depends"
- benutzt werden. Lx-Office sortiert die auszuführenden Scripte zuerst
- nach der Abhängigkeitstiefe (wenn "z" von "y" abhängt und "y" von
- "x", so hat "z" eine Abhängigkeitstiefe von 2, "y" von 1 und "x" von
- 0. "x" würde hier zuerst ausgeführt, dann "y", dann "z"), dann nach
- der Priorität und bei gleicher Priorität alphabetisch nach dem
- "tag".
-
-Hilfsscript dbupgrade2_tool.pl
-------------------------------
-
-Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern, existiert
-ein Hilfsscript namens "scripts/dbupgrade2_tool.pl". Es muss aus dem
-Lx-Office-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
-liest alle Datenbankupgradescripte aus dem Verzeichnis sql/Pg-upgrade2
-aus. Es benutzt dafür die gleichen Methoden wie Lx-Office selber,
-sodass alle Fehlersituationen von der Kommandozeile überprüft werden
-können.
-
-Wird dem Script kein weiterer Parameter übergeben, so wird nur eine
-Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann sich
-aber auch Informationen auf verschiedene Art ausgeben lassen:
-
-1. Listenform: "./scripts/dbupgrade2_tool.pl --list"
-
- Gibt eine Liste aller Scripte aus. Die Liste ist in der Reihenfolge
- sortiert, in der Lx-Office die Scripte ausführen würde. Es werden
- neben der Listenposition der Tag, die Abhängigkeitstiefe und die
- Priorität ausgegeben.
-
-2. Baumform: "./scripts/dbupgrade2_tool.pl --tree"
-
- Listet alle Tags in Baumform basierend auf den Abhängigkeiten
- auf. Die "Wurzelknoten" sind dabei die Scripte, von denen keine
- anderen abhängen. Die Unterknoten sind Scripte, die beim
- übergeordneten Script als Abhängigkeit eingetragen sind.
-
-3. Umgekehrte Baumform: "./scripts/dbupgrade2_tool.pl --rtree"
-
- Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf.
- Die "Wurzelknoten" sind dabei die Scripte mit der geringsten
- Abhängigkeitstiefe. Die Unterknoten sind Scripte, die das
- übergeordnete Script als Abhängigkeit eingetragen haben.
-
-4. Baumform mit Postscriptausgabe: "./scripts/dbupgrade2_tool.pl --graphviz"
-
- Benötigt das Tool "graphviz", um mit seiner Hilfe die Baumform aus
- 3. in eine Postscriptdatei namens "db_dependencies.ps"
- auszugeben. Dies ist vermutlich die übersichtlichste Form, weil
- hierbei jeder Knoten nur einmal ausgegeben wird. Bei den
- Textmodusbaumformen hingegen können Knoten und all ihre
- Abhängigkeiten mehrfach ausgegeben werden.
-
-5. Scripte, von denen kein anderes Script abhängt:
- "./scripts/dbupgrade2_tool.pl --nodeps"
-
- Listet die Tags aller Scripte auf, von denen keine anderen Scripte
- abhängen.
-