hauptseminar datenbanksysteme - datenbanken und xml - thema: type-checking oql queries in the odmg...

49
Hauptseminar Hauptseminar Datenbanksysteme Datenbanksysteme - Datenbanken und XML - - Datenbanken und XML - Thema: Type-Checking OQL Thema: Type-Checking OQL Queries In The ODMG Type Queries In The ODMG Type Systems Systems

Upload: rosamund-keimig

Post on 05-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Hauptseminar Hauptseminar DatenbanksysteDatenbanksyste

meme- Datenbanken und XML -- Datenbanken und XML -

Thema: Type-Checking OQL Thema: Type-Checking OQL Queries In The ODMG Type Queries In The ODMG Type

SystemsSystems

Page 2: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Angesprochene PunkteAngesprochene Punkte

Allgemeines zum Type Checking in Allgemeines zum Type Checking in DatenbanksystemenDatenbanksystemen

Kurze Einführung in den ODMG Kurze Einführung in den ODMG StandardStandard

Formale Definitionen und RegelnFormale Definitionen und Regeln Betrachtung von auftretenden Betrachtung von auftretenden

Problemen und skizzieren von Problemen und skizzieren von LösungsvorschlägenLösungsvorschlägen

ReferenzenReferenzen

Page 3: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Type Checking (1/2)Type Checking (1/2)

Es gibt zwei Möglichkeiten von Es gibt zwei Möglichkeiten von Type-CheckingType-Checking

Dynamisches type-checking während Dynamisches type-checking während der Programmausführungder Programmausführung

Statisches type-checking, zur Statisches type-checking, zur KompilierzeitKompilierzeit

Page 4: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Type Checking (2/2)Type Checking (2/2)

Aus folgenden Gründen wird Aus folgenden Gründen wird statisches type-checking bei statisches type-checking bei Datenbanken bevorzugt:Datenbanken bevorzugt: Die Effizienz der Datenbank sollte nicht Die Effizienz der Datenbank sollte nicht

unnötig belastet werdenunnötig belastet werden Laufzeitfehler sind bei Datenbanken Laufzeitfehler sind bei Datenbanken

besonders kritischbesonders kritisch „„Message not understood“-Fehler Message not understood“-Fehler

werden durch statisches type-checking werden durch statisches type-checking ausgeschlossenausgeschlossen

Page 5: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ODMG Standard (1/5)ODMG Standard (1/5)

ODMG steht für Object Data ODMG steht für Object Data Management Group (Management Group (www.odmg.orgwww.odmg.org))

1993 wurde der ODMG 1.0 Standard 1993 wurde der ODMG 1.0 Standard veröffentlicht; der aktuelle Stand ist veröffentlicht; der aktuelle Stand ist Release 3.0Release 3.0

Dieser Vortrag geht noch auf den Dieser Vortrag geht noch auf den ODMG 2.0 Standard einODMG 2.0 Standard ein

Page 6: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ODMG Standard (2/5)ODMG Standard (2/5)

Interface: Definiert das abstrakte Verhalten eines Interface: Definiert das abstrakte Verhalten eines Objektes Objektes

Class: Ist ein erweitertes Interface mit einem Class: Ist ein erweitertes Interface mit einem StatusStatus

Literal: Definiert nur einen abstrakten StatusLiteral: Definiert nur einen abstrakten Status

LiteralLiteralInterfaceInterface

ClassClass

Page 7: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ODMG Standard (3/5)ODMG Standard (3/5)

Was ist ein Was ist ein Interface?Interface?

Ein Interface Ein Interface definiert das definiert das abstrakte Verhalten abstrakte Verhalten von Objekt-Typen.von Objekt-Typen.

Ein Interface Ein Interface beinhaltet nur beinhaltet nur Methoden, keine Methoden, keine Attribute.Attribute.

Beispiel (The top interface)

interface Object {

boolean same_as(in Object anObject);

Object copy(); void delete();

};

Page 8: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ODMG Standard (4/5)ODMG Standard (4/5)

Was ist eine Klasse?Was ist eine Klasse?

Eine Klasse ist ein Eine Klasse ist ein erweitertes Interface.erweitertes Interface.

