Projekt

Allgemein

Profil

Herunterladen (5,88 KB) Statistiken
| Zweig: | Markierung: | Revision:
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.

(11-11/12)