Object Query Language

Die Object Query Language (kurz OQL) wurde von der Object Database Management Group (kurz ODMG) vorgeschlagen und standardisiert. Dabei handelt es sich um ein Konsortium aus Herstellern von objektorientierten Datenbanken.

Für exakt diese objektorientierten Datenbankensysteme dient OQL als Abfragesprache. Der relationale Ansatz würde in diesem Fall zu einem Bruch in der Softwarearchitektur führen.

Zudem ist es mittels der Object Query Language möglich aus objektorientierten Datenstrukturen, zum Beispiel bei der Object Definition Language (kurz ODL), Werte auszulesen oder einzufügen. ODL dient zur Definition der Datenbankobjekte.

Die Object Query Language ist in seinen Erweiterungen stellenweise mit JavaScript vergleichbar.

Aufbau und Funktionsweise der Object Query Language

Im Wesentlichen verwendet die Object Query Language dieselben Befehle wie SQL (Structered Query Language). Die Syntax von OQL wurde um einige Funktionalitäten erweitert, mit denen komplexe Objekte, Beziehungen der Datensätze untereinander und Vererbungen dieser abgefragt und eingefügt werden können.

Die Object Query Language kommt in verschiedenen Systemen zum Einsatz. Die Syntax kann je nach System etwas abweichen, dennoch bleibt die Grundform immer gleich. Beispielsweise werden Heap Objekte mit dieser Syntax abgefragt:

SELECT *
FROM [ INSTANCEOF ] <class name="name">
[ WHERE <filter-expression> ]
</filter-expression></class>

Object Query Language im Einsatz

In diesem Beispiel wird ein Java Heap Dump mittels Object Query Language analysiert. Zunächst sollen Zeichenketten mit 100 und mehr Zeichen gefunden werden:

SELECT s FROM java.lang.String s WHERE s.COUNT >= 100

Dann sollen alle Zeichenketten mit dem Wort „Test“ im Inhalt gesucht werden:

SELECT{instance: s, content: s.toString()} 
FROM java.lang.String s 
WHERE /java/.test(s.toString())

Als Nächstes werden alle Klassen mit dem Namensmuster java.net gefiltert:

SELECT FILTER (heap.classes(), "/java.net./.test(it.name)")

Sollen alle int-basierenden Arrays mit einer Länge von 256 oder mehr gefunden werden, ist dies wie folgt möglich:

SELECT a 
FROM int[] a 
WHERE a.LENGTH >= 256

Um Zugriff auf das statische Feld „props“ der Klasse java.lang.System zu erhalten, wird dieser Befehl ausgeführt:

SELECT heap.findClass("java.lang.System").statics.props

Das war ein kleiner Ausschnitt aus zahlreichen Praxisbeispielen für die Object Query Language (OQL).

Bitte bewerten (1 - 5):