This commit is contained in:
Oliver Lehmann 1989-07-21 12:40:00 +00:00
parent 48edad2e85
commit f24cd0c773
19 changed files with 4716 additions and 0 deletions

View File

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

View File

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

View File

@ -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)

View File

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

View File

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

View File

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

View File

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

View File

@ -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)

View File

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

View File

@ -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)

View File

@ -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)

View File

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

View File

@ -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)

View File

@ -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)

View File

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

View File

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

View File

@ -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)

View 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)