ING_DB
This commit is contained in:
parent
48edad2e85
commit
f24cd0c773
|
|
@ -0,0 +1,797 @@
|
||||||
|
AMX(DABA) DABA16 AMX(DABA)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
amx - Einbettung der Datenmanipulationssprache AMX in "C"
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
|
||||||
|
Einleitung
|
||||||
|
|
||||||
|
Die Sprache AMX stellt ein Interface zur Einbettung von Da-
|
||||||
|
tenbankzugriffen in "C"-Programme dar und ist leicht erlern-
|
||||||
|
bar.
|
||||||
|
|
||||||
|
Es werden eine Laufzeitbibliothek, i.allg. .../lib/libamx.a,
|
||||||
|
und DABA-MUTOS-Kommandos (i.allg. amx(mutos)) bereitge-
|
||||||
|
stellt. Durch ein solches Kommando (z.B. amx) werden bei
|
||||||
|
entsprechend spezifizierten Optionen (Flags) ein DABA-
|
||||||
|
Praecompiler fuer AMX und der C-Compiler "cc" (einschliess-
|
||||||
|
lich Linker) aufgerufen. Der Praecompiler erzeugt ein guel-
|
||||||
|
tiges C-Programm, das mit dem C-Compiler uebersetzt wird.
|
||||||
|
Anschliessend werden die fuer die Datenbankaktionen notwen-
|
||||||
|
digen Objektmoduln aus der Laufzeitbibliothek eingebunden.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
In AMX-Programmen ist das parallele Arbeiten mehrerer Nutzer
|
||||||
|
in den gleichen Relationen unterstuetzt.
|
||||||
|
|
||||||
|
Die Vorteile bei der Benutzung dieser AMX-Sprache bestehen
|
||||||
|
in der Moeglichkeit der Realisierung laufzeiteffektiver Pro-
|
||||||
|
gramme, in der Formulierbarkeit von Transaktionen und in ei-
|
||||||
|
ner rekursiven Anwendbarkeit. Letzteres bedeutet, dass z.B.
|
||||||
|
Wiederfinden und Aendern geschachtelt benutzbar sind. Aus-
|
||||||
|
serdem sind prozedurale Probleme, z.B. die totale
|
||||||
|
Mengenbedarfsermittlung (totale Stuecklistenaufloesung),
|
||||||
|
elegant loesbar.
|
||||||
|
|
||||||
|
Alle (auch temporaere) Relationen (einschliesslich aller da-
|
||||||
|
tenbankspezifischen Namen), die in AMX-Programmen verarbei-
|
||||||
|
tet werden sollen, muessen zur Uebersetzungszeit bereits
|
||||||
|
existieren. Das bedeutet, dass sie vorher mit IQL, EQL oder
|
||||||
|
"creater" (creater(mutos)) erstellt werden muessen.
|
||||||
|
|
||||||
|
Mit AMX-Programmen manipulierte Relationen sind mit IQL, EQL
|
||||||
|
oder auch AMX weiterhin bearbeitbar.
|
||||||
|
|
||||||
|
Uebersicht
|
||||||
|
|
||||||
|
Alle tupelorientierten AMX-Anweisungen sind ausschliesslich
|
||||||
|
auf eine einzige Relation anwendbar.
|
||||||
|
|
||||||
|
Die Sprache AMX hat als maechtigste Operation das Bereit-
|
||||||
|
stellen von Werten spezifizierter Domaenen aus einer u.U.
|
||||||
|
selektierten Tupelmenge einer Relation (Wiederfinden) (re-
|
||||||
|
trieve).
|
||||||
|
|
||||||
|
Die Recherche (Wiederfinden) kann alle Daten der Relation
|
||||||
|
umfassen oder durch Selektionsbedingungen (Qualifiktionen)
|
||||||
|
eingeschraenkt werden.
|
||||||
|
|
||||||
|
In einer retrieve-Anweisung kann eine Qualifikation und muss
|
||||||
|
eine Auswahl spezifizierter oder aller Domaenen als
|
||||||
|
target_list (Ergebnis- oder Zielliste) angegeben werden.
|
||||||
|
Eine solche Ergebnisliste besitzen ausser der retrieve nur
|
||||||
|
die append und die replace Anweisung.
|
||||||
|
|
||||||
|
Nach einer erfolgreichen Recherche, die eine Tupelmenge
|
||||||
|
(mindestens ein Tupel) bereitstellt, wird fuer jedes dieser
|
||||||
|
Tupel eine Aktion ausgefuehrt.
|
||||||
|
|
||||||
|
Die anderen tupelorientierten AMX-Anweisungen beziehen sich
|
||||||
|
immer nur auf ein Tupel.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Es sind das Ersetzen der Werte der Domaenen eines Tupels
|
||||||
|
(Ersetzen) (replace), das Loeschen eines Tupels (Loeschen)
|
||||||
|
(delete), das Anzeigen eines Tupels (print) bzw. das Erzeu-
|
||||||
|
gen eines neuen Tupels (Zufuegen zu einer Relation) (ap-
|
||||||
|
pend), aus der Menge vorher mit "retrieve" selektierter Tu-
|
||||||
|
pel, moeglich.
|
||||||
|
|
||||||
|
Des weiteren ist das Zufuegen eines neuen Tupels zur Rela-
|
||||||
|
tion ohne vorherige Selektion nutzbar (append).
|
||||||
|
|
||||||
|
Es gibt weiterhin AMX-Anweisungen fuer das Eroeffnen einer
|
||||||
|
spezifizierten Datenbank entweder mit exklusiver (alleini-
|
||||||
|
ger) Benutzung (daba oder exclusive), ohne Sperrung oder mit
|
||||||
|
geteilter Benutzung (shared) sowie fuer das Eroeffnen (open)
|
||||||
|
bzw. das Schliessen (close) einer Relation.
|
||||||
|
|
||||||
|
Sollen in einem AMX-Programm miteinander in logischer Bezie-
|
||||||
|
hung stehende Datenmanipulationen (i.allg. in mehreren Rela-
|
||||||
|
tionen) ausgefuehrt werden, ist es zur Erhaltung der Date-
|
||||||
|
nintegritaet erforderlich, Transaktionen zu formulieren.
|
||||||
|
Eine Transaktion ist eine Folge von AMX-Anweisungen als lo-
|
||||||
|
gische Arbeitseinheit. Es gibt jeweils eine Anweisung zur
|
||||||
|
Spezifikation des Transaktionsbeginns (use), des Transak-
|
||||||
|
tionsendes (commit), sowie des Abbrechens einer Transaktion
|
||||||
|
und das Ruecksetzen (abort) und fuer das Behandeln einer
|
||||||
|
Verklemmung (if (deadlock)).
|
||||||
|
|
||||||
|
Bei Transaktionsbeginn sind die beteiligten Relationen und
|
||||||
|
die Art ihrer Benutzung (alleinig (exclusive), geteilt
|
||||||
|
(shared) oder ohne Sperrung (nolock)) spezifizierbar. Aus-
|
||||||
|
serdem ist u.a. das Sperrniveau (Seitensperrung (page) oder
|
||||||
|
Relationssperrung (table)) angebbar.
|
||||||
|
|
||||||
|
Des weiteren sind Anweisungen zur vorzeitigen Beendigung
|
||||||
|
eine Wiederfindungszyklusses (endretrieve), zur vorzeitigen
|
||||||
|
Beendigung einer Tupelverarbeitung im Wiederfindungszyklus
|
||||||
|
(nextretrieve), zum Bereitstellen der Gesamt-Tupelanzahl ei-
|
||||||
|
ner Relation (tuplecount) sowie der maximalen Tupellaenge
|
||||||
|
der Relation (tuplelength), und eine Leeranweisung (;) ver-
|
||||||
|
fuegbar.
|
||||||
|
|
||||||
|
Neben den durch "C" bereitgestellten und von AMX unter-
|
||||||
|
stuetzten Datentypen short (2), int (2 bei 16 Bit- und 4 bei
|
||||||
|
32-Bit Rechnern), long(4) , float(4), double(8), char * und
|
||||||
|
char [] (1-255) sind durch AMX zusaetzlich die mit den
|
||||||
|
DABA-Datentypen uebereinstimmenden Typen
|
||||||
|
|
||||||
|
i1, i2, i4, f4, und f8
|
||||||
|
|
||||||
|
verfuegbar.
|
||||||
|
|
||||||
|
Einschraenkungen
|
||||||
|
|
||||||
|
Die Geschwindigkeit der AMX-Zugriffe erfordert einige Ein-
|
||||||
|
schraenkungen. AMX gestattet Datenveraenderungen und Wie-
|
||||||
|
derfinden ausschliesslich in Basis-Nutzerrelationen (nicht
|
||||||
|
in Sichten!). Das Wiederfinden in Index-Nutzerrelationen
|
||||||
|
wird unterstuetzt. Die Katalogrelationen sind, entsprechend
|
||||||
|
definierte Befugnisse vorausgesetzt, lesbar.
|
||||||
|
|
||||||
|
Da nur die in einem AMX-Programm konkret benoetigten Zu-
|
||||||
|
griffsroutinen eingebunden werden, sind keine Universallo-
|
||||||
|
esungen, z.B. universelle Druckprogramme, realisierbar.
|
||||||
|
|
||||||
|
Aus dem Dargelegten ergibt sich ebenfalls, dass die Nutzer-
|
||||||
|
relationen nicht mit AMX erstellt werden koennen. Bevor ein
|
||||||
|
AMX-Programm uebersetzt werden kann, muessen die in diesem
|
||||||
|
Programm spezifizierten Relationen bereits mit IQL, EQL oder
|
||||||
|
dem DABA-MUTOS-Kommandos "creater" (creater(mutos)) erstellt
|
||||||
|
worden sein.
|
||||||
|
|
||||||
|
Da nur die in einem AMX-Programm benoetigten Zugriffsrouti-
|
||||||
|
nen zu den Relationen, entsprechend den konkreten Bedingun-
|
||||||
|
gen, zugriffsoptimiert in das ausfuehrbare Programm einge-
|
||||||
|
bunden werden, ist nach jeder Modifikation der Relations-
|
||||||
|
struktur (modify(ql), modifyr(mutos), index(ql) bzw.
|
||||||
|
indexr(mutos), destroy(ql) bzw. destroyr(mutos) und crea-
|
||||||
|
te(ql) bzw. creater(mutos), eine Neuuebersetzung des AMX-
|
||||||
|
Programmes notwendig!
|
||||||
|
|
||||||
|
Eine Relation, die durch ein AMX-Programm verarbeitet werden
|
||||||
|
soll, darf keine definierten Integritaetsbedingungen besit-
|
||||||
|
zen! Als Befugnisse einer solchen Relation duerfen aus-
|
||||||
|
schliesslich operationelle Befugnisse (append, retrieve, de-
|
||||||
|
lete, replace oder all) ohne jede Qualifikation definiert
|
||||||
|
worden sein!
|
||||||
|
|
||||||
|
Werden mehrere Objektmodule zu einem ausfuehrbaren Programm
|
||||||
|
verbunden, darf nur einer dieser Objektmodule AMX-
|
||||||
|
Anweisungen enthalten!
|
||||||
|
|
||||||
|
Konvertierungen zwischen numerischen und Zeichenkettenwerten
|
||||||
|
(und umgekehrt) werden nicht unterstuetzt. Numerische Kon-
|
||||||
|
vertierungen erfolgen ohne Unter- bzw. Ueberlaufkontrolle.
|
||||||
|
|
||||||
|
Vergleiche von Zeichenkettenwerten zwischen Domaenen und Va-
|
||||||
|
riablen werden in der Laenge der Domaene ausgefuehrt, z.B.
|
||||||
|
liefert der Variablenwert "Automat" den Wert "Auto" fuer die
|
||||||
|
Datenbankaktion, wenn die zugehoerige Domaene den DABA-
|
||||||
|
Datentyp "c4" hat.
|
||||||
|
|
||||||
|
Uebersetzung
|
||||||
|
|
||||||
|
AMX-Anweisungen, im Anwendungsprogramm durch ein besonde-
|
||||||
|
res Praefixsymbol "##" gekennzeichnet, werden durch den
|
||||||
|
Voruebersetzer (Praeprozessor) syntaktisch und semantisch
|
||||||
|
ueberprueft und in Prozeduraufrufe der hoeheren Programm-
|
||||||
|
iersprache uebersetzt. Vorbild fuer diesen Loesungsansatz
|
||||||
|
war EQL des DABA.
|
||||||
|
|
||||||
|
"C"-Anweisungen werden unveraendert in das "C"-Programm ko-
|
||||||
|
piert.
|
||||||
|
|
||||||
|
Damit ein AMX-Quellprogramm vom AMX-Compiler verarbeitet
|
||||||
|
werden kann, muss das File, in dem es enthalten ist, den
|
||||||
|
File-Namenssuffix ".x" (z.B. prog.x) besitzen.
|
||||||
|
|
||||||
|
Der AMX-Compiler holt sich alle Informationen zu den Rela-
|
||||||
|
tionen und Domaenen aus den Systemkatalogen (Katalogrelatio-
|
||||||
|
nen) der Datenbank und entlastet somit den Anwender von der
|
||||||
|
Angabe dieser Details und den Fehlern, die an dieser Stelle
|
||||||
|
gemacht werden koennen. Durch diesen Ansatz ist eine weit-
|
||||||
|
gehende Quelltextunabhaengigkeit von der Struktur der Daten-
|
||||||
|
bank gesichert.
|
||||||
|
|
||||||
|
Bei der Zugriffspfadoptimierung werden die vorhandenen In-
|
||||||
|
dizes voll herangezogen. Wenn der AMX-Programmierer es for-
|
||||||
|
dert, ist eine davon abweichende Zugriffsgestaltung spezifi-
|
||||||
|
zierbar.
|
||||||
|
|
||||||
|
Aenderungen sind nur in Nutzerrelationen gestattet, die Sy-
|
||||||
|
stemkataloge und Indizes werden durch AMX aktualisiert.
|
||||||
|
|
||||||
|
Eine Aenderung der Speicherungsstruktur einer Relation er-
|
||||||
|
fordert, wie bereits betont, keine Aenderung des AMX-
|
||||||
|
Quellprogramms, wohl aber dessen neue Uebersetzung.
|
||||||
|
|
||||||
|
Wenn der AMX-Compiler ein AMX-Programm uebersetzen soll, ar-
|
||||||
|
beitet dieser als Nutzer "daba". Damit das erzeugte "C"-
|
||||||
|
Programm in das aktuelle Arbeits-Directory geschrieben wer-
|
||||||
|
den kann, muss deshalb "daba" in diesem Directory die
|
||||||
|
Schreiberlaubnis besitzen.
|
||||||
|
|
||||||
|
Die Spezifikation des AMX-Quell-Files erfolgt, wie ueblich,
|
||||||
|
entweder als absoluter Pfadname oder relativ zum aktuellen
|
||||||
|
Arbeit-Directory.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Das durch den AMX-Compiler erzeugte AMX-Programm besitzt den
|
||||||
|
Filemodus oktal "6755" und ist dem Nutzer daba und der Grup-
|
||||||
|
pe daba zugeordnet. Es ist z.B. beim Kopieren eines AMX-
|
||||||
|
Programmes darauf zu achten, dass dieser Filemodus erhalten
|
||||||
|
bleibt.
|
||||||
|
|
||||||
|
Zur Fehlererkennung beimm Compilieren ist folgendes zu be-
|
||||||
|
merken. Nach Erkennung eines Fehlers wird die Uebersetzung
|
||||||
|
erst nach drei als richtig erkannten syntaktischen Einheiten
|
||||||
|
(Token, Morpheme) fortgesetzt, sodass eine zweite Ueberset-
|
||||||
|
zung Fehler erzeugen kann, die in der ersten nicht gemeldet
|
||||||
|
wurden. Die zu jedem Fehler mit ausgegebene Zeilennummer ist
|
||||||
|
nicht immer exakt. Sie kann sich auf eine der vorherigen
|
||||||
|
Zeilen beziehen, wenn der Fehler am Zeilenende erkannt wur-
|
||||||
|
de, da der Compiler immer eine syntaktische Einheit voraus
|
||||||
|
liest.
|
||||||
|
Wird ein Fehler festgestellt, ist in dem oben genannten Fall
|
||||||
|
der Zeilenzaehler aber schon um eins (oder mehr, bei Zeilen
|
||||||
|
ohne syntaktische Einheiten) hochgezaehlt. Bei einigen syn-
|
||||||
|
taktischen Fehler ist eine Angabe der Fehlerursache aeus-
|
||||||
|
serst schwierig.
|
||||||
|
Aufgrund der einfachen Syntax von AMX wurde auf eine detail-
|
||||||
|
lierte Fehlererkennung verzichtet und der Anwender muss den
|
||||||
|
erzeugten Fehler
|
||||||
|
|
||||||
|
"syntax error"
|
||||||
|
selbst deuten.
|
||||||
|
|
||||||
|
Namenskonventionen
|
||||||
|
|
||||||
|
Fuer Datenbankbegriffe (ql(iql)) und auch bezueglich der
|
||||||
|
Grenzwerte gelten die gleichen Bedingungen wie in den an-
|
||||||
|
deren DABA-Interfaces. Es sei nochmals daran erinnert, dass
|
||||||
|
die Namen der Systemrelationen:
|
||||||
|
|
||||||
|
"relation" Verwaltung der Relationen
|
||||||
|
"attribute" Verwaltung der Domaenen
|
||||||
|
"indexes" Verwaltung der Indizes
|
||||||
|
"integrities" Verwaltung der definierten Integritaeten
|
||||||
|
"protect" Verwaltung der vergebenen Zugriffsrechte
|
||||||
|
"tree" Verwaltung der voruebersetzten Datenbank-
|
||||||
|
aktionen
|
||||||
|
"references" Verwaltung von Beziehungen zwischen
|
||||||
|
Relationen
|
||||||
|
|
||||||
|
als Namen von Nutzerrelationen gesperrt sind.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Alle Namen (Datenbank, Relationen, Domaenen) sind maximal 12
|
||||||
|
Zeichen lang und bestehen aus den Zeichen "[a-z_0-9]", wobei
|
||||||
|
der Name nicht mit einer Ziffer "[0-9]" beginnen darf (siehe
|
||||||
|
ql(iql)). Der AMX-Compiler konvertiert bei Namen grosse
|
||||||
|
Buchstaben "[A-Z]" automatisch in kleine "[a-z]".
|
||||||
|
|
||||||
|
Durch die Laufzeitbibliothek werden eine Reihe von Objekten
|
||||||
|
definiert, die alle mit "AA" beginnen. Der Anwendungspro-
|
||||||
|
grammierer hat zu gewaehrleisten, dass diese Objekte nicht
|
||||||
|
ueberdefiniert werden. Er sollte Namen, die mit "AA" begin-
|
||||||
|
nen, generell vermeiden.
|
||||||
|
|
||||||
|
AMX-Programm
|
||||||
|
|
||||||
|
Jedes AMX-Programm besteht aus "C"-Anweisungen und eingebet-
|
||||||
|
teten AMX-Anweisungen, die vom AMX-Praeprozessor verarbeitet
|
||||||
|
werden.
|
||||||
|
|
||||||
|
Alle AMX-Anweisungen sind durch das AMX-Kommandopraefix, das
|
||||||
|
aus zwei Nummernzeichen "##" am Zeilenanfang gebildet wird,
|
||||||
|
gekennzeichnet.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"C"-Variablen, die in AMX-Anweisungen verwendet werden, sind
|
||||||
|
ebenfalls durch "##" zu kennzeichnen.
|
||||||
|
|
||||||
|
Wie bereits dargelegt, sind die "C"-Variablentypen und zu-
|
||||||
|
saetzlich "i1", "i2", "i4", "f4" und "f8" verfuegbar.
|
||||||
|
|
||||||
|
Alle Variablen sind global zu deklarieren!
|
||||||
|
|
||||||
|
Die erste Anweisung im AMX-Quellprogramm muss eine der An-
|
||||||
|
weisungen zum Eroeffnen der Datenbank (exclusive, daba, no-
|
||||||
|
lock oder shared) sein.
|
||||||
|
|
||||||
|
Die erste auszufuehrende Funktion, anstelle von "main", muss
|
||||||
|
die Funktion "amx" sein. Fuer diese Funktion sind die glei-
|
||||||
|
chen Parameter wie bei "main" spezifizierbar (amx() ohne Pa-
|
||||||
|
rameter).
|
||||||
|
|
||||||
|
Jede Relation muss vor ihrer Verwendung eroeffnet und kann
|
||||||
|
nach Beendigung der Verarbeitung geschlossen werden. Durch
|
||||||
|
die MUTOS Funktion "exit" werden alle noch eroeffneten Rela-
|
||||||
|
tionen geschlossen, nachdem die entsprechenden noch ausste-
|
||||||
|
henden Ausgaben erfolgt sind.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Zur Bildung syntaktischer Konstruktionen werden zur Darstel-
|
||||||
|
lung einer Auswahl oder Wiederholung die folgenden Metasym-
|
||||||
|
bole verwendet:
|
||||||
|
|
||||||
|
| : Alternative.
|
||||||
|
|
||||||
|
[ ] : wahlweiser Ausdruck, kann entfallen.
|
||||||
|
|
||||||
|
{ } : mindestens einmalige Wiederholung,
|
||||||
|
mehrere Elemente werden durch ein Komma "," getrennt.
|
||||||
|
|
||||||
|
Als syntaktische Variable werden u.a. die folgenden verwen-
|
||||||
|
det:
|
||||||
|
|
||||||
|
dbname = Datenbankname
|
||||||
|
c_code = C-Anweisung
|
||||||
|
c_decl = Deklaration einer C-Variablen
|
||||||
|
relname = Relationsname
|
||||||
|
c_var = C-Variablenname
|
||||||
|
domname = Domaenenname bzw. Domaenennummer
|
||||||
|
const = int-Konstante | long-Konstante
|
||||||
|
| double-Konstante | "string"-Konstante
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Sprachbeschreibung
|
||||||
|
|
||||||
|
Das Folgende ist eine Beschreibung der allgemeinen Syntax
|
||||||
|
der Sprache AMX und der syntaktischen Klassen aus denen die
|
||||||
|
Teile der AMX-Anweisungen gebildet werden. Die einzelnen
|
||||||
|
Anweisungen werden ebenfalls hier erlaeutert.
|
||||||
|
|
||||||
|
Kennzeichnung der AMX-Anweisungen
|
||||||
|
|
||||||
|
Alle AMX-Anweisungen beginnen mit "##" am Zeilenanfang. Nur
|
||||||
|
diese Anweisungen werden im folgenden behandelt. Alle an-
|
||||||
|
deren Anweisungen sind "C"-Anweisungen die den Regeln des
|
||||||
|
"C"-Compilers unterliegen.
|
||||||
|
|
||||||
|
Die erste AMX-Anweisung im Programm
|
||||||
|
|
||||||
|
Die erste AMX-Anweisung in einem AMX-Programm muss das Ero-
|
||||||
|
effnen einer Datenbank sein.
|
||||||
|
|
||||||
|
Ist keine Sperrung der Datenbank vorgesehen, ist die Anwei-
|
||||||
|
sung:
|
||||||
|
|
||||||
|
## nolock [ flags ] dbname [ with deadlock ]
|
||||||
|
|
||||||
|
zu verwenden.
|
||||||
|
|
||||||
|
Soll eine Datenbank alleinig benutzt werden, sind die Anwei-
|
||||||
|
sungen:
|
||||||
|
|
||||||
|
## daba [ flags ] dbname [ with deadlock ]
|
||||||
|
|
||||||
|
oder
|
||||||
|
|
||||||
|
## exclusive [ flags ] dbname [ with deadlock ]
|
||||||
|
|
||||||
|
zu benutzen.
|
||||||
|
|
||||||
|
Bei geteilter Nutzung ist:
|
||||||
|
|
||||||
|
## shared [ flags ] dbname [ with deadlock ]
|
||||||
|
|
||||||
|
zu verwenden.
|
||||||
|
|
||||||
|
Die wahlweisen Flags haben folgende Bedeutung:
|
||||||
|
|
||||||
|
-uname Erlaubt es, sich als Nutzer mit dem Login-Namen
|
||||||
|
name auszugeben. Das AMX-Programm arbeitet dann
|
||||||
|
mit den Datenbankbefugnissen des entsprechenden
|
||||||
|
Nutzers. Nur der DBA und der DABA-
|
||||||
|
Systemverantwortliche duerfen dieses Flag benut-
|
||||||
|
zen.
|
||||||
|
|
||||||
|
+bufno Ist die Spezifikation zusaetzlich verfuegbaren
|
||||||
|
DABA-Puffer. Normalerweise werden nur insgesamt
|
||||||
|
drei Puffer bereitgestellt. Bei paralleler Arbeit
|
||||||
|
mit mehreren Relationen (Indexrelationen muessen
|
||||||
|
mit gezaehlt werden!), sollte jeder Relation
|
||||||
|
mindestens ein Puffer zugeordnet werden. Empfeh-
|
||||||
|
lenswert sind zwei Puffer pro Relation.
|
||||||
|
|
||||||
|
Die Spezifikation with deadlock bedeutet, dass Deadlocks
|
||||||
|
(Totsperren) auftreten koennen, die der Nutzer selbst abfan-
|
||||||
|
gen will.
|
||||||
|
|
||||||
|
Kommentar
|
||||||
|
|
||||||
|
Kommentare sind innerhalb von AMX-Anweisungen in der C-
|
||||||
|
ueblichen Notation zugelassen und duerfen nicht geschachtelt
|
||||||
|
werden:
|
||||||
|
|
||||||
|
## . . . /* Kommentar */ . . .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Deklaration von C-Variablen
|
||||||
|
|
||||||
|
"C"-Variable, die in einer AMX-Anweisung verwendet werden
|
||||||
|
sollen, sind unbedingt durch "##" zu kennzeichnen. Folgende
|
||||||
|
"C"-Typen werden unterstuetzt:
|
||||||
|
|
||||||
|
- short
|
||||||
|
- int
|
||||||
|
- long
|
||||||
|
- float
|
||||||
|
- double
|
||||||
|
- char *
|
||||||
|
- char []
|
||||||
|
|
||||||
|
|
||||||
|
Ausserdem sind die DABA-Typen i1, i2, i4, f4 und f8 zugelas-
|
||||||
|
sen.
|
||||||
|
|
||||||
|
Folgende Speicherklassen werden unterstuetzt:
|
||||||
|
|
||||||
|
- auto
|
||||||
|
- extern
|
||||||
|
- static
|
||||||
|
|
||||||
|
|
||||||
|
Relationseroeffnung
|
||||||
|
|
||||||
|
Die Anweisung:
|
||||||
|
|
||||||
|
## open relation
|
||||||
|
|
||||||
|
eroeffnet die Relation relname fuer die weitere Verarbei-
|
||||||
|
tung.
|
||||||
|
Die Relation relname muss eine Primaer- bzw. Basisrelation
|
||||||
|
sein, d.h. es ist nicht moeglich, explizit eine Indexrela-
|
||||||
|
tion zu eroeffnen.
|
||||||
|
|
||||||
|
Durch die open Anweisung werden automatisch alle zur Rela-
|
||||||
|
tion gehoerigen Indizes miteroeffnet.
|
||||||
|
Die Relation relname darf keine Sicht (View) sein, und es
|
||||||
|
duerfen keine Integritaetsbedingungen bzw. nur operationelle
|
||||||
|
Befugnisse (append, replace, retrieve, delete oder all) ohne
|
||||||
|
jede Qualifikation auf ihr definiert sein. Die Systemkata-
|
||||||
|
loge relation , attribute und indexes werden durch den Start
|
||||||
|
eines AMX-Programms automatisch eroeffnet. Sie duerfen vom
|
||||||
|
Nutzer nicht explizit eroeffnet werden.
|
||||||
|
Recherchen sind auf alle Relationen zugelassen, d.h. auf
|
||||||
|
Basis-, Indexrelationen und Katalogen.
|
||||||
|
Aenderungen und Einfuegungen sind nur auf Basisrelationen
|
||||||
|
zulaessig, fuer die das Programm die Aenderungsbefugnis (de-
|
||||||
|
lete, append, replace) hat.
|
||||||
|
|
||||||
|
## close relname
|
||||||
|
|
||||||
|
Die close Anweisung schliesst die Relation relname fuer die
|
||||||
|
weitere Verarbeitung. Es koennen nur Relationen geschlossen
|
||||||
|
werden, die zuvor durch die open Anweisung eroeffnet wurden.
|
||||||
|
Die Beendigung eines Programms ( exit ) schliesst automati-
|
||||||
|
sch alle eroeffneten Relationen und Kataloge.
|
||||||
|
|
||||||
|
## tuplecount relname c_var
|
||||||
|
|
||||||
|
Die tuplecount-Anweisung weist der C-Variable c_var als Wert
|
||||||
|
die Anzahl der Tupel der Relation relname zu. C_var muss
|
||||||
|
von numerischem Typ und als long (oder besser i4 ) definiert
|
||||||
|
worden sein.
|
||||||
|
|
||||||
|
## tuplelength relname c_var
|
||||||
|
|
||||||
|
Die tuplelength-Anweisung weist der C-Variablen c_var als
|
||||||
|
Wert die Laenge eines Tupels zu und sollte als short ( oder
|
||||||
|
besser als i2 ) definiert sein.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Die Anzahl der Tupel einer Relation und ihre Laenge sind die
|
||||||
|
einzigen verfuegbaren variablen Kataloginformationen fuer
|
||||||
|
ein AMX-Programm. Auf Umwegen kann so die Anzahl der Aende-
|
||||||
|
rungen in einer Relation bestimmt werden:
|
||||||
|
|
||||||
|
. . .
|
||||||
|
## long old, new;
|
||||||
|
. . .
|
||||||
|
## tuplecount rel old
|
||||||
|
{ Neueinfuegungen }
|
||||||
|
## tuplecount rel new
|
||||||
|
printf("# of updates", new - old);
|
||||||
|
. . .
|
||||||
|
|
||||||
|
Ergebnisliste
|
||||||
|
|
||||||
|
In der retrieve, der replace und der append Anweisung kann
|
||||||
|
eine Domaenenauswahl in Form einer target_list (Ergebnis-
|
||||||
|
oder Zielliste) spezifiziert werden.
|
||||||
|
|
||||||
|
Die target_list ist eine durch Kommas separierte Liste von
|
||||||
|
Domaenenzuordnungen (dom_assign). Sie muss in runde Klam-
|
||||||
|
mern eingeschlossen werden und mindestens eine Domaenenspe-
|
||||||
|
zifikation enthalten.
|
||||||
|
|
||||||
|
Eine Domaenenzuordnung der Ergebnisliste besteht aus:
|
||||||
|
|
||||||
|
$domname = value.
|
||||||
|
|
||||||
|
Sie weist der Domaene domname den Wert value zu. Dabei
|
||||||
|
kennzeichnet das Dollar-Zeichen $ den Domaenennamen.
|
||||||
|
Als domname kann auch eine Domaenennummer ( attid des attri-
|
||||||
|
bute Kataloges) spezifiziert werden.
|
||||||
|
Bei den Zuweisungen von numerischen zu numerischen Typen
|
||||||
|
werden die notwendigen Konvertierungen ohne Ueberlauf- bzw.
|
||||||
|
Unterlaufkontrolle vorgenommen.
|
||||||
|
Zuweisungen von numerischen zu Zeichenkettenwerten und um-
|
||||||
|
gekehrt sind nicht zulaessig.
|
||||||
|
Durch die explizite Kennzeichnung von Domaenennamen durch
|
||||||
|
das Zeichen "$" werden im Gegensatz zu EQL Konflikte mit dem
|
||||||
|
Namen von C-Variablen vermieden.
|
||||||
|
Die Referenzierung von Domaenen ueber ihre interne Nummer
|
||||||
|
(Reihenfolge vom create(ql)) kann sinnvoll bei einer vekto-
|
||||||
|
risierten Verarbeitung sein.
|
||||||
|
|
||||||
|
Ein Wert value kann der aktuelle Wert der C-Variablen c_var,
|
||||||
|
eine in C uebliche Konstante const oder eine Domaenenzuord-
|
||||||
|
nung sein. Ein Wert kann der aktuelle Wert der Domaene (Do-
|
||||||
|
maenenzuordnung) (gekennzeichnet durch das Dollarzeichen)
|
||||||
|
$domname sein. Diese Form des Wertes kann nur im Aktions-
|
||||||
|
teil der Recherche angegeben werden und setzt eine ueber-
|
||||||
|
geordnete retrieve Anweisung voraus, aus dem der Wert fuer
|
||||||
|
die Domaene domname geholt werden kann.
|
||||||
|
|
||||||
|
Die retrieve-Anweisung
|
||||||
|
|
||||||
|
|
||||||
|
## [ over over_relname ] retrieve ret_relname [ qual ] [ (
|
||||||
|
target_list ) ]
|
||||||
|
|
||||||
|
Die retrieve Anweisung zur Recherche ist die maechtigste
|
||||||
|
AMX-Anweisung, sie uebernimmt die Zugriffspfadoptimierung
|
||||||
|
und ermoeglicht eine rekursive Verarbeitung, da innerhalb
|
||||||
|
einer Recherche eine weitere Recherche aufgerufen werden
|
||||||
|
kann.
|
||||||
|
|
||||||
|
Die over Klausel gestattet die Zuweisung des Zugriffspfades
|
||||||
|
ueber die Relation over_relname fuer die Recherche und damit
|
||||||
|
die Ausschaltung der Zugriffspfadoptimierung im AMX-
|
||||||
|
Compiler.
|
||||||
|
|
||||||
|
Over_relname muss die wiederzufindende Relation selbst oder
|
||||||
|
ein Index von ret_relname sein. Ist over_relname ein Index
|
||||||
|
und wird durch die Selektion qual keinem Schluessel von
|
||||||
|
over_relname ein Wert zugewiesen, wird der Zugriffspfad ue-
|
||||||
|
ber die Primaerrelation rel_relname gewaehlt, da eine Re-
|
||||||
|
cherche ueber die gesamte Relation und ueber einen Index un-
|
||||||
|
sinning ist.
|
||||||
|
|
||||||
|
Die retrieve Klausel ( retrieve ret_relname ) adressiert die
|
||||||
|
zu suchende Relation ret_relname.
|
||||||
|
|
||||||
|
Qualifikation
|
||||||
|
|
||||||
|
Die Recherche kann durch eine Qualifikation qual als Spezi-
|
||||||
|
fikation einer Selektion eingeschraenkt werden, wodurch die
|
||||||
|
relevanten Tupel selektiert werden.
|
||||||
|
Die Selektion ist eine Einschraenkung des Wertebereichs ein-
|
||||||
|
zelner (oder aller) Domaenen.
|
||||||
|
Mehrere Einschraenkungen werden durch "and" getrennt.
|
||||||
|
Eine Qualifikation qual hat maximal zwei Klausel pro Doma-
|
||||||
|
enenname. Eine Klausel besteht aus einer Domaenenspezifika-
|
||||||
|
tion (einem Domaenennamen domname, gekennzeichnet durch ein
|
||||||
|
Dollarzeichen "$" davor), einem Vergleichsoperator und einem
|
||||||
|
Wert value. Domname gibt die einzuschraenkende Domaene und
|
||||||
|
value den Wert der Einschraenkung an. Fuer die Spezifika-
|
||||||
|
tion von value gilt das in "Ergebnisliste" dargelegte.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Es sind die Vergleichsoperatoren:
|
||||||
|
|
||||||
|
"=", "==", "<", "<=", ">", ">=", "!="
|
||||||
|
|
||||||
|
zulaessig.
|
||||||
|
Wird eine Domaene doppelt eingeschraenkt, sind folgende zu-
|
||||||
|
laessige Kombinationen zu beachten:
|
||||||
|
|
||||||
|
"<[=]" und ">[=]"
|
||||||
|
"<[=]" und "!="
|
||||||
|
">[=]" und "!="
|
||||||
|
|
||||||
|
Die Reihenfolge der Einschraenkungen fuer eine Domaene ist
|
||||||
|
in folgender Art einzuhalten:
|
||||||
|
|
||||||
|
"<[=]" --> ">[=]" --> "!="
|
||||||
|
|
||||||
|
Alle zugewiesenen Bedingungen und Werte der angebenen Ein-
|
||||||
|
schraenkungen werden beim Einlauf in die Recherche gekel-
|
||||||
|
lert, sodass z.B. eine Aenderung des Wertes einer verwende-
|
||||||
|
ten C-Variablen keinen Einfluss auf die Selektion hat.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ergebnisliste der retrieve-Anweisung
|
||||||
|
|
||||||
|
Die Ergebnisliste ( target_list ) zur Spezifikation der Do-
|
||||||
|
maenenauswahl (Projektionsoperation des DBBS) ist wahlweise.
|
||||||
|
|
||||||
|
Aktion
|
||||||
|
|
||||||
|
Die Aktion, die bei jedem gefundenen Tupel duchlaufen werden
|
||||||
|
soll, ist durch den Einschluss der ##{ und der ##} Anweisun-
|
||||||
|
gen, die unmittelbar der ## retrieve Anweisung folgen soll-
|
||||||
|
ten, zu spezifizieren. Zwischen diesen Anweisungen koennen
|
||||||
|
beliebige AMX-Anweisungen und C-Anweisungen stehen. Die Ak-
|
||||||
|
tion kann leer sein, allerdings muessen die Klammern ange-
|
||||||
|
geben sein.
|
||||||
|
Es ist wichtig zu wissen, dass innerhalb der Aktion die Do-
|
||||||
|
maenenwerte des gefundenen Tupel immer vorhanden sind und
|
||||||
|
sich nicht aendern.
|
||||||
|
Eine Aktion fuer ein Tupel kann vorzeitig beendet werden.
|
||||||
|
Es ist moeglich, durch die Anweisung
|
||||||
|
|
||||||
|
## nextretrieve
|
||||||
|
|
||||||
|
zur Verabeitung des naechsten Tupels ueberzugehen oder durch
|
||||||
|
|
||||||
|
## endretrieve
|
||||||
|
|
||||||
|
die Aktion (Recherche) zu beenden.
|
||||||
|
|
||||||
|
Variablenzuweisung
|
||||||
|
|
||||||
|
Eine Zuweisung weist der C-Variablen c_var den aktuellen
|
||||||
|
Wert der Domaene domname zu.
|
||||||
|
|
||||||
|
c_var = $domname
|
||||||
|
|
||||||
|
Bei den Zuweisungen von numerischen zu numerischen Typen
|
||||||
|
werden die notwendigen Konvertierungen ohne Ueberlauf-
|
||||||
|
bzw. Unterlaufkontrolle vorgenommen.
|
||||||
|
Zuweisungen von numerischen zu Zeichenkettenwerten und um-
|
||||||
|
gekehrt sind nicht zulaessig.
|
||||||
|
|
||||||
|
Die print-Anweisung
|
||||||
|
|
||||||
|
## print ([{ domname }])
|
||||||
|
|
||||||
|
Die print-Anweisung gibt die Werte der, durch eine oeffnende
|
||||||
|
"(" und eine schliessende runde Klammer ")", begrenzten Li-
|
||||||
|
ste der Domaenen in einem Standardformat nach Standardoutput
|
||||||
|
aus.
|
||||||
|
Die Liste enthaelt eine durch Kommas "," getrennte Aufza-
|
||||||
|
ehlung der auszugebenden Domaenen. Eine leere Liste "()"
|
||||||
|
gibt die Werte aller Domaenen aus.
|
||||||
|
|
||||||
|
Das Standardformat enthaelt den Namen und den Wert der Doma-
|
||||||
|
ene in folgender Form:
|
||||||
|
|
||||||
|
"%12s: %?\n", domname, value
|
||||||
|
|
||||||
|
? == Format der auszugebenden Domaene
|
||||||
|
|
||||||
|
Die delete-Anweisung
|
||||||
|
|
||||||
|
## delete
|
||||||
|
|
||||||
|
Eine delete-Anweisung loescht das innerhalb der laufenden
|
||||||
|
Recherche gefundene aktuelle Tupel aus der Relation. In-
|
||||||
|
nerhalb der Aktion bleibt das aktuelle Tupel mit seinen Wer-
|
||||||
|
ten erhalten.
|
||||||
|
Eventuell vorhandene Indizes werden automatisch aktuali-
|
||||||
|
siert.
|
||||||
|
|
||||||
|
Die replace-Anweisung
|
||||||
|
|
||||||
|
## replace (target_list)
|
||||||
|
|
||||||
|
Die replace Anweisung gestattet die Aenderung von Werten
|
||||||
|
einzelner (oder aller) Domaenen eines wiedergefundenen Tu-
|
||||||
|
pels.
|
||||||
|
Eine Unterscheidung von Schluessel- und Nichtschluesseldoma-
|
||||||
|
enen ist nicht zu beachten.
|
||||||
|
Die Aenderungen werden durch die Projektions target_list
|
||||||
|
spezifiziert.
|
||||||
|
|
||||||
|
Es ist zu beachten, dass die Aenderungen in einem gesonder-
|
||||||
|
tem Puffer ausgefuehrt werden, das aktuell gefundene Tupel
|
||||||
|
also innerhalb der Aktion unveraendert bleibt.
|
||||||
|
Eventuell vorhandene Indizes werden, falls noetig, auto-
|
||||||
|
matisch aktualisiert. Eine Aktualsierung entfaellt z.B.,
|
||||||
|
wenn eine identische Aenderung (geaendertes == Ursprungstu-
|
||||||
|
pel) ausgefuehrt wurde oder wenn die geaenderten Domaenen
|
||||||
|
nicht Bestandteil des Index sind und sich die Tupeladresse
|
||||||
|
TID nicht geaendert hat.
|
||||||
|
|
||||||
|
Die append-Anweisung
|
||||||
|
|
||||||
|
## append [ relname ] (target-list)
|
||||||
|
|
||||||
|
Die append Anweisung mit der Spezifikation relname fuegt ein
|
||||||
|
neues Tupel in die Relation relname ein. Die nicht in der
|
||||||
|
target_list spezifizierten Domaenen der Relation relname
|
||||||
|
werden mit einem Nullwert initialisiert, alle numerischen
|
||||||
|
Domaenen bekommen den Wert 0.
|
||||||
|
Den Zeichenkettendomaenen wird eine mit Leerzeichen gefuell-
|
||||||
|
te Zeichenkette zugewiesen.
|
||||||
|
|
||||||
|
Die append Anweisung ohne relname fuegt ein neues Tupel in
|
||||||
|
die Relation ein. Sie kann nur innerhalb einer Recherche ge-
|
||||||
|
nutzt werden. Durch die Projektion target_list werden den
|
||||||
|
aufgefuehrten Domaenen Werte zugewiesen.
|
||||||
|
Alle nicht angebenen Domaenen erhalten den Wert aus dem ak-
|
||||||
|
tuell gefundenen Tupel der laufenden Recherche.
|
||||||
|
|
||||||
|
Es ist zu beachten, dass die Aenderungen in einem gesonder-
|
||||||
|
ten Puffer ausgefuehrt werden, also das aktuell gefundene
|
||||||
|
Tupel unveraendert bleibt. Eventuell vorhandene Indizes
|
||||||
|
werden automatisch aktualisiert.
|
||||||
|
|
||||||
|
Arbeit mit Transaktionen
|
||||||
|
|
||||||
|
Zur Arbeit mit Transaktionen stehen die AMX-Anweisungen use,
|
||||||
|
commit, abort und if (deadlock) bereit.
|
||||||
|
|
||||||
|
## use ( use_rel [, ...] )
|
||||||
|
|
||||||
|
Use spezifiziert den Beginn einer Transaktion. den Beginn
|
||||||
|
einer Transaktion. Use_rel wird wie folgt angegeben:
|
||||||
|
|
||||||
|
[ exclusive | shared | nolock | + ] relname [
|
||||||
|
|
||||||
|
with [ level = page | table ]
|
||||||
|
|
||||||
|
[ readlock = exclusive | shared | nolock ]
|
||||||
|
|
||||||
|
[ maxlock = int ]
|
||||||
|
|
||||||
|
[ timeout = int ] ]
|
||||||
|
|
||||||
|
Exclusive oder + bedeuten exklusive (alleinige), das Weglas-
|
||||||
|
sen oder shared eine geteilte Benutzung. Die geteilte Be-
|
||||||
|
nutzung und nolock (kein Sperren) sind nur fuer Leseopera-
|
||||||
|
tionen, exklusive Benutzung fuer Schreiboperationen anwend-
|
||||||
|
bar.
|
||||||
|
|
||||||
|
Level kennzeichnet das Sperrniveau page (Seitensperren) oder
|
||||||
|
table (Relationsperren).
|
||||||
|
|
||||||
|
Readlock ist nur fuer Leseoperationen anwendbar und kenn-
|
||||||
|
zeichnet die Art der Lesesperren.
|
||||||
|
|
||||||
|
|
||||||
|
Maxlock spezifiziert die maximale Anzahl der Sperren ( -1 :
|
||||||
|
unbegrenzt) und timeout die Zeit (in Sekunden), bis eine
|
||||||
|
Rueckkehr vom DBBS erfolgt sein muss ( - 1 : warten, bis
|
||||||
|
verfuegbar).
|
||||||
|
|
||||||
|
Nur, wenn beim Eroeffnen der Datenbank with deadlock spezi-
|
||||||
|
fiziert wurde, sind die folgenden Anweisungen nutzbar.
|
||||||
|
|
||||||
|
## if ( bd deadlock ) { stmt_list }
|
||||||
|
|
||||||
|
Mit dieser Anweisung kann abgetestet werden, ob ein Deadlock
|
||||||
|
aufgetreten ist. Diese Anweisung ist unmittelbar nach use,
|
||||||
|
retrieve, append, replace oder delete anzuordnen. Wenn ein
|
||||||
|
Deadlock aufgetreten ist, wird die Anweisungsfolge stmt_list
|
||||||
|
abgearbeitet werden, was i.allg. die Anweisung abort sein
|
||||||
|
wird.
|
||||||
|
|
||||||
|
## abort
|
||||||
|
|
||||||
|
Diese Anweisung beendet eine Transaktion zwangsweise und
|
||||||
|
setzt die Datenbank auf den Stand vor Beginn der Transaktion
|
||||||
|
zurueck.
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
EQC(MUTOS) DABA16 EQC(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
eqc - Aufruf des EQL-Praecompilers
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
eqc [ -d ] [ -f ] [ -r ] file.q {file.q}
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
EQL (Eingebettete QL) ist eine Sprache zur Einbettung von
|
||||||
|
Datenbankanfragen der Sprache QL in eine Wirts-
|
||||||
|
Programmiersprache.
|
||||||
|
|
||||||
|
EQL besteht aus der EQL-Laufzeitbibliothek, die die Schnitt-
|
||||||
|
stelle zur Datenbank realisiert (Call- Interface), und einem
|
||||||
|
Praecompiler zur Uebersetzung eines Programms mit eingebet-
|
||||||
|
teten QL-Anweisungen in gueltige Anweisungen der Programm-
|
||||||
|
iersprache C.
|
||||||
|
Das Call-Interface ist fuer alle Programmiersprachen ver-
|
||||||
|
fuegbar; ein Praecompiler existiert zur Zeit nur fuer die
|
||||||
|
Programmiersprache C.
|
||||||
|
|
||||||
|
Compilation
|
||||||
|
|
||||||
|
Der Praecompiler wird durch das Kommando:
|
||||||
|
|
||||||
|
eqc {flags} file1.q {flags} file2.q ...
|
||||||
|
|
||||||
|
aufgerufen, wobei filen.q die Quelleingabe-Files sind, deren
|
||||||
|
Namen mit .q enden muessen. Die Ausgabe wird auf das File
|
||||||
|
`filen.c' geschrieben.
|
||||||
|
|
||||||
|
Folgende Flags koennen gesetzt werden:
|
||||||
|
|
||||||
|
-d Generiert Code zum Quelltext des Files mit Name und
|
||||||
|
Zeilennummer, die bei auftretenden Laufzeit-Fehlern an-
|
||||||
|
gezeigt werden. Das ist zum Analysieren der Fehler
|
||||||
|
nuetzlich, benoetigt aber mehr Platz.
|
||||||
|
|
||||||
|
-f Erzeugt Code, bei dem "Output"- und "Input"-Files
|
||||||
|
gewoehnlich die gleiche Zeilennummer haben, um die C-
|
||||||
|
Diagnose-Mitteilungen leichter interpretieren zu ko-
|
||||||
|
ennen. Manchmal muss EQL versuchen, Anfragen in mehrere
|
||||||
|
Zeilen zu zerlegen, um einen Zeilenueberlauf des C-
|
||||||
|
Praeprozessors zu vermeiden. Dann verschiebt es C-Code
|
||||||
|
einige Zeilen nach vorn. Mit der -f Flagspezifikation
|
||||||
|
erfolgt das nicht. C-Code steht in der richtigen Zeile
|
||||||
|
und Reihenfolge. Entsprechend kann die Zeile des
|
||||||
|
Quellcodes mit der Zeile der C-Diagnose uebereinstim-
|
||||||
|
men.
|
||||||
|
|
||||||
|
-r Setzt Flags auf Standardwerte zurueck. Das wird
|
||||||
|
verwendet, um andere Flags fuer Files aus der Argument-
|
||||||
|
liste zu unterdruecken.
|
||||||
|
|
||||||
|
Die Ausgabe-Files koennen dann mittels des C-Compilers uebersetzt
|
||||||
|
werden:
|
||||||
|
|
||||||
|
cc file1.c file2.c ... -lq
|
||||||
|
|
||||||
|
Die Schreibweise -lq fordert die EQL-Laufzeit-Bibliothek an.
|
||||||
|
|
||||||
|
Die Bibliothek libq.a muss zur Angabe der Option -lq in
|
||||||
|
/lib/libq.a oder /usr/lib/libq.a vorhanden sein, d.h. sie muss
|
||||||
|
bei der Installation aus
|
||||||
|
|
||||||
|
/.../daba/lib/libq.a
|
||||||
|
dorthin kopiert werden.
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
IQLI(DABA) DABA16 IQLI(DABA)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
IQLI - Interaktives QL-Interface von DABA
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Das interaktive QL-Interface (IQL) von DABA ist nach dem
|
||||||
|
Aufruf von iql (iql(mutos)) verfuegbar.
|
||||||
|
|
||||||
|
In IQL stehen die Datenbanksprache QL, die Terminal-
|
||||||
|
Monitor-Kommando-Unterstuetzung und die Makro-Unterstuetzung
|
||||||
|
bereit.
|
||||||
|
|
||||||
|
Die Sprache QL wird durch das DBBS, die Terminal-Monitor-
|
||||||
|
Kommandos und die Makros werden durch den Terminal-Monitor
|
||||||
|
realisiert.
|
||||||
|
|
||||||
|
Fuer eine Einarbeitung ist zu empfehlen, sich zuerst mit den
|
||||||
|
Terminal-Monitor-Kommandos und der QL-Sprache zu beschaefti-
|
||||||
|
gen.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
ql(iql), monitor(iql), macros(iql), iql(mutos)
|
||||||
|
|
@ -0,0 +1,614 @@
|
||||||
|
MONITOR(IQL) DABA16 MONITOR(IQL)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
monitor - interaktiver Terminal-Monitor
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Der Terminal-Monitor realisiert zusammen mit dem DBBS das
|
||||||
|
interaktive Interface (Nutzeroberflaeche) IQL von DABA.
|
||||||
|
|
||||||
|
Der Monitor stellt einen Monitor-Puffer, die Terminal-
|
||||||
|
Monitor-Kommando-Unterstuetzung und die Makrounterstuetzung
|
||||||
|
(Makroprozessor) (macros(iql)) nach seinem Start bereit.
|
||||||
|
Die von der Monitor-Kommando-Unterstuetzung verarbeiteten
|
||||||
|
Monitor-Kommandos erlauben u.a. in Zusammenarbeit mit einem
|
||||||
|
Editor und dem Makro-Prozessor die Manipulation des Inhaltes
|
||||||
|
des Monitor-Puffers. Dieser manipulierte Inhalt wird dem
|
||||||
|
DBBS als QL-Anfragenstapel uebergeben und von diesem ver-
|
||||||
|
arbeitet. Ausserdem gestatten die Kommandos einen vorueber-
|
||||||
|
gehenden Wechsel der interaktiven Umgebung (Shell bzw. Edi-
|
||||||
|
tor).
|
||||||
|
|
||||||
|
Die Monitor-Kommandos gestatten in vom Nutzer vorgefertigten
|
||||||
|
Kommandofiles (Monitor-Programme als Include-Files) eine Ab-
|
||||||
|
laufsteuerung. Diese Files (aber auch Terminal-Eingaben) ko-
|
||||||
|
ennen Monitor-Kommandos, Makro-Anweisungen und als wichtig-
|
||||||
|
ste QL-Anweisungen (bzw. Text, aus dem mittels Makro-
|
||||||
|
Substitution QL-Anweisungen erzeugt werden) enthalten.
|
||||||
|
|
||||||
|
Zusammenstellung der Monitor-Kommandos
|
||||||
|
|
||||||
|
Der Monitor-Puffer kann mit Monitor-Kommandos:
|
||||||
|
|
||||||
|
- geloescht (\reset, \r),
|
||||||
|
- editiert (Aufruf eines Editors) (\editor, \edit, \ed,
|
||||||
|
\e),
|
||||||
|
- angezeigt (\list, \l oder \print, \p),
|
||||||
|
- durch Terminal-Eingaben ersetzt (Eingabe nach \go
|
||||||
|
und Autoloeschfunktion "ein")
|
||||||
|
oder ergaenzt (Eingabe nach \append, \a oder \e, \l
|
||||||
|
bzw. \p),
|
||||||
|
- durch den Inhalt eines MUTOS-File ersetzt (\include,
|
||||||
|
\read, \i)
|
||||||
|
oder ergaenzt (\include, \read, \i nach \a, \l bzw.
|
||||||
|
\p) bzw.
|
||||||
|
- in ein MUTOS-File geschrieben (\write, \w)
|
||||||
|
|
||||||
|
werden.
|
||||||
|
|
||||||
|
Ausserdem gibt es Monitor-Kommandos fuer:
|
||||||
|
|
||||||
|
- die Flucht in eine MUTOS-Shell (\shell, \sh, \s),
|
||||||
|
- den Ausgang aus DABA (\quit, \q),
|
||||||
|
- die Verarbeitung eines sich im Puffer befindlichen
|
||||||
|
Monitor-Makros durch den Makroprozessor (\eval, \v),
|
||||||
|
- das Anzeigen von Uhrzeit und Datum (\date, \time, \d),
|
||||||
|
- das Anzeigen von Komponentenbeschreibungen des Handbuches
|
||||||
|
in Lang- oder Kurzform (\H bzw. \h),
|
||||||
|
- das Aendern des Arbeits-Directory (\chdir, \cd),
|
||||||
|
- das Setzen von Sprungmarken (\mark, \k),
|
||||||
|
- das Verzweigen zu einer Sprungmarke (\branch, \b)
|
||||||
|
(bedingt oder unbedingt),
|
||||||
|
- die Uebergabe des Inhaltes des Monitor-Puffers (QL-
|
||||||
|
Anfragenstapel) zur Verarbeitung durch das DBBS (\go, \g)
|
||||||
|
- und zur Aenderung des Kommandokennzeichens (\monitor, \m).
|
||||||
|
|
||||||
|
|
||||||
|
Nachrichten und Eingabe-Aufforderungen (Prompts)
|
||||||
|
|
||||||
|
Um den Nutzer ueber den Status des Monitors und des Anfragenpuf-
|
||||||
|
fers zu informieren, gibt der Terminal-Monitor verschiedene Nach-
|
||||||
|
richten aus.
|
||||||
|
|
||||||
|
Wenn DABA bereit ist, Eingaben zu akzeptieren, wird die Nachricht
|
||||||
|
"DABA>" angezeigt. Das bedeutet, dass der Anfragenpuffer leer
|
||||||
|
ist.
|
||||||
|
|
||||||
|
Die Nachricht "DABA:" erscheint, wenn der Anfragenpuffer nicht
|
||||||
|
leer ist.
|
||||||
|
|
||||||
|
In jedem Falle wird der Nutzer durch einen Stern "*" (Prompt) auf
|
||||||
|
der naechsten Zeile zur Eingabe aufgefordert.
|
||||||
|
|
||||||
|
Die Ausgaben "DABA>" bzw. "DABA:" und "*" werden bei einer "-s"-
|
||||||
|
Option unterdrueckt.
|
||||||
|
|
||||||
|
Der Monitor schreibt den Eingabetext in den Monitor-Puffer, je
|
||||||
|
nach eingestelltem Terminalmodus entweder sofort (cbreak-Modus)
|
||||||
|
oder erst nach <nl> (echo-Modus), dann sind Korrekturen vor <nl>
|
||||||
|
mit <kill> oder <erase> moeglich.
|
||||||
|
Bei der Eingabe werden alle Zeichen mit Ausnahme von <tab>, <nl>
|
||||||
|
und <escape>, die kleiner als oktal 040 sind, in Blanks konver-
|
||||||
|
tiert, wobei die Warnung:
|
||||||
|
|
||||||
|
Zeichen 0xx konvertiert in Blank
|
||||||
|
|
||||||
|
erscheint.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Nachdem die Eingabe in den Monitor-Puffer uebernommen wurde, kann
|
||||||
|
sie dort nur noch durch \edit editiert oder der gesamte Puffer
|
||||||
|
durch \reset geloescht werden.
|
||||||
|
|
||||||
|
Bei der Uebernahme der Eingabe in den Monitor-Puffer filtert der
|
||||||
|
Terminal-Monitor die Monitor-Kommandos aus und fuehrt diese so-
|
||||||
|
fort aus.
|
||||||
|
|
||||||
|
Das Monitor-Kommando \go (oder \g) uebergibt den Inhalt des
|
||||||
|
Monitor-Puffers an den Parser des DBBS, der die QL-Anweisungen
|
||||||
|
analysiert und zur Ausfuehrung weitergibt. Bei einer Bearbeitung
|
||||||
|
der Anfrage (bzw. Anfragenstapels) erscheint die Meldung:
|
||||||
|
|
||||||
|
DABA . . .
|
||||||
|
|
||||||
|
(nicht bei "-s"-Flag), wodurch signalisiert wird, dass der Moni-
|
||||||
|
tor auf die Beantwortung der Anfrage wartet.
|
||||||
|
|
||||||
|
Wird ein \edit- oder ein \shell-Kommando spezifiziert, erscheint
|
||||||
|
die Nachricht:
|
||||||
|
|
||||||
|
>>"Aufrufparameter"
|
||||||
|
|
||||||
|
So ergeben z.B. die Eingaben "\ed", "\sh" und "\sh ls -l die
|
||||||
|
Nachrichten ">>/bin/ed", ">>sh" und ">>ls -l". Im interaktiven
|
||||||
|
Modus des Editors (Eingabe: "\edit") bzw. der Shell (Eingabe:
|
||||||
|
"\sh") erscheinen anschliessend die Standard-Prompts dieser Pro-
|
||||||
|
gramme.
|
||||||
|
|
||||||
|
Nach einem \go-Monitor-Kommando (oder \eval) wird der Anfragen-
|
||||||
|
puffer standardmaessig (Autoloeschfunktion "ein") zur Loeschung
|
||||||
|
vorgemerkt. Wenn unmittelbar anschliessend eine andere Anfrage
|
||||||
|
eingegeben wird, erfolgt das Loeschen des Puffers. Es erfolgt
|
||||||
|
nicht, wenn unmittelbar nach der Bearbeitung des Anfragenstapels
|
||||||
|
(\go) bzw. nach \eval die Vormerkung zum Loeschen durch die Kom-
|
||||||
|
mandos \append, \print, \list oder \edit aufgehoben wurde.
|
||||||
|
|
||||||
|
Nach der Eingabe:
|
||||||
|
help teile
|
||||||
|
\go
|
||||||
|
print teile
|
||||||
|
enthaelt der Anfragenpuffer:
|
||||||
|
print teile
|
||||||
|
Die Eingabe :
|
||||||
|
help teile
|
||||||
|
\go
|
||||||
|
\print
|
||||||
|
print teile
|
||||||
|
ergibt als Inhalt des Anfragenpuffer :
|
||||||
|
help teile
|
||||||
|
print teile
|
||||||
|
|
||||||
|
Ist die Autoloeschfunktion ausgeschaltet ("aus"), wird jede neue
|
||||||
|
Anfrage an den Inhalt des Monitor-Puffers angehangen, sodass vor
|
||||||
|
einer Neueingabe der Puffer stets explizit mit dem \reset-
|
||||||
|
Kommando zu loeschen ist.
|
||||||
|
|
||||||
|
Monitor-Kommandos
|
||||||
|
|
||||||
|
Ein Monitor-Kommando besteht aus dem Kommandopraefix (Standard:
|
||||||
|
\), dem Namen des Monitor-Kommandos und wahlweisen Parametern als
|
||||||
|
Argument des Kommandos. Zwischen diesen Bestandteilen sind als
|
||||||
|
Trennzeichen entweder Leerzeichen oder Tabulatorzeichen erlaubt
|
||||||
|
(nach Kommandopraefix) bzw. notwendig (ansonsten).
|
||||||
|
|
||||||
|
Einige Terminal-Monitor-Kommandos enthalten nach dem Kommandona-
|
||||||
|
men bis zum Zeilenende ein Argument (u.U. aus mehreren Woertern)
|
||||||
|
(z.B. Filenamen). Diese Kommandos duerfen auf der Zeile kein
|
||||||
|
weiteres Kommando beinhalten. Die maximale ausgewertete Laenge
|
||||||
|
des Argumentes dieser Kommandos betraegt 100 Byte. Es ist zu be-
|
||||||
|
achten, dass das Argument dieser Kommandos ueber den Makro-
|
||||||
|
Prozessor ausgewertet wird!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Kommandos ohne Parameter koennen auf der Zeile aneinandergereiht
|
||||||
|
werden.
|
||||||
|
|
||||||
|
Durch
|
||||||
|
\date\go\date
|
||||||
|
wird die Zeit vor und nach der Ausfuehrung des Inhaltes des An-
|
||||||
|
fragenpuffers angezeigt.
|
||||||
|
Nachfolgend werden die Kommandos im Detail beschrieben, wobei al-
|
||||||
|
le Kommandos keinen Parameter haben duerfen, bei denen er in der
|
||||||
|
Erlaeuterung nicht erwaehnt wird.
|
||||||
|
|
||||||
|
\h
|
||||||
|
\help Anzeige einer Komponenten-Kurzbeschreibung (Name als
|
||||||
|
Parameter) bzw. der Kurzfassung des Inhaltsver-
|
||||||
|
zeichnisses der Komponenten (ohne Parameter).
|
||||||
|
|
||||||
|
\H
|
||||||
|
\HELP Anzeige einer Komponentenbeschreibung (Name als Para-
|
||||||
|
meter) bzw. des Inhaltsverzeichnisses der Kompo-
|
||||||
|
nenten (ohne Parameter).
|
||||||
|
|
||||||
|
\m
|
||||||
|
\monitor Ersetzen des \-Zeichens (Monitor-Kommandopraefix)
|
||||||
|
Ein Parameter ist das neue Terminal-Monitor-
|
||||||
|
Kommandopraefix. Wenn er fehlt, wird der Standard
|
||||||
|
(\) eingestellt.
|
||||||
|
|
||||||
|
Nach einer Neudefinition des Monitor-Praefixes
|
||||||
|
sind u.U. bestehende Kommando-Files (Include-
|
||||||
|
Files) nicht mehr abarbeitbar!
|
||||||
|
|
||||||
|
\r
|
||||||
|
\reset Loeschen des Monitor-Puffers (Ruecksetzen des Anfra-
|
||||||
|
genpuffers). Danach ist der Inhalt des Anfragen-
|
||||||
|
puffers unwiederbringlich verloren.
|
||||||
|
|
||||||
|
\p
|
||||||
|
\print Anzeigen des Anfragenpuffers. Der Inhalt des Anfra-
|
||||||
|
genpuffers wird (ohne Veraenderung durch den
|
||||||
|
Makro-Prozessor) am Terminal des Nutzers ange-
|
||||||
|
zeigt.
|
||||||
|
|
||||||
|
\l
|
||||||
|
\list Anzeigen des aktuellen Anfragenstapels, nach der
|
||||||
|
Makro-Verarbeitung. Nebeneffekte bei der Arbeit
|
||||||
|
des Makro-Prozessors, wie z.B. die Makro-
|
||||||
|
Definition, werden ausgefuehrt. Dem Makroprozes-
|
||||||
|
sor wird der Inhalt des Monitor-Puffers ueberge-
|
||||||
|
ben, dem der Makro {begintrap} vorangestellt und
|
||||||
|
der Makro {endtrap} nachgestellt werden. Damit
|
||||||
|
wird dem Nutzer angezeigt, welcher Text dem Parser
|
||||||
|
des DBBS bei einem \go-Kommandos uebergeben werden
|
||||||
|
wuerde. Es ist zu beachten, dass bei wiederholter
|
||||||
|
Anwendung durch die vorherige Definition von Sub-
|
||||||
|
stitutionsmakros andere Ergebnisse auftreten ko-
|
||||||
|
ennen.
|
||||||
|
|
||||||
|
\v
|
||||||
|
\eval Der Makro-Prozessor verarbeitet den Anfragenpuffer und
|
||||||
|
ersetzt seinen Inhalt durch das Ergebnis der
|
||||||
|
Makro-Verarbeitung. Definierte Makros werden in
|
||||||
|
die Makro-Tabelle des Makro-Prozessors uebernommen
|
||||||
|
und sind damit aktiviert.
|
||||||
|
|
||||||
|
Im Unterschied zum \list-Kommando erfolgen kein
|
||||||
|
Einbeziehen der Makros {begintrap} und {endtrap}
|
||||||
|
und keine Anzeige am Terminal. Auf Standard-
|
||||||
|
Output wirkende Ausgaben der Makros {dump}, {type}
|
||||||
|
und {read...} werden ausgefuehrt.
|
||||||
|
|
||||||
|
Das \eval-Kommando ist das fuer die Abarbeitung
|
||||||
|
von Funktionsmakros zu bevorzugende Kommando.
|
||||||
|
|
||||||
|
\e
|
||||||
|
\ed
|
||||||
|
\edit
|
||||||
|
\editor Eintritt in einen der MUTOS-Text-Editoren (z.B. "ed"
|
||||||
|
als Standard-Text-Editor). Wird "ed" benutzt, ist
|
||||||
|
ein "w"- gefolgt von einem "q"-ed-Kommando ein-
|
||||||
|
zugeben, um die Steuerung an DABA zurueckzugeben.
|
||||||
|
Wird ein File-Name als Parameter spezifiziert, er-
|
||||||
|
folgt ein Aufruf zum Editieren dieses File und
|
||||||
|
nicht der Aufruf eines anderen Editors!
|
||||||
|
Wurde in einem der Start-Files der Makro
|
||||||
|
"{editor}" definiert, wird er benutzt, um den
|
||||||
|
Pfadnamen eines spezifizierten Editors (z.B. "vi"
|
||||||
|
oder "em") einzugeben. Standardmaessig (ohne
|
||||||
|
"{editor}"-Makro) wird als Pfadname "/bin/ed" be-
|
||||||
|
nutzt.
|
||||||
|
|
||||||
|
Innnerhalb des Editors darf kein "e"-
|
||||||
|
Kommandoaufruf erfolgen. Wenn er irrtuemlich doch
|
||||||
|
erfolgte, geht der Name des Anfragenpuffers ver-
|
||||||
|
loren.
|
||||||
|
|
||||||
|
\g
|
||||||
|
\go Verarbeitet die aktuelle Anfrage (Anfragenstapel). Der
|
||||||
|
Inhalt des Puffers wird vom Makro-Prozessor ver-
|
||||||
|
arbeitet, DABA uebergeben und ausgefuehrt. Bei
|
||||||
|
den tupelorientierten QL-Anweisungen "retrieve",
|
||||||
|
"replace", "append" und "delete" wird der Makro
|
||||||
|
{tuplecount} mit der Anzahl der bearbeiteten Tupel
|
||||||
|
definiert (an den Nutzer zurueckgegeben). Dem
|
||||||
|
Parser wird vom Makro-Prozessor der Inhalt des Mo-
|
||||||
|
nitorpuffers uebergeben, dem der Makro {begintrap}
|
||||||
|
voran und der Makro {endtrap} nachgestellt werden.
|
||||||
|
Es ist darauf zu achten, dass nach der Verarbei-
|
||||||
|
tung durch den Makro-Prozessor, dem DBBS aus-
|
||||||
|
schliesslich QL-Anweisungen uebergeben werden
|
||||||
|
(u.U. Bereinigen des Puffers).
|
||||||
|
|
||||||
|
\a
|
||||||
|
\append Anfuegen der folgenden Eingaben an den Anfragenpuf-
|
||||||
|
fer. Nach Eingabe eines \a wird die automatische
|
||||||
|
Loeschunterstuetzung des Anfragenpuffers (falls
|
||||||
|
sie "ein" war) ausgeschaltet und damit der Anfra-
|
||||||
|
genpuffer nicht zurueckgesetzt (kein reset).
|
||||||
|
|
||||||
|
\d
|
||||||
|
\time
|
||||||
|
\date Anzeigen der aktuellen Tageszeit und des Datums.
|
||||||
|
|
||||||
|
\s
|
||||||
|
\sh
|
||||||
|
\shell Flucht in eine MUTOS-Shell. Wurde der {shell}-Makro
|
||||||
|
definiert, wird dieses Shell-Programm zur aktiven
|
||||||
|
Shell. Wenn nicht, wird "/bin/sh" aktiv.
|
||||||
|
|
||||||
|
Der Aufruf des \shell-Monitor-Kommandos kann mit
|
||||||
|
oder ohne Parameter erfolgen.
|
||||||
|
|
||||||
|
Ein Aufruf ohne Parameter startet die Shell inter-
|
||||||
|
aktiv. Danach kann wie unter einer normalen, dem
|
||||||
|
Terminal zugeordneten Shell gearbeitet werden, bis
|
||||||
|
diese entsprechend den Konventionen (z.B.
|
||||||
|
Control-z oder Control-d ) verlassen wird und eine
|
||||||
|
Rueckkehr zum Monitor erfolgt.
|
||||||
|
|
||||||
|
Sind Parameter spezifiziert, werden diese als Auf-
|
||||||
|
ruf eines einzigen MUTOS-Programmes (1.Parameter
|
||||||
|
ist der Shell-Kommandoname (Filename des auszu-
|
||||||
|
fuehrendes Files), die weiteren Parameter sind die
|
||||||
|
dem Kommando zu uebergebenden Parameter) verstan-
|
||||||
|
den, das unter Steuerung der aktiven Shell abzu-
|
||||||
|
arbeiten ist. Anschliessend erfolgt automatisch
|
||||||
|
die Rueckkehr zum Monitor. Wenn z.B. "\shell ls
|
||||||
|
-l" spezifiziert wird, erfolgt die Anzeige des In-
|
||||||
|
haltes des Arbeits-Directory in der Langform und
|
||||||
|
anschliessend sofort die Rueckkehr zum Terminal-
|
||||||
|
Monitor.
|
||||||
|
|
||||||
|
\q
|
||||||
|
\quit Ausgang aus DABA (Verlassen des IQL-Interfaces).
|
||||||
|
|
||||||
|
\cd
|
||||||
|
\chdir Aendern des Arbeits-Directory fuer den Monitor in ein
|
||||||
|
benanntes Directory (Parameter).
|
||||||
|
|
||||||
|
\i
|
||||||
|
\include
|
||||||
|
\read Umschalten der Eingabe auf ein benanntes File (Parame-
|
||||||
|
ter). Backslash-Zeichen im File (Include-File)
|
||||||
|
werden wie bei der Eingabe vom Terminal behandelt.
|
||||||
|
|
||||||
|
Ohne Parameter wird die entsprechende Programmebe-
|
||||||
|
ne verlassen. In der Basis-Terminal-Ebene ent-
|
||||||
|
spricht die Wirkung dem \quit-Kommando.
|
||||||
|
|
||||||
|
Die maximale Schachtelungstiefe ist 5 (generie-
|
||||||
|
rungsabhaengig).
|
||||||
|
|
||||||
|
Ist in einem Include-File ein \read-Kommando mit
|
||||||
|
dem Zeichen "-" spezifiziert erfolgt die Meldung
|
||||||
|
"<Eingabe>" und zwischenzeitlich (bis <EOF>) ist
|
||||||
|
das Terminal die Eingabe. Anschliessend wird die
|
||||||
|
Eingabe aus dem Include-File fortgesetzt.
|
||||||
|
|
||||||
|
|
||||||
|
\w
|
||||||
|
\write Schreiben des Inhaltes des Anfragenpuffers in ein be-
|
||||||
|
nanntes File (Parameter). Der File-Modus eines
|
||||||
|
neu erstellten Files ist oktal "0644".
|
||||||
|
|
||||||
|
\b
|
||||||
|
\branch Springen (Verzweigen der Steuerung) bedingt (Frage-
|
||||||
|
zeichen, Ausdruck und Marke als Parameter) oder
|
||||||
|
unbedingt (Marke als Parameter) innerhalb eines
|
||||||
|
Include-File (s.a. Abschnitt "Springen").
|
||||||
|
|
||||||
|
\k
|
||||||
|
\mark Setzen einer Sprungmarke (Parameter). Diese ist die
|
||||||
|
Zielangabe eines auszufuehrenden \branch-
|
||||||
|
Kommandos.
|
||||||
|
|
||||||
|
\<irgendein anderes Zeichen>
|
||||||
|
Ignoriert irgendeine spezielle Bedeutung des nach-
|
||||||
|
folgenden Zeichens. Das erlaubt, das "\" als li-
|
||||||
|
terales Zeichen einzugeben (ql(iql). Es ist wich-
|
||||||
|
tig zu bemerken, dass Backslash-Folgen manchmal
|
||||||
|
durch den Makro-Prozessors verloren gehen. Des-
|
||||||
|
halb sind zwei Backslash zu schreiben, wenn einer
|
||||||
|
zu senden ist.
|
||||||
|
|
||||||
|
Makros
|
||||||
|
|
||||||
|
Eine ganaue Beschreibung der Makros ist in (macros(iql)) zu
|
||||||
|
finden.
|
||||||
|
|
||||||
|
Springen
|
||||||
|
|
||||||
|
Die \branch und \mark Kommandos erlauben ein beliebiges
|
||||||
|
Springen innerhalb eines Include-File. Dem \mark Kommando
|
||||||
|
muss eine Marke folgen. Dem \branch kann eine Marke folgen
|
||||||
|
(entspricht einem unbedingten Sprung), oder es folgt ein
|
||||||
|
Ausdruck, dem ein Fragezeichen ("?") vorangeht und eine Mar-
|
||||||
|
ke folgt (bedingter Sprung). Der Sprung wird ausgefuehrt,
|
||||||
|
wenn der Ausdruck groesser als Null ist.
|
||||||
|
|
||||||
|
Das Kommando :
|
||||||
|
|
||||||
|
\branch ?{tuplecount}<=0 notups
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
verzweigt zur Marke "notups", wenn der Makro "{tuplecount}"
|
||||||
|
kleiner oder gleich Null ist (keine relevanten Tupel).
|
||||||
|
|
||||||
|
Die Ausdruecke, die im \branch spezifizierbar sind, haben
|
||||||
|
folgende Einschraenkungen.
|
||||||
|
|
||||||
|
Die Operatoren +, -, *, /, <=, >=, <, >, =, and != sind, wie
|
||||||
|
ueblich definiert. Der linke, einstellige Operator "!" kann
|
||||||
|
fuer eine logische Negation benutzt werden. Leerzeichen
|
||||||
|
(Blanks) innerhalb des Ausdruckes sind nicht erlaubt, da ein
|
||||||
|
Leerzeichen den Ausdruck beendet. Folgende Besonderheiten
|
||||||
|
sind zu beachten:
|
||||||
|
|
||||||
|
- Ueberfluessige Endklammern werden ignoriert.
|
||||||
|
|
||||||
|
- Ueberfluessige Anfangsklammern ergeben Null aus
|
||||||
|
Ausdruckswert.
|
||||||
|
|
||||||
|
- Ein leerer Ausdruck bekommt den Wert Null.
|
||||||
|
|
||||||
|
- Nur ein nicht akzeptiertes Zeichen als Ausdruck hat den
|
||||||
|
Wert Null.
|
||||||
|
|
||||||
|
- Der Wert eines Zeichens, dass kein Operator ist wird Null.
|
||||||
|
|
||||||
|
- Die Division durch Null ergibt den Wert Null.
|
||||||
|
|
||||||
|
|
||||||
|
Wenn das \branch-Kommando als Eingabetext vom Terminal ge-
|
||||||
|
geben wurde, wird das abgelehnt ("Kein Sprung am Terminal").
|
||||||
|
|
||||||
|
Aus einem Include-File wird zuerst ein vorhandener Ausdruck
|
||||||
|
ausgewertet und bei einem Wert groeser Null ein Sprung ver-
|
||||||
|
sucht.
|
||||||
|
|
||||||
|
Wird eine Marke gefunden, wird mit der dieser Marke folgen-
|
||||||
|
den Textposition die Eingabe des Textes fortgesetzt.
|
||||||
|
|
||||||
|
Ist keine Marke gefunden worden, wird, falls der Makro {de-
|
||||||
|
fault} definiert wurde, zu dieser dort definierten Marke ge-
|
||||||
|
sprungen.
|
||||||
|
|
||||||
|
Andernfalls wird eine Meldung ausgegeben ("? Label ...").
|
||||||
|
|
||||||
|
IQL-Start
|
||||||
|
|
||||||
|
Beim IQL-Start (iql(mutos)) wird zuerst eine bei allen
|
||||||
|
DABA-MUTOS-Kommandos ausgefuehrte Startprozedur durchlaufen.
|
||||||
|
Dabei wird auf das MUTOS-File /etc/passwd zugegriffen und
|
||||||
|
der Eintrag des Nutzers "daba" gelesen. Aus diesem Eintrag
|
||||||
|
wird der Pfadname des Home-Directory gemerkt. Mit diesem
|
||||||
|
Pfadnamen (durch .../ gekennzeichnet) sind alle nachfolgen-
|
||||||
|
den DABA-Files lokalisierbar. Mit dem Nutzercode des auf-
|
||||||
|
rufenden Nutzers wird im File .../sys/etc/users ein Nutzer-
|
||||||
|
eintrag gelesen. Ist ein solcher nicht vorhanden, ist der
|
||||||
|
Nutzer nicht autorisiert DABA anzuwenden. Aus dem Nutzer-
|
||||||
|
eintrag wird ermittelt, ob der Nutzer berechtigt ist, die
|
||||||
|
spezifizierte Datenbank zu nutzen. Wenn ja, erfolgt eine
|
||||||
|
Pruefung auf das Vorhandensein dieser Datenbank. Anschlies-
|
||||||
|
send werden die spezifizierten Optionen (Flags) auf Gueltig-
|
||||||
|
keit geprueft. Danach erfolgt entsprechend der Prozessta-
|
||||||
|
belle im vorliegenden Falle das Laden des DBBS und des
|
||||||
|
Terminal-Monitor-Programmes.
|
||||||
|
|
||||||
|
Initialisierung
|
||||||
|
|
||||||
|
Nach Ablauf der allgemeinen Startprozedur steht das DBBS zur
|
||||||
|
Arbeit bereit, und es beginnt eine Startprozedur des
|
||||||
|
Terminal-Monitors (Initialisierung), bevor dieser seinen Ar-
|
||||||
|
beitszyklus beginnt.
|
||||||
|
|
||||||
|
Erstens werden vom Monitor-Programm die Makros {pathname},
|
||||||
|
{usercode}, {database} und {tuplecount} (macros(iql)) defi-
|
||||||
|
niert, sodass sie fuer die Nutzung bereitstehen.
|
||||||
|
|
||||||
|
Zweitens wird das allgemeine Initialisierungs- oder Start-
|
||||||
|
File (startup(files)) gelesen und verarbeitet. Dieses File
|
||||||
|
ist vorgesehen, um z.B. mittels Makrodefinitionen den fuer
|
||||||
|
alle Nutzer anwendbaren Standard-Editor und die Standard-
|
||||||
|
Shell zu definieren.
|
||||||
|
|
||||||
|
Ist im Nutzereintrag des Files "users" (users(files)) ein
|
||||||
|
nutzerspezifisches Start-File (Standard-Filename: ".ql")
|
||||||
|
spezifiziert, wird drittens dieses gelesen und verarbeitet.
|
||||||
|
Diese File kann die speziellen Spezifikationen des Nutzers
|
||||||
|
enthalten. So kann z.B. in diesem File ein nutzerspezifi-
|
||||||
|
scher Editor bzw. eine Shell definiert werden. Es ist aber
|
||||||
|
auch moeglich, mit den Spezifikationen vorbereitende nut-
|
||||||
|
zerspezifische Arbeiten auszufuehren.
|
||||||
|
|
||||||
|
Am Ende der Initialisierung wird die Steuerung standardma-
|
||||||
|
essig an das Nutzerterminal uebergeben.
|
||||||
|
|
||||||
|
Flags
|
||||||
|
|
||||||
|
Die Arbeitsweise des Terminal-Monitors wird durch folgende
|
||||||
|
Optionen (Flags) beim Aufruf des interaktiven Interface IQL
|
||||||
|
(iql(mutos)) gesteuert:
|
||||||
|
|
||||||
|
-d Anzeige (keine Anzeige) des Inhaltes des "dayfile" (day-
|
||||||
|
file(files)) (Standard: Anzeige).
|
||||||
|
-s Anzeige (keine Anzeige, "schweigendes Arbeiten") von
|
||||||
|
Monitor-Nachrichten (Standard: Anzeige). Das -s
|
||||||
|
Flag unterdrueckt alle Nachrichten (ausser Fehler-
|
||||||
|
nachrichten) des Monitors, einschliesslich der
|
||||||
|
Login- und Logout-Nachrichten sowie die Ausgabe
|
||||||
|
des "dayfile"-Inhaltes (entspricht -d Flag "ein")
|
||||||
|
und die Ausgabe der Eingabeaufforderungen
|
||||||
|
(Prompts).
|
||||||
|
-/+a Autoloeschfunktion (automatisches Loeschen des
|
||||||
|
Terminal-Monitorpuffers) "aus" ("ein") (Standard:
|
||||||
|
"ein"). Das -a Flag unterdrueckt die automatische
|
||||||
|
Loeschfunktion (nach \go bzw. \eval), sodass der
|
||||||
|
Anfragenpuffer nicht automatisch geloescht wird.
|
||||||
|
Die Wirkung ist so, als wuerde stets ein \append
|
||||||
|
nach jedem \go eingegeben werden.
|
||||||
|
|
||||||
|
Fuer den Nutzer bedeutet dies, dass vor jeder neu
|
||||||
|
eingegebenen Anfrage der Anfragenpuffer explizit
|
||||||
|
durch \reset geloescht werden muss.
|
||||||
|
|
||||||
|
Das -I Flag gestattet, zum IQL-Start ein Include-File einzuzie-
|
||||||
|
hen. Wurde das -I Flag mit einem Filenamen spezifiziert, wird
|
||||||
|
dieses File abgearbeitet, Standard-Input bleibt aber dem Terminal
|
||||||
|
zugeordnet.
|
||||||
|
|
||||||
|
Standardmaessig arbeitet der Terminal-Monitor in der Basis-
|
||||||
|
Terminal-Ebene (Eingaben von Standard-Input). Wenn ein Include-
|
||||||
|
File eingezogen wurde, erfolgt die Arbeit des Terminal-Monitors
|
||||||
|
durch das Include-File gesteuert, und das File ist die Quelle des
|
||||||
|
Eingabetextes. Werden aus dem Include-File neue Include-Files
|
||||||
|
eingezogen, kann das als neue Programmebene betrachtet werden.
|
||||||
|
Der Ruecksprung in die uebergeordnete Programmebene erfolgt durch
|
||||||
|
ein "include" ohne Operanden.
|
||||||
|
|
||||||
|
Erfolgte eine Fileumlenkung (Standard-Input einem File zugeord-
|
||||||
|
net), werden alle Eingaben aus diesem File erwartet.
|
||||||
|
|
||||||
|
Die Ausgaben des Monitors erfolgen stets auf Standard-Output
|
||||||
|
(i.allg. dem Terminal zugeordnet). Die Eingaben der Funktions-
|
||||||
|
makros {read} und {readdefine} (macros(iql)) werden in allen Pro-
|
||||||
|
grammebenen von Standard-Input erwartet.
|
||||||
|
|
||||||
|
Unterbrechungen
|
||||||
|
|
||||||
|
Wenn der Terminal-Monitor auf das Ende der Bearbeitung einer An-
|
||||||
|
frage durch das DBBS wartet, besteht die Moeglichkeit, die Arbeit
|
||||||
|
des DBBS durch ein Unterbrechungssignal (Control-c) zu unterbre-
|
||||||
|
chen, um die Steuerung dem Monitor zuruueckzugeben. Achtung, bei
|
||||||
|
der Bearbeitung von QL-Anweisungen, die die Datenbank veraendern,
|
||||||
|
ist eine Unterbrechung nicht angebracht (obwohl das DBBS fuer
|
||||||
|
"normale" Unterbrechungen nicht unterbrechbar ist)!
|
||||||
|
|
||||||
|
Eine Unterbrechung waehrend der Arbeit mit einem Include-File
|
||||||
|
fuehrt zur Rueckkehr in die Basis-Terminal-Ebene.
|
||||||
|
|
||||||
|
Ein <EOF> in einer unter der Basis-Terminal-Ebene liegenden Pro-
|
||||||
|
grammebene fuehrt zur Rueckkehr in die darueber liegenden Pro-
|
||||||
|
grammebene. Ein <EOF> in der Basis-Terminal-Ebene entspricht dem
|
||||||
|
\quit-Kommando.
|
||||||
|
|
||||||
|
Fehler
|
||||||
|
|
||||||
|
Die Kommandos \edit und \shell erfordern das Erzeugen eines neuen
|
||||||
|
Prozesses (Betriebssystem-Kommandos "fork" und "exec") . Gelingt
|
||||||
|
das nicht, erfolgen die Fehlermeldungen "edit: fork" bzw.
|
||||||
|
"shell: fork". Gelingt es nicht, die in den Makros {editor} bzw.
|
||||||
|
{shell} spezifizierten Programme zu laden, wird der Makro {error-
|
||||||
|
cout} auf den Wert -1 gesetzt und der Makro {exectrap} ausge-
|
||||||
|
fuehrt. Als Ergebnis werden die Fehlermeldungen "edit: exec"
|
||||||
|
bzw. "shell: exec" ausgegeben.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Liefern die Editor- bzw. Shell-Programme einen Rueckkehrwert ver-
|
||||||
|
schieden von Null, wird der Makro {exectrap} ausgefuehrt.
|
||||||
|
|
||||||
|
Bei einem \go-Kommando kann die Fehlermeldung "go: open 1" aus-
|
||||||
|
gegeben werden, wenn die Eroeffnung des Monitor-Puffers nicht ge-
|
||||||
|
lingt.
|
||||||
|
|
||||||
|
Bei einer ueber der maximal zugelassenen Schachtelungstiefe er-
|
||||||
|
folgenden \include-Kommando wird die Fehlermeldung "Mehr als 5
|
||||||
|
INCLUDE'S" ausgegeben.
|
||||||
|
|
||||||
|
Wurde ein \write-Kommando spezifiziert koennen die Fehlermeldun-
|
||||||
|
gen "unakzeptabler file name ..." und "create WRITE-file ..." er-
|
||||||
|
scheinen.
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
daba(mutos), macros(iql), ql(iql),
|
||||||
|
|
||||||
|
DIAGNOSE
|
||||||
|
DABA> Eine neue Anfrage kann begonnen werden.
|
||||||
|
|
||||||
|
DABA: Die vorherige Anfrage ist beendet, jedo-
|
||||||
|
ch enthaelt der Puffer einen Inhalt. Der
|
||||||
|
Monitor besitzt wieder die Steuerung.
|
||||||
|
|
||||||
|
DABA . . . Die Anfrage wird von DABA bearbeitet.
|
||||||
|
|
||||||
|
>>ed Es wird im MUTOS-Text-Editor gearbeitet.
|
||||||
|
|
||||||
|
>>sh Es wird zwischenzeitlich in der MUTOS-
|
||||||
|
Shell gearbeitet.
|
||||||
|
|
||||||
|
Zeichen 0xx konvertiert in Blank
|
||||||
|
DABA hat ein nichtdruckbares ASCII-
|
||||||
|
Zeichen (oktal 0xx) in Blank umgewan-
|
||||||
|
delt. Diese Nachricht zeigt an, dass
|
||||||
|
eine solche Konvertierung fuer das Zei-
|
||||||
|
chen (0xx) erfolgte.
|
||||||
|
FEHLERQUELLEN
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
RC(MUTOS) DABA16 RC(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
rc - REPORT-Compiler
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
rc {[ flags ] file}
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
|
||||||
|
Der Report-Compiler rc uebersetzt ein oder mehrere Report-
|
||||||
|
Quell-Files in Report-Code-Files (uebersetzte Report-
|
||||||
|
Anweisungen). Ein Report-Code-File wird zur Steuerung der
|
||||||
|
Report-Generierung mit rg verwendet.
|
||||||
|
|
||||||
|
Das Quell-File enthaelt Report-Anweisungen und wahlweise
|
||||||
|
Domaenen-Beschreibungen (z.B. durch rd (rd(mutos)) mit dem
|
||||||
|
Flag -r erstellt). Ist letzteres der Fall, wird ein
|
||||||
|
Domaenen-Beschreibungs-File erzeugt.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
|
||||||
|
-c Nur Uebersetzen, keine Codeerzeugung
|
||||||
|
-i Eingabe von Standard-Input
|
||||||
|
-l automatische Umwandlung der Klein- in Grossbuchstaben
|
||||||
|
-o Ausgabe des Report-Code-Files r_code
|
||||||
|
-s Unterdrueckung des Uebersetzungsprotokolls
|
||||||
|
-v Ausgabe des Uebersetzungsprotokolls
|
||||||
|
|
||||||
|
BEISPIELE
|
||||||
|
/* Uebersetze das Quell-File "pers_r" und
|
||||||
|
erzeuge das Report-Code-File "r_code" */
|
||||||
|
rc -o pers_r
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
rp_desc(mutos), rg(mutos), rd(mutos), report(mutos),
|
||||||
|
report(daba)
|
||||||
|
|
||||||
|
|
||||||
|
DIAGNOSE
|
||||||
|
Im Laufzeitprotokoll (auf Standard-Output) werden selbst-
|
||||||
|
erklaerende Hinweise gegeben.
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
RD(MUTOS) DABA16 RD(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
rd - Erstellen eines Domaenen-Beschreibungs-Files oder eines
|
||||||
|
Reportskelettes
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
rd [ flags ] dbname relname [file]
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
|
||||||
|
Rd erstellt ohne flags aus der Relation relname der Daten-
|
||||||
|
bank dbname ein Domaenen-Beschreibungs(Description)-File.
|
||||||
|
Fehlt der Parameter file (Ausgabe-File), wird der Name desc
|
||||||
|
gewaehlt.
|
||||||
|
|
||||||
|
Bei Spezifikation eines -r Flags wird ein Skelett eines Re-
|
||||||
|
portprogrammes erzeugt. Das ist ein Report-Quellcode-File,
|
||||||
|
das sowohl die Domaenen-Beschreibung als auch das Skelett
|
||||||
|
einiger Report-Quellcode-Anweisungen enthaelt.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
|
||||||
|
-o Ausgabe auf Standard-Output (anstelle eines Files)
|
||||||
|
-r Ausgabe eines Skelett-Reportprogramms einschliesslich der
|
||||||
|
Domaenen-Beschreibungen. Fehlt das Argument file wird
|
||||||
|
der Name report gewaehlt.
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
rc(mutos), rp_desc(mutos), rg(mutos), report(mutos),
|
||||||
|
report(daba)
|
||||||
|
|
||||||
|
BEISPIELE
|
||||||
|
rd dt personal
|
||||||
|
|
||||||
|
rd -o dt teile > teile_d
|
||||||
|
|
||||||
|
rd dt teile teile_d
|
||||||
|
|
||||||
|
/*Reportskelett*/
|
||||||
|
rd -r dt personal
|
||||||
|
|
||||||
|
rd -r dt personal pers_r
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,80 @@
|
||||||
|
RETRIEVE(QL) DABA16 RETRIEVE(QL)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
retrieve - Wiederfinden (Suchen) von Tupel aus einer Rela-
|
||||||
|
tion
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
retrieve [into relname ] (target_list) [where qual ]
|
||||||
|
|
||||||
|
retrieve unique (target_list) [where qual ]
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Retrieve stellt alle Tupel bereit, die die Qualifikation er-
|
||||||
|
fuellen und zeigt sie entweder am Terminal (Standardausgabe)
|
||||||
|
an oder speichert sie in eine neue Relation. Wurde into mit
|
||||||
|
relname nicht spezifiziert, werden doppelte Tupel nicht aus-
|
||||||
|
geblendet. Wenn relname spezifiziert wurde, wird das Ergeb-
|
||||||
|
nis der Anfrage mit diesem Namen in eine neue Relation ge-
|
||||||
|
speichert.
|
||||||
|
|
||||||
|
Eine Relation mit diesem Namen und dem Anwender als
|
||||||
|
Relations-Eigentuemer darf nicht bereits existieren. Der
|
||||||
|
retrieve Anwender wird zum Eigentuemer der neuen Relation.
|
||||||
|
Die Relation wird die Domaenen-Namen besitzen, die in der
|
||||||
|
target_list als result_attnames spezifiziert wurden. Die
|
||||||
|
neue Relation wird vom System fuer sieben Tage geschuetzt,
|
||||||
|
falls der Nutzer nicht explizit durch eine save Anweisung
|
||||||
|
das Schutzdatum der Relation verlaengert.
|
||||||
|
|
||||||
|
Wenn das Schluesselwort unique spezifiziert wird, werden die
|
||||||
|
Tupel nach der Reihenfolge der angegebenenen Domaenen sor-
|
||||||
|
tiert und doppelte Tupel vor der Anzeige entfernt.
|
||||||
|
|
||||||
|
|
||||||
|
Das Schluesselwort all kann benutzt werden, um alle Domaenen
|
||||||
|
wiederzufinden.
|
||||||
|
|
||||||
|
Wenn kein Ergebnis-Relations-Name relname spezifiziert wur-
|
||||||
|
de, wird das Ergebnis der Anfrage am Terminal angezeigt und
|
||||||
|
nicht gespeichert. Doppelte Tupel werden bei einer Anzeige
|
||||||
|
am Terminal nicht entfernt.
|
||||||
|
|
||||||
|
Das Format, in dem die Domaenen angezeigt werden, kann zum
|
||||||
|
Zeitpunkt des iql-Aufrufes definiert werden (iql(mutos)).
|
||||||
|
|
||||||
|
Wenn eine Ergebnis-Relation spezifiziert wurde, erfolgt
|
||||||
|
standardmaessig eine Modifikation der Ergebnis-Relation in
|
||||||
|
die Speicherungsstruktur "cheapsort", wobei doppelte Tupel
|
||||||
|
entfernt werden.
|
||||||
|
|
||||||
|
Wenn die Standardstruktur "cheapsort" nicht gewuenscht wird,
|
||||||
|
kann der Nutzer zum Zeitpunkt des iql-Aufrufes diese Stan-
|
||||||
|
dardannahme mit dem -r Flag ueberschreiben (iql(mutos)).
|
||||||
|
|
||||||
|
Nur der Relations-Eigentuemer und Anwender mit retrieve Be-
|
||||||
|
fugnis koennen die Anweisung nutzen.
|
||||||
|
|
||||||
|
|
||||||
|
BEISPIEL[E]
|
||||||
|
/* Finde alle Beschaeftigten, die mehr als ihr
|
||||||
|
Leiter verdienen */
|
||||||
|
|
||||||
|
range of p is personal
|
||||||
|
range of l is personal
|
||||||
|
retrieve (p.name) where p.leiter = l.name
|
||||||
|
and p.gehalt > l.gehalt
|
||||||
|
|
||||||
|
/* Finde alle Domaenen fuer Personen,
|
||||||
|
die mehr als das Durchschnittsgehalt verdienen */
|
||||||
|
|
||||||
|
retrieve into temp (p.all) where p.gehalt > avg(p.gehalt)
|
||||||
|
|
||||||
|
/* Wiederfinden der Beschaeftigtennamen, sortiert */
|
||||||
|
|
||||||
|
retrieve unique (p.name)
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
iql(mutos), modify(ql), permit(ql), ql(iql), range(ql),
|
||||||
|
save(ql)
|
||||||
|
FEHLERQUELLEN
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
RP_DESC(MUTOS) DABA16 RP_DESC(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
rp_desc - Drucken eines Domaenen-Beschreibungs-Files
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
rp_desc [desc-file]
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Der Parameter desc-file muss angegeben werden, wenn der
|
||||||
|
Standard-File-Name desc nicht zutrifft.
|
||||||
|
|
||||||
|
|
||||||
|
Rp_desc druckt ein Domaenen-Beschreibungs-File, das durch rd
|
||||||
|
(rd(mutos)) oder rc (rc(mutos)) aus einem Report-Quellcode-
|
||||||
|
File einschliesslich Domaenen-Beschreibung erzeugt wurde, in
|
||||||
|
lesbarer Form.
|
||||||
|
|
||||||
|
Dieses File enthaelt eine Tabelle, die die Beschreibung der
|
||||||
|
Domaenen eines Tupels darstellt und vom Report-Generator zur
|
||||||
|
Lokalisation der Domaenen eines Tupel benutzt wird.
|
||||||
|
|
||||||
|
In der Tabelle beschreibt jede Zeile eine Domaene. Die
|
||||||
|
Spalten enthalten die Domaenenreihenfolge (mit 1 beginnend),
|
||||||
|
den Domaenentyp, die Domaenenlaenge und die Verschiebung
|
||||||
|
(Offset, mit 0 beginnend) der Domaene vom Tupelanfang.
|
||||||
|
|
||||||
|
BEISPIELE
|
||||||
|
rp_desc pers_d
|
||||||
|
rp_desc > beispiel
|
||||||
|
cat beispiel
|
||||||
|
|
||||||
|
| field | type | len | off |
|
||||||
|
|~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~|
|
||||||
|
| | | | |
|
||||||
|
| | | | |
|
||||||
|
|~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~|
|
||||||
|
| | | | |
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
rc(mutos), rd(mutos), rg(mutos), report(mutos), report(daba)
|
||||||
|
|
@ -0,0 +1,379 @@
|
||||||
|
KOMPONENTENUEBERSICHT(DABA) DABA16 KOMPONENTENUEBERSICHT(DABA)
|
||||||
|
|
||||||
|
AMXI(DABA) - Einbettung der Datenmanipulationssprache AMX in
|
||||||
|
"C"
|
||||||
|
|
||||||
|
|
||||||
|
EQL(DABA) - Eingebettetes QL-Interface
|
||||||
|
|
||||||
|
|
||||||
|
IQLI(DABA) - Interaktives QL-Interface von DABA
|
||||||
|
|
||||||
|
|
||||||
|
REPORTI(DABA) - Reportunterstuetzung
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KOMPONENTENUEBERSICHT(IQL) DABA16 KOMPONENTENUEBERSICHT(IQL)
|
||||||
|
|
||||||
|
MACROS(IQL) - Makro-Unterstuetzung des Terminal-Monitors
|
||||||
|
|
||||||
|
|
||||||
|
MONITOR(IQL) - interaktiver Terminal-Monitor
|
||||||
|
|
||||||
|
|
||||||
|
QL(IQL) - DABA-Anfragesprache (Query Language)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KOMPONENTENUEBERSICHT(QL) DABA16 KOMPONENTENUEBERSICHT(QL)
|
||||||
|
|
||||||
|
APPEND(QL) - Anfuegen (Einfuegen) neuer Tupel an die Rela-
|
||||||
|
tion
|
||||||
|
|
||||||
|
append [to] relname (target_list) [where qual]
|
||||||
|
|
||||||
|
COPY(QL) - Kopieren von Daten zwischen Relation und MUTOS-
|
||||||
|
File
|
||||||
|
|
||||||
|
copy relname (domname = format {, domname = format })
|
||||||
|
|
||||||
|
direction "filename"
|
||||||
|
|
||||||
|
CREATE(QL) - Erstellen einer neuen Relation
|
||||||
|
|
||||||
|
create relname (domname1 = format {, domname2 = format
|
||||||
|
})
|
||||||
|
|
||||||
|
DEFINE(QL) - Definieren Sicht, Befugnisse oder Integritaets-
|
||||||
|
bedingungen
|
||||||
|
|
||||||
|
define view name (target_list) [ where qual ]
|
||||||
|
|
||||||
|
define permit oplist on tuple_variable [ (attlist) ] to
|
||||||
|
name [ at term ] [ from time to time ]
|
||||||
|
[ on day to day ] [ where qual ]
|
||||||
|
|
||||||
|
define integrity on tuple_variable is qual
|
||||||
|
|
||||||
|
DELETE(QL) - Loeschen von Tupel aus einer Relation
|
||||||
|
|
||||||
|
delete tuple_variable [where qual]
|
||||||
|
|
||||||
|
DESTROY(QL) - Zerstoeren einer bestehenden Relation
|
||||||
|
|
||||||
|
destroy relname { , relname }
|
||||||
|
|
||||||
|
destroy [ permit | integrity ] relname
|
||||||
|
[ integer { , integer } | all ]
|
||||||
|
|
||||||
|
HELP(QL) - Anzeigen von Nutzungs- oder Datenbank-
|
||||||
|
Informationen
|
||||||
|
|
||||||
|
help [ relname ] [ "[komponentenname]" ]
|
||||||
|
{, relname}{, "[komponentenname]"}
|
||||||
|
|
||||||
|
help view relname {, relname}
|
||||||
|
|
||||||
|
help permit relname {, relname}
|
||||||
|
|
||||||
|
help integrity relname {, relname}
|
||||||
|
|
||||||
|
INDEX(QL) - Erstellen eines Sekundaerindex ueber eine Rela-
|
||||||
|
tion
|
||||||
|
|
||||||
|
index on relname is indexname (domain1 { ,domain2 })
|
||||||
|
|
||||||
|
MODIFY(QL) - Modifizieren der Speicherungsstruktur einer Re-
|
||||||
|
lation
|
||||||
|
|
||||||
|
modify relname [ to storage_structure [ on key1
|
||||||
|
[ : sortorder ] { , key_n [ : sortorder ] } ]
|
||||||
|
[ where [ fillfactor = n ]
|
||||||
|
[ , minpages = n ] [ , maxpages = n ] ] ]
|
||||||
|
|
||||||
|
PERMIT(QL) - Zufuegen von Befugnissen zu einer Relation
|
||||||
|
|
||||||
|
define permit oplist on tuple_variable [ (attlist) ]
|
||||||
|
|
||||||
|
to name [ at term ] [ from time to time ]
|
||||||
|
|
||||||
|
[ on day to day ] [ where qual ]
|
||||||
|
|
||||||
|
PRINT(QL) - Drucken von Relationen
|
||||||
|
|
||||||
|
print relname {, relname}
|
||||||
|
|
||||||
|
RANGE(QL) - Deklarieren einer Variablen (Tupelvariablen) ue-
|
||||||
|
ber einer Relation
|
||||||
|
|
||||||
|
range [ [ of ] tuple_variable is relname ]
|
||||||
|
|
||||||
|
REPLACE(QL) - Ersetzen von Domaenen-Werten in einer Relation
|
||||||
|
|
||||||
|
replace tuple_variable (target_list) [where qual]
|
||||||
|
|
||||||
|
RETRIEVE(QL) - Wiederfinden (Suchen) von Tupel aus einer Re-
|
||||||
|
lation
|
||||||
|
|
||||||
|
retrieve [[into] relname ] (target_list) [where qual ]
|
||||||
|
|
||||||
|
retrieve unique (target_list) [where qual ]
|
||||||
|
|
||||||
|
SAVE(QL) - Verlaengern des Schutzdatums einer Relation
|
||||||
|
|
||||||
|
save relname until month day year
|
||||||
|
|
||||||
|
VIEW(QL) - Definieren einer Sicht (virtuellen Relation)
|
||||||
|
|
||||||
|
define view name (target_list) [ where qual ]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KOMPONENTENUEBERSICHT(MUTOS) DABA16 KOMPONENTENUEBERSICHT(MUTOS)
|
||||||
|
|
||||||
|
AMX(MUTOS) - AMX-Compiler
|
||||||
|
|
||||||
|
amx [ flags ] file.x
|
||||||
|
|
||||||
|
amxf [ flags ] file.x
|
||||||
|
|
||||||
|
samx [ flags ] file.x
|
||||||
|
|
||||||
|
oamx [ flags ] file.x
|
||||||
|
|
||||||
|
oamxf [ flags ] file.x
|
||||||
|
|
||||||
|
COPYDB(MUTOS) - Kopieren einer Datenbank
|
||||||
|
|
||||||
|
copydb [ -uname ] dbname directory { relname }
|
||||||
|
|
||||||
|
COPYR(MUTOS) - Kopieren von Daten zwischen Relation und
|
||||||
|
MUTOS-File
|
||||||
|
|
||||||
|
copyr [ flags ] dbname relname { domname format })
|
||||||
|
into/from file
|
||||||
|
|
||||||
|
CREATDB(MUTOS) - Erstellen einer Datenbank
|
||||||
|
|
||||||
|
creatdb [ -uname ] [ -e ] [ -m ] [ -/+c ]
|
||||||
|
[ -/+q ] [ -1 | -2 | -4 | -8 ] dbname
|
||||||
|
|
||||||
|
|
||||||
|
CREATER(MUTOS) - Erstellen einer neuen Relation
|
||||||
|
|
||||||
|
creater [ flags ] dbname relname { domname format }
|
||||||
|
|
||||||
|
DESTROYDB(MUTOS) - Zerstoeren einer bestehenden Datenbank
|
||||||
|
|
||||||
|
destroydb [ -s ] [ -m ] dbname
|
||||||
|
|
||||||
|
DESTROYR(MUTOS) - Zerstoeren einer bestehenden Relation
|
||||||
|
|
||||||
|
destroyr [ flags ] dbname { [ permit | integrity ] rel-
|
||||||
|
name [ integer { , integer } | all ] }
|
||||||
|
|
||||||
|
EQC(MUTOS) - Aufruf des EQL-Praecompilers
|
||||||
|
|
||||||
|
eqc [ -d ] [ -f ] [ -r ] file.q {file.q}
|
||||||
|
|
||||||
|
HELPR(MUTOS) - Anzeigen von Informationen ueber die Relatio-
|
||||||
|
nen der Datenbank
|
||||||
|
|
||||||
|
helpr [ flags ] dbname [ [ integrity | permit | view ]
|
||||||
|
{relname} | all ]
|
||||||
|
|
||||||
|
INDEXR(MUTOS) - Erstellen eines Sekundaerindex ueber eine
|
||||||
|
Relation
|
||||||
|
|
||||||
|
indexr [ flags ] dbname prim_rel index_rel { domname }
|
||||||
|
|
||||||
|
IQL (MUTOS) - Aufruf des interaktiven Ql-Interface des DBBS
|
||||||
|
DABA16
|
||||||
|
|
||||||
|
iql [ flags ] dbname [ process_table ]
|
||||||
|
|
||||||
|
MANR(MUTOS) - Anzeigen der Komponentenbeschreibungen
|
||||||
|
|
||||||
|
manr {komponentenname}
|
||||||
|
|
||||||
|
MODIFYR(MUTOS) - Modifizieren der
|
||||||
|
|
||||||
|
modifyr [ flags ] dbname relname [ storage_strukture
|
||||||
|
{ domname [ :sortorder ] } ]
|
||||||
|
|
||||||
|
PRINTR(MUTOS) - Drucken von Relationen
|
||||||
|
|
||||||
|
printr [ flags ] dbname { relname }
|
||||||
|
|
||||||
|
PURGE(MUTOS) - Zerstoeren verfallener und temporaerer Rela-
|
||||||
|
tionen
|
||||||
|
|
||||||
|
purge [ -f ] [ -p ] [ -a ] [ -s ] [ -w ] { dbname }
|
||||||
|
|
||||||
|
RC(MUTOS) - REPORT-Compiler
|
||||||
|
|
||||||
|
rc {[ flags ] file}
|
||||||
|
|
||||||
|
RD(MUTOS) - Erstellen eines Domaenen-Beschreibungs-Files
|
||||||
|
oder eines Reportskelettes
|
||||||
|
|
||||||
|
rd [ flags ] dbname relname [file]
|
||||||
|
|
||||||
|
REFR(MUTOS) - Anzeige einer Komponenten-Kurzbeschreibung
|
||||||
|
|
||||||
|
refr { komponentenname }
|
||||||
|
|
||||||
|
REPORT MUTOS() - DABA-Reportunterstuetzung
|
||||||
|
|
||||||
|
|
||||||
|
rc {[ flags ] file }
|
||||||
|
|
||||||
|
rd [ flags ] dbname [ file ]
|
||||||
|
|
||||||
|
rg [ flags ]
|
||||||
|
|
||||||
|
rp_desc [ desc_file ]
|
||||||
|
|
||||||
|
|
||||||
|
RESTORE(MUTOS) - Wiederherstellen nach einem DBBS- oder
|
||||||
|
MUTOS-Absturz
|
||||||
|
|
||||||
|
restore [ -s ] [ -a ] [ -f ] [ +/-p ] [ +/-w ]
|
||||||
|
[ -S ] [ -P ] { dbname }
|
||||||
|
|
||||||
|
RG(MUTOS) - REPORT-Generator (Interpreter)
|
||||||
|
|
||||||
|
rg [ flags ]
|
||||||
|
|
||||||
|
RP_DESC(MUTOS) - Drucken eines Domaenen-Beschreibungs-Files
|
||||||
|
|
||||||
|
rp_desc [desc-file]
|
||||||
|
|
||||||
|
SAVER(MUTOS) - Verlaengern des Schutzdatums einer Relation
|
||||||
|
|
||||||
|
saver [ flags ] dbname relname month day year
|
||||||
|
|
||||||
|
SYSMOD(MUTOS) - Modifizieren (Optimieren) der Systemrelatio-
|
||||||
|
nen
|
||||||
|
|
||||||
|
sysmod [ flags ] dbname { relname }
|
||||||
|
|
||||||
|
USERSETUP(MUTOS) - Erstelle Nutzer-File
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KOMPONENTENUEBERSICHT(FILES) DABA16 KOMPONENTENUEBERSICHT(FILES)
|
||||||
|
|
||||||
|
DAYFILE(FILES) - DABA-Login-Nachrichten
|
||||||
|
|
||||||
|
|
||||||
|
DBTMPLT(FILES) - Datenbank-Spezifikation(Template)
|
||||||
|
|
||||||
|
|
||||||
|
ERROR(FILES) - Files mit DABA-Fehlernachrichten
|
||||||
|
|
||||||
|
|
||||||
|
LIBAMX(FILES) - AMX-Laufzeit-Bibliothek
|
||||||
|
|
||||||
|
|
||||||
|
LIBQ(FILES) - EQL Laufzeit-Bibliothek
|
||||||
|
|
||||||
|
|
||||||
|
STARTUP(FILES) - DABA-Start-File
|
||||||
|
|
||||||
|
|
||||||
|
USERS(FILES) - DABA-Nutzerverzeichnis
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KOMPONENTENUEBERSICHT(ERROR) DABA16 KOMPONENTENUEBERSICHT(ERROR)
|
||||||
|
|
||||||
|
EINFUEHRUNG(ERROR) - Einfuehrung in die Fehlernachrichten
|
||||||
|
|
||||||
|
|
||||||
|
PARSER(ERROR) - Zusammenstellung der Parser-
|
||||||
|
Fehlernachrichten
|
||||||
|
|
||||||
|
Fehlernummern 2000 - 2999.
|
||||||
|
|
||||||
|
QRYMOD(ERROR) - Zusammenstellung der Fehlernachrichten der
|
||||||
|
Anfragenmodifikation
|
||||||
|
|
||||||
|
Fehlernummern 3000 - 3999.
|
||||||
|
|
||||||
|
OVQP(ERROR) - Zusammenstellung der Fehlernachrichten des
|
||||||
|
Ein-Variablen-Anfragenprozessors
|
||||||
|
|
||||||
|
Fehlernummern 4000 - 4499.
|
||||||
|
|
||||||
|
DECOMP(ERROR) - Zusammenstellung der Fehlernachrichten der
|
||||||
|
Dekomposition
|
||||||
|
|
||||||
|
Fehlernummern 4500 - 4999.
|
||||||
|
|
||||||
|
DBU(ERROR) - Zusammenstellung der Fehlernachrichten der Da-
|
||||||
|
tenbankdienste
|
||||||
|
|
||||||
|
Fehlernummern 5000 - 5999
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
RP_DESC(MUTOS) DABA16 RP_DESC(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
rp_desc - Drucken eines Domaenen-Beschreibungs-Files
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
rp_desc [desc-file]
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Der Parameter desc-file muss angegeben werden, wenn der
|
||||||
|
Standard-File-Name desc nicht zutrifft.
|
||||||
|
|
||||||
|
|
||||||
|
BEISPIELE
|
||||||
|
rp_desc pers_d
|
||||||
|
rp_desc > beispiel
|
||||||
|
cat beispiel
|
||||||
|
|
||||||
|
| field | type | len | off |
|
||||||
|
|~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~|
|
||||||
|
| | | | |
|
||||||
|
| | | | |
|
||||||
|
|~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~|
|
||||||
|
| | | | |
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
rc(mutos), rd(mutos), rg(mutos), report(mutos), report(daba)
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
SAVE(QL) DABA16 SAVE(QL)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
save - Verlaengern des Schutzdatums einer Relation
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
save relname until month day year
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Save wird benutzt, um das Schutzdatum ueber die standard-
|
||||||
|
maessigen 7 Tage hinaus zu verlaengern.
|
||||||
|
|
||||||
|
month ist der Monat (1,2,...12), day der Tag (1,2,3...) und
|
||||||
|
year das Jahr (...1988,1989...).
|
||||||
|
|
||||||
|
|
||||||
|
BEISPIEL[E]
|
||||||
|
/* Schuetzen der Relation "personal" bis Ende Februar 1987 */
|
||||||
|
save personal until 2 28 1987
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
create(ql), purge(mutos), retrieve(ql), saver(mutos)
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
SAVER(MUTOS) DABA16 SAVER(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
saver - Verlaengern des Schutzdatums einer Relation
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
saver [ flags ] dbname relname month day year
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Die Aussagen zu save(ql) gelten auch fuer saver(mutos).
|
||||||
|
|
||||||
|
Sie sind jedoch um Folgendes zu ergaenzen:
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
|
||||||
|
-uname erlaubt es, sich als Nutzer mit dem Login-Namen
|
||||||
|
name auszugeben (iql(mutos)).
|
||||||
|
|
||||||
|
+/-w Warten oder kein Warten auf die Nutzbarkeit
|
||||||
|
der Datenbank dbname (iql(mutos)).
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
STARTUP(FILES) DABA16 STARTUP(FILES)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
.../sys/etc/startup - DABA-Start-File
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Dieses File wird durch den DABA-Terminal-Monitor zum Login-
|
||||||
|
Zeitpunkt gelesen. Es wird vor dem Start-File gelesen, das
|
||||||
|
im File "users" spezifiziert werden kann. Der Hauptzweck
|
||||||
|
besteht darin, einen neuen Standard-Editor und/oder eine
|
||||||
|
Standard-Shell fuer den Aufruf durch das \e oder das \s
|
||||||
|
Monitor-Kommando zu definieren.
|
||||||
|
|
||||||
|
Diese Spezifikationen sind Standard-Spezifikationen und gel-
|
||||||
|
ten fuer alle Nutzer. Durch Spezifikationen des File
|
||||||
|
"users" koennen sie ueberschrieben werden.
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
monitor(iql), users(files)
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
SYSMOD(MUTOS) DABA16 SYSMOD(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
sysmod - Modifizieren (Optimieren) der Systemrelationen
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
sysmod [ flags ] dbname { relname }
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Sysmod modifiziert die relation-, attribute-, integrities-,
|
||||||
|
protect-, tree-, references- und indexes- Systemrelationen
|
||||||
|
in optimale Speicherungsstrukturen, wenn nicht wenigstens
|
||||||
|
einer der Parameter relation, attribute, integrities, pro-
|
||||||
|
tect, tree, references, oder indexes fuer die Systemrelatio-
|
||||||
|
nen relname spezifiziert wurde. Wurden diese Parameter an-
|
||||||
|
gegeben, werden nur die entsprechenden Systemrelationen mo-
|
||||||
|
difiziert.
|
||||||
|
Die Systemrelationen werden so modifiziert, dass eine maxi-
|
||||||
|
male Zugriffsleistung bei der Nutzung von DABA erreicht
|
||||||
|
wird.
|
||||||
|
Der Anwender muss der Datenbankadministrator (DBA) der spe-
|
||||||
|
zifizierten Datenbank oder der DABA-Systemverantwortliche
|
||||||
|
(Verwendung des -s Flags) sein.
|
||||||
|
|
||||||
|
Sysmod sollte abgearbeitet werden, wenn die Datenbank er-
|
||||||
|
stellt wurde. Danach sollte es periodisch angewendet wer-
|
||||||
|
den, um eine groesstmoegliche Zugriffsleistung zu erhalten.
|
||||||
|
Wenn einige Relationen und Sekundaerindizes erstellt
|
||||||
|
und/oder zerstoert wurden, ist sysmod des oefteren abzuar-
|
||||||
|
beiten.
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
modify(ql), modifyr(mutos), restore(mutos)
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
toc range eqc restore
|
||||||
|
append replace helpr rg
|
||||||
|
copy retrieve indexr rp_desc
|
||||||
|
create save iql saver
|
||||||
|
define view manr sysmod
|
||||||
|
delete amx modifyr usersetup
|
||||||
|
destroy copydb printr dayfile
|
||||||
|
help copyr purge error
|
||||||
|
index creatdb rc startup
|
||||||
|
integrity creater rd users
|
||||||
|
modify destroydb refr
|
||||||
|
print destroyr report
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
USERS(FILES) DABA16 USERS(FILES)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
.../sys/etc/users - DABA-Nutzerverzeichnis
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Dieses File enthaelt die Nutzerinformationen in Feldern, die
|
||||||
|
durch den Doppelpunkt separiert werden. Es gibt folgende
|
||||||
|
Felder:
|
||||||
|
|
||||||
|
0. Nutzername, direkt entnommen aus dem /etc/passwd File.
|
||||||
|
1. Nutzercode, zugeordnet durch den DABA-
|
||||||
|
Systemverantwortlichen. Es muss ein eindeutiger Code
|
||||||
|
aus zwei Zeichen(Character) sein.
|
||||||
|
2. MUTOS-Nutzeridentifikator. Er muss mit dem Eintrag im
|
||||||
|
File /etc/passwd -ubereinstimmen.
|
||||||
|
3. MUTOS-Gruppenidentifikator (gleiche Bemerkung).
|
||||||
|
4. Statuswort in oktaler Darstellung. Erlaubte Bit-Werte
|
||||||
|
sind:
|
||||||
|
|
||||||
|
0000001 creatdb
|
||||||
|
Befugnis zur Erzeugung von Datenbanken
|
||||||
|
0000002 direct update
|
||||||
|
Befugnis zum Ueberschreiben der Stapelaenderung
|
||||||
|
(Aenderund des Hintergrundes).
|
||||||
|
0000004 update os system catalogs
|
||||||
|
Befugnis zum Aendern der Systemkataloge
|
||||||
|
0000020 trace flag
|
||||||
|
Befugnis zur Benutzung der Trace-Flags
|
||||||
|
0000100 proctabs
|
||||||
|
Befugnis zur Benutzung der Prozesstabellen
|
||||||
|
0000200 =proctab form
|
||||||
|
Berechtigung zur Benutzung von undefinierten
|
||||||
|
Prozesstabellen der Form "=file"
|
||||||
|
(file ist eine Prozesstabelle im Verzeichnis
|
||||||
|
.../sys/etc).
|
||||||
|
0100000 DABA superuser
|
||||||
|
Kennzeichen des DABA-Systemverantwortlicher
|
||||||
|
|
||||||
|
5. Eine Liste von automatisch gesetzter Flags fuer diesen
|
||||||
|
Nutzer.
|
||||||
|
6. Die fuer diesen Nutzer anwendbare Prozesstabelle.
|
||||||
|
7. Ein Initialisierungs-File, das durch den DABA-Terminal-
|
||||||
|
Monitor zum Login-Zeitpunkt gelesen wird.
|
||||||
|
8. Kommentarfeld.
|
||||||
|
9. Komma separierte Liste von Datenbanken. Wenn die Liste
|
||||||
|
nicht vorhanden ist, kann der Nutzer jede Datenbank be-
|
||||||
|
nutzen. Wenn sie mit einem "-" beginnt, kann der Nutzer
|
||||||
|
jede Datenbank, ausser den nachfolgend spezifizierten
|
||||||
|
benutzen. Andernfalls kann der Nutzer nur die spezifi-
|
||||||
|
zierten Datenbanken benutzen.
|
||||||
|
|
||||||
|
WARNUNG: Das Erteilen der Befugnis, spezielle Prozesstabel-
|
||||||
|
len zu benutzen, ist gleichbedeutend mit dem Ausschalten des
|
||||||
|
Schutzsystems fuer diesen Nutzer.
|
||||||
|
|
||||||
|
BEISPIEL[E]
|
||||||
|
daba:aa:5:2:177777:-d:=special:/mnt/daba/.ql::
|
||||||
|
gast:ah:35:1:000000:::::demo.gast
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
USERSETUP(MUTOS) DABA16 USERSETUP(MUTOS)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
usersetup - Erstelle Nutzer-File
|
||||||
|
|
||||||
|
UEEBERSICHT
|
||||||
|
usersetup [ - ]
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Das /etc/passwd File wird gelesen und zur Erstellung des
|
||||||
|
DABA-Nutzer-Verzeichnis verwendet, das in ...sys/etc/users
|
||||||
|
abgelegt ist. Wenn das Flag - gesetzt wird, wird das Ergeb-
|
||||||
|
nis nach Standardoutput geschrieben.
|
||||||
|
|
||||||
|
Die Struktur des DABA-Nutzer-Files ist in users(files) be-
|
||||||
|
schrieben. Der Nutzername, sowie die Nutzer- und Gruppeni-
|
||||||
|
dentifikatoren werden so initialisiert, dass sie mit den
|
||||||
|
korrespondierenden Eintrittspunkten im /etc/passwd File
|
||||||
|
identisch sind. Das Status-Feld wird auf 000000 initiali-
|
||||||
|
siert, ausgenommen fuer den Nutzer daba, bei dem alle Bits
|
||||||
|
gesetzt sind (alle Berechtigungen). Als Initialisierungs-
|
||||||
|
File wird das File .ql im Home-Directory (User's Login-
|
||||||
|
Directory) des Nutzers eingetragen. Das Feld fuer den
|
||||||
|
"DABA"- Nutzercode wird mit einem aufsteigenden Code, begin-
|
||||||
|
nend mit 'aa' gefuellt. Alle anderen Felder werden mit Null
|
||||||
|
initialisiert.
|
||||||
|
|
||||||
|
Nach dem Ablauf von usersetup kann das Nutzerverzeichnis
|
||||||
|
editiert werden. Bei Nutzern, die eine spezielle Berecht-
|
||||||
|
igung erhalten sollen, ist das Statusfeld zu aendern
|
||||||
|
|
||||||
|
Falls DABA-Nutzer nach Erstellung des DABA-
|
||||||
|
Nutzerverzeichnisses im File /etc/passwd zugefuegt oder ge-
|
||||||
|
loescht werden, ist es notwendig, das Nutzerverzeichnis zu
|
||||||
|
editieren, um diese Aenderung einzuarbeiten. Das Kommando
|
||||||
|
usersetup kann nur einmal ausgefuehrt werden, um das Nutzer-
|
||||||
|
verzeichnis zu initialisieren.
|
||||||
|
|
||||||
|
FILES
|
||||||
|
.../sys/etc/users
|
||||||
|
/etc/passwd
|
||||||
|
|
||||||
|
BEISPIEL[E]
|
||||||
|
usersetup soll befaehigen, das users -File auf einen Aus-
|
||||||
|
gangsstand zu bringen.
|
||||||
|
Der Nutzer mit dem Login-Namen "neumann" kann zum Beispiel
|
||||||
|
durch folgendes Kommando im DABA-Nutzerverzeichnis aufgenom-
|
||||||
|
men werden:
|
||||||
|
|
||||||
|
usersetup -|fgrep neumann >> .../sys/etc/users
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
iql(mutos), users(file)
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
VIEW(QL) DABA16 VIEW(QL)
|
||||||
|
|
||||||
|
NAME
|
||||||
|
view - Definieren einer Sicht (virtuellen Relation)
|
||||||
|
|
||||||
|
UEBERSICHT
|
||||||
|
define view name (target_list) [ where qual ]
|
||||||
|
|
||||||
|
BESCHREIBUNG
|
||||||
|
Die Syntax der view Anweisung ist die der retrieve into An-
|
||||||
|
weisung fast identisch. Die Daten werden jedoch physisch
|
||||||
|
abgelet. Stattdessen wird die Definition gespeichert.
|
||||||
|
Wenn die Sicht mit dem Namen name spaeter benutzt wird,
|
||||||
|
erfolgt die Konvertierung der Anfrage, um mit den in
|
||||||
|
der target_list spezifizierten Domaenen zu operieren.
|
||||||
|
|
||||||
|
|
||||||
|
BEISPIEL[E]
|
||||||
|
range of p is personal
|
||||||
|
range of a is abt
|
||||||
|
define view persabt (pname = p.name, p.gehalt, aname =
|
||||||
|
a.name)
|
||||||
|
where p.leiter = a.leiter
|
||||||
|
|
||||||
|
|
||||||
|
SIEHE AUCH
|
||||||
|
retrieve(ql), destroy(ql)
|
||||||
Loading…
Reference in New Issue