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