next up previous contents index
Next: Funktionen für die Verwaltung Up: Weitere Konzepte und Implementierungsdetails Previous: Das Session-Konzept der Workflow-Anwendung

SQL-Schnittstelle

In der Datei 'lib-sql.inc.php' ist eine allgemeine Datenbank-Schnittstelle implementiert. Die hierin bereitgestellten Funktionen bieten einen generischen Zugriff auf eine SQL-Datenbank. Dafür werden allgemeine SQL-Funktionsaufrufe in die speziellen SQL-Schnittstellen-Aufrufe der jeweils verwendeten Datenbank übersetzt. Im restlichen Workflow-System werden nur diese allgemeinen SQL-Funktionen benutzt. Dies erleichtert die Umstellung auf eine andere Datenbank. Entscheidet man sich nämlich später für den Einsatz eines anderen Datenbank-Systems, so muss nur lib-sql angepasst werden.

Bisher werden von lib-sql.inc.php die Datenbank-Systeme ``Mysql'', ``Postgres'' und ``Interbase'' unterstützt. Für jede von diesen ist jeweils die eigentliche Umsetzung zwischen generischer und spezieller SQL-Schnittstelle in einer eigenen Datei mit Namen lib-<dbname>.inc.php implementiert , wobei <dbname> für ``mysql'', ``psql'' (für Postgres) bzw. ``ibase'' (für Interbase) steht. Die Funktionen in lib-sql.inc.php, die vom restlichen System benutzt werden, sind nur Wrapper, die die eigentlichen Umsetzungsfunktionen des verwendeten Datenbanksystems in 'lib-<dbname>.inc.php' aufrufen.

Die generische SQL-Schnittstelle bietet Funktionen zum Auf- und Abbau mehrerer (unterschiedlicher) Datenbank-Verbindungen, das Ausführen von SQL-Queries und den Zugriff auf die Anfrage-Ergebnisse. Dabei sollten die gestellten SQL-Anfragen so allgemein sein, wie möglich, d.h. von jedem SQL-Datenbank-System verarbeitbar und keine Implementierung-spezifischen Details enthalten.

Da die SQL-Systeme aber vor allem bei View- und Rechte-Verwaltung unterschiedlich zu handhaben sind (mysql kennt z.B. von sich aus gar keine Views, sie werden im Workflow-System mit temporären Tabellen nachgeahmt), existieren für diese Aufgaben pro unterstütztem Datenbank-System eigene Funktionen, die über die allgemeine Schnittstelle ansprechbar sind.

Auch die Verarbeitung von Anfragen, die mit einen UNION-Operator gebildet werden, ist sehr unterschiedlich. ``Mysql `` unterstützt diesen Vereinigungs-Operator gar nicht. Aber auch ``Postgres'' und ``Interbase'' haben hierbei Typ-Konvertierungs-Schwierigkeiten, falls leicht unterschiedliche SQL-Typen (z.B. 2 verschiedene Arten von Strings) verwendet werden. Bei Postgres wäre dies nur durch implementierungs-abhängiges Type-Casting zu lösen. Da jedoch im Workflow-System oft SQL-Anfragen zu stellen sind, die sich aus mehreren zu vereinigenden Teilanfragen zusammensetzen, bietet lib-sql bereits die Möglichkeit eine generische Anfrage zu stellen, die aus Teilanfragen besteht. Dabei wird die Anfrage in die einzelne Teilanfragen zerlegt und diese einzeln auf die speziellen Datenbank-Systeme umgesetzt. Typ-Überprüfungen werden hierbei jedoch von lib-sql nicht durchgeführt. Die Einzel-Ergebnisse werden einfach hintereinandergehängt, d.h. Duplikate werden nicht entfernt und Sortierungen auf dem Gesamtergebnis sind nicht möglich. Dies entspricht der Wirkung des SQL-Operators ``UNION ALL''. Dieser wird somit aber einheitlich von lib-sql für alle Systeme (auch mysql) zur Verfügung gestellt. Das Zerlegen in Teilanfragen bzw. das Zusammensetzen des Ergebnisses der Anfragen ist in der Datei 'lib-sqlunion.inc.php' realisiert. Wo es nötig ist, werden daher diese Funktionen (und nicht die tatsächlichen spezifischen Funktionen) von den Wrapper-Funktionen in 'lib-sql.inc.php' aufgerufen und diese rufen ihrerseits die tatsächlich Datenbank-spezifische Funktion auf.

Bei SQL-Anfragen ist auf Schreibweise von Relations- und Attributsnamen zu achten. Da es Datenbanken, wie z.B. ``mysql'' gibt, die bei diesen Namen Groß- und Kleinschreibung unterscheiden, wurde Kleinschreibung als einheitliche Schreibweise für solche Namen gewählt.

Im folgenden werden die Funktionen der SQL-Schnittstelle genauer beschrieben.

Die Namen der generischen Funktionen beginnen immer mit 'db_', die Namen für Funktionen der ``UNION''-Behandlung immer mit 'db_union'. Die Namen der speziellen Datenbank-System-spezifischen Funktionen beginnen zur Zeit immer mit 'my_<dbtype>', wobei <dbtype> durch ``mysql'' , ``pg'' (für ``Postgres'') oder ``ibase'' (für ``Interbase'') zu ersetzen ist. Das 'my' dient hierbei dazu, diese Funkionen von den jeweiligen php-internen <dbtype>-Schnittstellen-Funktionen (die i.d.R. von diesen 'my-<dbtype>' sogar verwendet werden) zu unterscheiden.



 
next up previous contents index
Next: Funktionen für die Verwaltung Up: Weitere Konzepte und Implementierungsdetails Previous: Das Session-Konzept der Workflow-Anwendung
Copyright Munich Network Management Team