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.