Eine Klasse definiert Eine Klasse definiert das abstrakte das abstrakte Verhalten und den Verhalten und den abstrakten Zustand abstrakten Zustand von Objekt-Typen.von Objekt-Typen.

Beispiel (Class with extent)

class Employee (extent employees){ attribute string name; attribute short id; attribute Department dept; float salary(); void hire(in Department d); void fire();};

class Department (extent departments){ attribute string name; attribute short id; short NoOfEmployees();};

Page 9: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ODMG Standard (5/5)ODMG Standard (5/5)

Was ist ein Literal?Was ist ein Literal?

Ein Literal definiert Ein Literal definiert nur den abstrakten nur den abstrakten Zustand eines Zustand eines primitiven Literal-primitiven Literal-Typen.Typen.

Es gibt keine Es gibt keine Objektidentitäten Objektidentitäten für Literalefür Literale

Literal-Typen:

-boolean-char-short-long-float-double-octet-string-user-defined collection, union and enumeration literale

Page 10: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL- QueriesOQL- Queries

Das Resultat ist Das Resultat ist eine Menge vom eine Menge vom Typ well_paidTyp well_paid

Der Typ well_paid Der Typ well_paid ist vorher definiert ist vorher definiert und hat die und hat die Komponenten emp Komponenten emp und salund sal

Durch order by Durch order by wird eine Liste von wird eine Liste von Objekten erzeugtObjekten erzeugt

Beispiel

select well_paid(emp: x.name, sal: x.salary())from employees as xwhere x.salary() > 50000and x.dept.NoOfEmployees()>100order by emp

Page 11: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Collection Objects (1/2)Collection Objects (1/2)

Es gibt verschiedene Typen von Es gibt verschiedene Typen von „Mengen“„Mengen“

Set<t> : Eine Menge ohne DuplikateSet<t> : Eine Menge ohne Duplikate Bag<t> : Eine Menge mit DuplikatenBag<t> : Eine Menge mit Duplikaten List<t> : Geordnete MengeList<t> : Geordnete Menge Array<t> : Geordnete Menge mit IndizesArray<t> : Geordnete Menge mit Indizes Dictionary<t,v> : Menge aus Schlüsseln Dictionary<t,v> : Menge aus Schlüsseln

denen ein Wert zugeordnet wirddenen ein Wert zugeordnet wird

Page 12: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Collection Objects (2/2)Collection Objects (2/2)

Parametric polymorphism im ODMG Parametric polymorphism im ODMG ObjektmodellObjektmodell any steht für jeden Objekttypen, dadurch ergeben any steht für jeden Objekttypen, dadurch ergeben

sich auch weitere Probleme beim type-checkingsich auch weitere Probleme beim type-checking Die anderen Collection Types werden von Die anderen Collection Types werden von

diesem Interface abgeleitetdiesem Interface abgeleitet

Interface Collection: Object { unsigned long cardinality(); boolean is_empty(); void insert_element(in any element); void remove_element(in any element); boolean contains_element(in any element); Iterator create_iterator();};

Page 13: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java vs. C++Java vs. C++

Java Java unterstützt unterstützt keinen keinen parametrisiertparametrisierten en PolymorphismPolymorphismusus

C++ bietet zu C++ bietet zu diesem Zweck diesem Zweck Templates anTemplates an

interface Collection { int size(); boolean isEmpty(); void add(in Object element); boolean remove(in Object element); Iterator iterator(); ...};

interface Collection <T> { unsigned long cardinality(); boolean is_empty(); void insert_element(T element); void remove_element(T element); boolean contains_element(T element); Iterator <T> create_iterator(); };

Page 14: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Formale Spezifikation Formale Spezifikation (1/2)(1/2)

Ein Schema ist eine Menge von Ein Schema ist eine Menge von VerknüpfungenVerknüpfungen Es beinhaltet Schlüsselwörter, die mit Es beinhaltet Schlüsselwörter, die mit

interfaces, classes, class extents und objects interfaces, classes, class extents und objects assoziiert sindassoziiert sind

