sql

Verfügbar für Datenbank-Typen WGA Content Store for JDBC
WGA Content Store for FirebirdSQL
WGA Content Store for Oracle
JDBC-Database (Query only)
JDBC-Database with enhanced access
Verfügbar ab Version 2.0
Such-Optionen (Zu verwenden in Query-Attribut options)

Dieser Abfragetyp führt eine SQL-Anweisung auf einer relationalen Datenbank, die auf beliebigen Wege in WGA eingebunden wurde, aus. Es gilt die Syntax der nativen Datenbank-Plattform.

Für die "JDBC-Database"-Typen muss die Query keinen weiteren Formen genügen. Das Resultat einer SQL-Abfrage wird als Liste von Content-Dokumenten interpretiert. Jede Ergebniszeile stellt ein Dokument dar. Die Spaltenwerte können als Items über ihre Spaltennamen (in Kleinbuchstaben) abgerufen werden. SQL-Abfragen auf mit großen Ergebnismengen sind in der Implementierung "JDBC-Database (Query only)" effektiver als in "JDBC-Database with enhanced access", weil letztere immer direkt alle Daten der Ergebnismenge einlädt, egal ob diese Verwendung finden oder nicht.

In beiden "JDBC-Database"-Implementierungen sind die Ergebniszeilen einer "sql"-Abfrage nicht editierbar.

Für die "WGA Content Store"-Typen muss das Ergebnis einer SQL-Abfrage immer als Content-Dokument interpretierbar sein. Daher muss die Abfrage auf folgender Basis aufbauen:

    SELECT {content.*} FROM CONTENT {content}

Die geschweiften Klammern stehen an dieser Stelle nicht für Platzhalter sondern müssen tatsächlich in der Query mit angegeben werden, auch wenn in der SQL-Syntax nicht unterstützt. Sie sind notwendig um die Bereiche der Abfrage zu markieren, in welchen die Content-Daten selektiert werden. Bevor die Abfrage an den Datenbank-Server weitergeleitet wird, werden die Klammern automatisch von WGA bzw. Hibernate entfernt, so dass sie der Datenbank-Server nicht in seiner Abfrage erhält.

Das Ergebnis einer "sql"-Abfrage gegen eine Content Store ist - genauso wie bei den anderen Abfragearten für diesen Datenbanktyp - eine Liste normaler Inhaltsdokumente die auch editierbar sind.

Diese Abfrage kann um beliebige SQL-Konstrukte erweitert werden, welche die zu sammelnden Daten selektieren oder sortieren, z.B.:

    SELECT {content.*} FROM CONTENT {content} WHERE content.language='de' ORDER BY content.title

Diese Abfrage selektiert alle Inhalte deutscher Sprache und sortiert sie nach ihrem Titel.

Um Itemdaten mit dieser Methode abzufragen ist ein SQL-Join notwendig, da sich diese in einer separaten Tabelle "content_items" befinden:
    SELECT {content.*} FROM CONTENT {content}, CONTENT_ITEMS items
    WHERE content.cuid = items.cuid AND items.name = 'theitem' AND items.textvalue='theitemvalue'
Oben genanntes Beispiel selektiert alle Inhaltsdokumente, die ein Item namens "theitem" mit Textinhalt "theitemvalue" besitzen. Wenn sie einen Zahlen- oder Datumswert abfragen müssen sie in der Tabelle "items" statt der Spalte "textvalue" die Spalten "numbervalue" bzw. "datevalue" abfragen. Über die Verbindung "content.cuid = items.cuid" wird der SQL-Join ausgeführt, der die "content_items"-Zeilen ihren zugehörigen "content"-Zeilen zuordnet.