+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 entfern.
+
+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.
+