Ein Schema ist wohlgeformt, wenn:Ein Schema ist wohlgeformt, wenn: jedes Schlüsselwort nur genau einer jedes Schlüsselwort nur genau einer

Zuordnung entspricht.Zuordnung entspricht. der Typ zu jedem Objekt ebenfalls im Schema der Typ zu jedem Objekt ebenfalls im Schema

enthalten ist.enthalten ist. bei interfaces und classes die Regeln für die bei interfaces und classes die Regeln für die

Vererbung berücksichtigt wurden.Vererbung berücksichtigt wurden.

Page 15: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Formale Spezifikation Formale Spezifikation (2/2)(2/2)

Das Hinzufügen einer class extent zu Das Hinzufügen einer class extent zu einem Schema stellt ebenfalls den einem Schema stellt ebenfalls den Namen des extent im Schema zur Namen des extent im Schema zur Verfügung.Verfügung.

Ein Schema beinhaltet vordefinierte Ein Schema beinhaltet vordefinierte ZuordnungenZuordnungen String, int, boolean…String, int, boolean… Collection, Bag, Set, List, Array…Collection, Bag, Set, List, Array… die Datenbank-/Transaktionsklassedie Datenbank-/Transaktionsklasse

Page 16: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Vererbung (1/5)Vererbung (1/5)

Das top interface ist „Object“, alle Das top interface ist „Object“, alle weiteren Interfaces werden von weiteren Interfaces werden von diesem abgeleitetdiesem abgeleitet

Page 17: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Vererbung (2/5)Vererbung (2/5)

ReflexivitätReflexivität

TransitivitätTransitivität

Page 18: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Vererbung (3/5)Vererbung (3/5)

SubstitutionSubstitution Ein Objekt vom Typ CEin Objekt vom Typ C2 2 kann ein Objekt vom kann ein Objekt vom

Typ CTyp C1 1 ersetzen, falls Cersetzen, falls C2 2 von Cvon C11 abgeleitet wird abgeleitet wird

Die Regel beschreibt, daß im Ausdruck e ein Die Regel beschreibt, daß im Ausdruck e ein vorkommendes y durch ein x ersetzt werden kann.vorkommendes y durch ein x ersetzt werden kann.

Page 19: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Vererbung (4/5)Vererbung (4/5)

Type castsType casts Ist ein Ausdruck e vom Typ CIst ein Ausdruck e vom Typ C11 und es gilt und es gilt

außerdem noch, dass Caußerdem noch, dass C2 2 von Cvon C1 1 abgeleitet ist, ist abgeleitet ist, ist ein type-cast möglichein type-cast möglich

Es wird ein dynamisches type-checking benötigtEs wird ein dynamisches type-checking benötigt

Page 20: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Vererbung (5/5)Vererbung (5/5)

Beispiel type castsBeispiel type casts

class Person { (extent persons)...}

class Employee: Person {(extent employees)long salary();...}

select well_paid(emp: x.name, sal:((Employee)x).salary())from persons as xwhere ((Employee)x).salary() > 50000

Page 21: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Weitere Regeln Weitere Regeln zusammengefaßtzusammengefaßt

Auf ähnliche Weise können nun auchAuf ähnliche Weise können nun auch StructuresStructures InterfacesInterfaces ClassesClasses Objects and MessagesObjects and Messages

in das Schema mit aufgenommen in das Schema mit aufgenommen werden.werden.

Page 22: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and the ODMG OQL Queries and the ODMG

object model (1/3)object model (1/3) Nun kommen wir zu dem ersten Nun kommen wir zu dem ersten

negativen Beispiel für das type-negativen Beispiel für das type-checking:checking:

select well_paid(emp: x.name, sal: x.salary())from employees as xwhere x.salary() > 50000

Employees ist vom Typ CollectionEmployees ist vom Typ Collection x ist ein Objekt vom Typ anyx ist ein Objekt vom Typ any

Page 23: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and the ODMG OQL Queries and the ODMG

object model (2/3)object model (2/3) Methoden für den Type any sind im Methoden für den Type any sind im

ODMG Standard nicht definiertODMG Standard nicht definiert Es ist nicht möglich auf die Es ist nicht möglich auf die

