Projekt

Allgemein

Profil

Herunterladen (5,96 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.

(15-15/16)