Typkorrektheit von x.name und Typkorrektheit von x.name und x.salary() zu schließenx.salary() zu schließen

Theorem: OQL-Queries können nicht Theorem: OQL-Queries können nicht auf Typkorrektheit überprüft werden.auf Typkorrektheit überprüft werden.

Page 24: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and the ODMG OQL Queries and the ODMG

object model (3/3)object model (3/3) Beweis:Beweis:

select projectionfrom e1 as x1, e2 as x2, … ,en as xn

where e

Die Variabel-Typen der xDie Variabel-Typen der xii müssen bestimmt müssen bestimmt werdenwerden

Die Variabel-Typen der eDie Variabel-Typen der eii müssen bestimmt müssen bestimmt werdenwerden

Im besten Fall nehmen wir an, daß die eIm besten Fall nehmen wir an, daß die eii vom Typ vom Typ Collection sindCollection sind

Folglich sind die xFolglich sind die xii vom Typ any vom Typ any

Page 25: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and Java OQL Queries and Java (1/5)(1/5)

Die bisherigen Probleme beruhen auf Die bisherigen Probleme beruhen auf dem Type any im ODMG Type-Systemdem Type any im ODMG Type-System

In der Java-Anbindung ist der Type In der Java-Anbindung ist der Type Object das Wurzel-ObjektObject das Wurzel-Objekt

Alle Objekte im Java-Typ-System Alle Objekte im Java-Typ-System erben die Eigenschaften des Wurzel-erben die Eigenschaften des Wurzel-ObjektesObjektes

Page 26: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and Java OQL Queries and Java (2/5)(2/5)

Theorem: Statisches Type-checking ist Theorem: Statisches Type-checking ist im Java-Type-System nicht möglichim Java-Type-System nicht möglich

BeweisBeweis Der Typ der Variable x wird nun als Der Typ der Variable x wird nun als

Objekt identifiziertObjekt identifiziert Nur Methoden aus dem Interface Nur Methoden aus dem Interface

„Object“ können benutzt werden„Object“ können benutzt werden Das type-checking schlägt fehl sobald Das type-checking schlägt fehl sobald

unbekannte Methoden aufgerufen werdenunbekannte Methoden aufgerufen werden

Page 27: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and Java OQL Queries and Java (2/5)(2/5)

BeispielBeispielclass Professor {public float salary() { }...}class Course {public int enrollment() { }...}Collection professors;Collection courses;

select xfrom professors as x, x.courses() as ywhere x.salary() > 70000and y.enrollment() > 50

Page 28: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and Java OQL Queries and Java (3/5)(3/5)

x.salary(), x.courses() und y.enrollment() x.salary(), x.courses() und y.enrollment() werden stets als nicht typkorrekt werden stets als nicht typkorrekt klassifiziertklassifiziert

Hier stellt sich die Frage ob sich Java für Hier stellt sich die Frage ob sich Java für die Datenbankprogrammierung eignet?die Datenbankprogrammierung eignet?

Betrachten wir zunächst eine Lösung für Betrachten wir zunächst eine Lösung für dieses Problem – dynamisches type-dieses Problem – dynamisches type-checking…checking…

Page 29: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and Java OQL Queries and Java (4/5)(4/5)

OQL Query with type castsOQL Query with type casts

Theorem: Bei ausdrücklicher Theorem: Bei ausdrücklicher Typangabe für jede Variabel Typangabe für jede Variabel innerhalb der Anfrag im Java-Typ-innerhalb der Anfrag im Java-Typ-System ist ein type-checking System ist ein type-checking möglich, allerdings nur auf Kosten möglich, allerdings nur auf Kosten des teuren Checks zur Laufzeit des teuren Checks zur Laufzeit (ohne Beweis)(ohne Beweis)

Page 30: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and Java OQL Queries and Java (5/5)(5/5)

BeispielBeispiel

Collection professors;Collection courses;

select xfrom professors as (Professor)x, x.courses() as (Course)ywhere x.salary() > 70000and y.enrollment() > 50

Diese Anfrage ist aufgrund des type-casts möglichDiese Anfrage ist aufgrund des type-casts möglich Es wird ein Check zur Laufzeit ausgeführtEs wird ein Check zur Laufzeit ausgeführt

Page 31: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and C++ OQL Queries and C++ (1/2)(1/2)

Theorem: Ein Type-System, das Theorem: Ein Type-System, das parametrisierten Polymorphismus parametrisierten Polymorphismus unterstützt erlaubt statisches type-unterstützt erlaubt statisches type-checking von OQL Querieschecking von OQL Queries

Beweis: Dieses Resultat wird erziehlt, da Beweis: Dieses Resultat wird erziehlt, da zur Kompilierzeit jedem Collection-Type zur Kompilierzeit jedem Collection-Type ein bestimmter Type zugeordnet wird. ein bestimmter Type zugeordnet wird. Dadurch wird jeder Element-Type Dadurch wird jeder Element-Type eindeutig einer Menge zugeordnet.eindeutig einer Menge zugeordnet.

Die Variablen einer Anfrage gehören Die Variablen einer Anfrage gehören einem spezifischen Types aneinem spezifischen Types an

Page 32: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries and C++ OQL Queries and C++ (2/2)(2/2)

Beispiel in C++Beispiel in C++Collection <Professor> professors;Collection <Course> courses;

select xfrom professors as x, x.courses() as ywhere x.salary() > 70000and y.enrollment > 50

Korrolar: Das Type-System von C++ erlaubt Korrolar: Das Type-System von C++ erlaubt statisches type-checking von OQL Queriesstatisches type-checking von OQL Queries

Page 33: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries with Order OQL Queries with Order by (1/2)by (1/2)

Eine Anfrage in allgemeiner Form:Eine Anfrage in allgemeiner Form:

select projectionfrom e1 as x1, e2 as x2, … ,en as xn

where eorder by e´1, e´2, … , e´m

Auch hier treten die schon Auch hier treten die schon bekannten Probleme aufbekannten Probleme auf

Ein Vergleich von zwei Objekten Ein Vergleich von zwei Objekten kommt hinzukommt hinzu

Page 34: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

OQL Queries with Order OQL Queries with Order by (2/2)by (2/2)

Theorem: Bei expliziter Typangabe für Theorem: Bei expliziter Typangabe für jede Variabel innerhalb der Anfrage jede Variabel innerhalb der Anfrage mit Order by Klausel im Java-Typ-mit Order by Klausel im Java-Typ-System ist ein type-checking möglich, System ist ein type-checking möglich, allerdings wiederum nur zur Laufzeit allerdings wiederum nur zur Laufzeit

Theorem: Ein Type-System, das Theorem: Ein Type-System, das parametrisierten Polymorphismus parametrisierten Polymorphismus unterstützt erlaubt statisches type-unterstützt erlaubt statisches type-checking von OQL Queries mit Order checking von OQL Queries mit Order by Klausel by Klausel

Page 35: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java OQL (1/6)Java OQL (1/6)

Java OQL ist eine Untersprach von Java OQL ist eine Untersprach von Java und ermöglicht eine leichtere Java und ermöglicht eine leichtere Anbindung an die DatenbankAnbindung an die Datenbank

Es gibt zwei Formen dieser Es gibt zwei Formen dieser VereinfachungVereinfachung durch Methodendurch Methoden durch Klassendurch Klassen

Page 36: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java OQL (2/6)Java OQL (2/6)

Zunächst die Möglichkeit durch MethodenZunächst die Möglichkeit durch Methoden

interface DCollection extends java.util.Collection { Object selectElement(String predicate) java.util.Iterator select(String predicate) DCollection query(String predicate) boolean existsElement(String predicate)}

Die anderen Interfaces aus dem Die anderen Interfaces aus dem ODMG Standard (DSet, DBag, DList ODMG Standard (DSet, DBag, DList …) werden von diesem Interface …) werden von diesem Interface abgeleitetabgeleitet

Page 37: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java OQL (3/6)Java OQL (3/6)

Ein Java OQL QueryEin Java OQL Query

DCollection bestPaid;bestPaid = employees.query( „for all x in employees: this.salary() >= x.salary()“);

Das obige Beispiel findet die Menge Das obige Beispiel findet die Menge der bestbezahltesden Mitarbeiterder bestbezahltesden Mitarbeiter

Page 38: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java OQL (4/6)Java OQL (4/6)

Die Anfrage wird mittels eines Strings Die Anfrage wird mittels eines Strings gestelltgestellt Type-checking im Java-Type-System ist stets Type-checking im Java-Type-System ist stets

möglich, unabhängig vom Stringinhaltmöglich, unabhängig vom Stringinhalt Der String muß während der Laufzeit Der String muß während der Laufzeit

ausgewertet werdenausgewertet werden Theorem: Das type-system von Java Theorem: Das type-system von Java

kann mit Java-OQL-Queries nicht kann mit Java-OQL-Queries nicht umgehen, so daß ein type-checking nicht umgehen, so daß ein type-checking nicht möglich istmöglich ist

Page 39: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java OQL (5/6)Java OQL (5/6)

Java OQL Queries als KlassenJava OQL Queries als Klassenclass OQLQuery { // Java constructors OQLQuery create(String query); void bind(Object parameter); Object execute();}

DBag selectedEmployee;OQLQuery query = new OQLQuery();query.create(„select well_paid(emp: x.name, sal: x.salary()) from employees as x where x.salary() > $1 and x.dept.NoOfEmployees() > $2“);query.bind(50000); query.bind(100);selectedEmployees = (DBag) query.execute();

Page 40: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Java OQL (6/6)Java OQL (6/6)

Es werden gut bezahlte Mitarbeiter in Es werden gut bezahlte Mitarbeiter in großen Abteilungen gesuchtgroßen Abteilungen gesucht

Bei diesem Beispiel treten mehrere Bei diesem Beispiel treten mehrere Probleme auf:Probleme auf: Es kann nur ein Laufzeitcheck ausgeführt Es kann nur ein Laufzeitcheck ausgeführt

werdenwerden Die Übergabeparameter (mittels Die Übergabeparameter (mittels

query.bind()) müssen zu dem Query passenquery.bind()) müssen zu dem Query passen Der Rückgabewert von query.execute() ist Der Rückgabewert von query.execute() ist

Object, die Select-Anweisung liefert eine Object, die Select-Anweisung liefert eine Menge von ObjektenMenge von Objekten

Page 41: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

C++ und OQL-C++ und OQL-ErweiterungErweiterung

Auch für C++ gibt es eine Erweiterung für Auch für C++ gibt es eine Erweiterung für die vereinfachte Anbindung an die Datenbankdie vereinfachte Anbindung an die Datenbank

Die in C++ zur Verfügung stehenden Die in C++ zur Verfügung stehenden Templates helfen hier auch nichtTemplates helfen hier auch nicht

Die Queries werden als String gegeben…Die Queries werden als String gegeben… Beim type-checking sind Strings stets Beim type-checking sind Strings stets

typkorrekttypkorrekt C++ unterliegt den selben Problemen, die C++ unterliegt den selben Problemen, die

eben im Java-Typ-System diskutiert wurdeneben im Java-Typ-System diskutiert wurden

Page 42: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Geordnete Mengen (1/2)Geordnete Mengen (1/2)

Weder im ODMG-Standard noch im Java Weder im ODMG-Standard noch im Java oder C++ Type-System können oder C++ Type-System können geordnete Menge auf Typkorrektheit geordnete Menge auf Typkorrektheit geprüft werdengeprüft werden

Ein Beispiel im ODMG Object ModelEin Beispiel im ODMG Object Modelinterface Ordered_Collection: Collection { unsigned long cardinality(); boolean is_empty(); void insert_element(in Ordered element); void remove_element(in Ordered element); boolean contains_element(in Ordered element); Iterator create_iterator();}

Page 43: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Geordnete Mengen (2/2)Geordnete Mengen (2/2)

Das Interface Ordered_Collection erbt Das Interface Ordered_Collection erbt von Collectionvon Collection

Die Vererbungsregeln wurden bei den Die Vererbungsregeln wurden bei den folgenden Funktionen nicht befolgtfolgenden Funktionen nicht befolgt insert_elementinsert_element remove_element remove_element contains_elementcontains_element

Die Funktionsköpfe (die Die Funktionsköpfe (die Aufrufparameter) dieser Funktionen Aufrufparameter) dieser Funktionen wurden geändertwurden geändert

Page 44: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Bounded Type Bounded Type QuantificationQuantification

Theorem: Ein Type-System, das bounded Theorem: Ein Type-System, das bounded type quantificatien unterstützt und das type quantificatien unterstützt und das top-Object beinhaltet kann geordnete top-Object beinhaltet kann geordnete Mengen auf Typkorrektheit überprüfenMengen auf Typkorrektheit überprüfen

interface Ordered_Collection <T: Ordered>: Collection <T>{...}

Eiffel unterstützt diese Methode, doch C++ Eiffel unterstützt diese Methode, doch C++ benötigt eine klare Vererbungsstrukturbenötigt eine klare Vererbungsstruktur

Page 45: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

F-Bounded F-Bounded polymorphism (1/3)polymorphism (1/3)

Theorem: Wenn die C++-Anbindung an Theorem: Wenn die C++-Anbindung an die Datenbank F-bounded polymorphism die Datenbank F-bounded polymorphism unterstützt ist ein statisches type-unterstützt ist ein statisches type-checking von Queries möglichchecking von Queries möglich

interface Ordered_Collection <T: Ord_element <T>> :Collection <T>{...}

Page 46: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

F-Bounded F-Bounded polymorphism (2/3)polymorphism (2/3)

BeispielBeispiel

interface Employee { String name; short id:

//boolean leq(Employee e);

}

Dieses Interface entspricht nicht den Dieses Interface entspricht nicht den Vererbungsregeln, da Employee nicht von Vererbungsregeln, da Employee nicht von Ord_element <Employee> abgeleitet wirdOrd_element <Employee> abgeleitet wird

Page 47: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

F-Bounded F-Bounded polymorphism (3/3)polymorphism (3/3)

Durch das obige Interface werden die Durch das obige Interface werden die Vererbungsstrukturen wiederhergestelltVererbungsstrukturen wiederhergestellt

Es wird garantiert, daß die Methoden Es wird garantiert, daß die Methoden die richtige Signatur habendie richtige Signatur haben

Statisches Type-checking ist möglichStatisches Type-checking ist möglich

interface Ord_element <Employee> { boolean leq(Employee e);}

Page 48: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ZusammenfassungZusammenfassung

OQL Queries können im ODMG-Standard OQL Queries können im ODMG-Standard nicht auf Korrektheit geprüft werdennicht auf Korrektheit geprüft werden

OQL Queries können in der Java-Anbindung OQL Queries können in der Java-Anbindung nicht auf Korrektheit überprüft werdennicht auf Korrektheit überprüft werden

Parameter Polymorphismus sollte von einer Parameter Polymorphismus sollte von einer Sprache für die Datenbank unterstüzt Sprache für die Datenbank unterstüzt werdenwerden

Um geordnete Menge korrekt zu Um geordnete Menge korrekt zu überprüfen wird F-bounded polymorphism überprüfen wird F-bounded polymorphism benötigtbenötigt

Page 49: Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

ReferenzenReferenzen Type-Checking OQL Queries In The ODMG Type SystemType-Checking OQL Queries In The ODMG Type System

Suad Alagic – Wichita State UniversitySuad Alagic – Wichita State University

ACM Transaction on Database Systems, Vol.24, No. 3ACM Transaction on Database Systems, Vol.24, No. 3

September 1999, Page 319-360September 1999, Page 319-360

The Object Data Standard ODMG 3.0The Object Data Standard ODMG 3.0

R.G.G. Cattell, Douglas Barry, Mark Berler, Jeff Eastman,R.G.G. Cattell, Douglas Barry, Mark Berler, Jeff Eastman,

David Jordan, Craig Russell, Olaf Schadow, Torsten David Jordan, Craig Russell, Olaf Schadow, Torsten StaniedaStanieda

Fernando VelezFernando Velez

Verlag: Morgan Kaufmann PublishersVerlag: Morgan Kaufmann Publishers

ISBN: 1-55860-647-5ISBN: 1-55860-647-5