Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung M. Spiekermann Fakultät für Mathematik und Informatik 12.10.2007 c 2007 FernUniversität in Hagen M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 1 / 21 Outline Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Algebra Module Implementierung von Datentypen Implementierung von Operatoren Implementierung von Datentypen Stromverarbeitung Implementierung von Operatoren Stromverarbeitung M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 2 / 21 Algebra Module Implementierung von Algebren in SECONDO Funktionen eines Algebramoduls M. Spiekermann Command Manager Algebra Module Query Processor & Catalog Alg1 Alg2 Algn Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Storage Manager & Tools ◮ Implementiert Typkonstruktoren (Datentypen) und Operatoren ◮ Definiert eine textuelle Darstellung für die Datentypen, in Form einer geschachtelten Liste ◮ Erlaubt die Definition einer Syntax für die Operatoren. Dies ermöglicht eine für Menschen leserliche Darstellung von Auswertungsplänen. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 3 / 21 Algebra Module Implementierung von Algebren in SECONDO Funktionen eines Algebramoduls M. Spiekermann Command Manager Algebra Module Query Processor & Catalog Alg1 Alg2 Algn Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Storage Manager & Tools ◮ Implementiert Typkonstruktoren (Datentypen) und Operatoren ◮ Definiert eine textuelle Darstellung für die Datentypen, in Form einer geschachtelten Liste ◮ Erlaubt die Definition einer Syntax für die Operatoren. Dies ermöglicht eine für Menschen leserliche Darstellung von Auswertungsplänen. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 3 / 21 Algebra Module Implementierung von Algebren in SECONDO Funktionen eines Algebramoduls M. Spiekermann Command Manager Algebra Module Query Processor & Catalog Alg1 Alg2 Algn Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Storage Manager & Tools ◮ Implementiert Typkonstruktoren (Datentypen) und Operatoren ◮ Definiert eine textuelle Darstellung für die Datentypen, in Form einer geschachtelten Liste ◮ Erlaubt die Definition einer Syntax für die Operatoren. Dies ermöglicht eine für Menschen leserliche Darstellung von Auswertungsplänen. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 3 / 21 Algebra Module Spezifikation einer Algebra Implementierung von Algebren in SECONDO M. Spiekermann ◮ ◮ Eine Algebra wird nach dem Konzept der Second Order Signature beschrieben. Die im folgenden beschriebene Algebra ist recht simpel und enthalt keine Typkonstruktoren, die selbt wieder andere Typen als Parameter haben. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 4 / 21 Algebra Module Spezifikation einer Algebra Implementierung von Algebren in SECONDO M. Spiekermann ◮ ◮ Eine Algebra wird nach dem Konzept der Second Order Signature beschrieben. Die im folgenden beschriebene Algebra ist recht simpel und enthalt keine Typkonstruktoren, die selbt wieder andere Typen als Parameter haben. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 4 / 21 Algebra Module Implementierung von Algebren in SECONDO Spezifikation einer Algebra M. Spiekermann ◮ ◮ Eine Algebra wird nach dem Konzept der Second Order Signature beschrieben. Die im folgenden beschriebene Algebra ist recht simpel und enthalt keine Typkonstruktoren, die selbt wieder andere Typen als Parameter haben. Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung kinds SIMPLE type constructors o SIMPLE xpoint, xrectangle o o o bool bool bool inside inside intersects operators xpoint u xrectangle xrectangle u xrectangle xrectangle u xrectangle M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 4 / 21 Algebra Module Grundgerüst einer Implementierungsdatei Implementierung von Algebren in SECONDO M. Spiekermann #include " Algebra . h " #include " NestedList . h " #include " Symbols . h " Algebra Module extern NestedList * nl ; extern QueryProcesso r * qp ; Implementierung von Datentypen using namespace symbols ; Implementierung von Operatoren namespace prt { c l a s s XPoint {}; Stromverarbeitung c l a s s XRectangle {}; c l a s s PointRecta n g le A lg e b ra : public Algebra { public : PointRecta n gl e Al g e br a () : Algebra () { AddTypeCons t ru c to r ( & xpointTC ); AddTypeCons t ru c to r ( & xrectangleTC ); xpointTC . AssociateKind ( SIMPLE ); xrectangleTC . AssociateKind ( SIMPLE ); AddOperator ( intersectsInf o () , intersectsFun , RectRectBool ); ValueMapping insideFuns [] = { insideFun_PR , insideFun_RR , 0 }; AddOperator ( insideInfo () , insideFuns , insideSelect , insideTypeMa p ); } }; M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 5 / 21 Implementierung von Datentypen Die Klasse XPoint Implementierung von Algebren in SECONDO M. Spiekermann c l a s s XPoint { public : XPoint ( i n t x , i n t y ); XPoint ( const XPoint & rhs ); ~XPoint (); int int void void GetX () const ; GetY () const ; SetX ( i n t x ); SetY ( i n t y ); Algebra Module Implementierung von Datentypen Implementierung von Operatoren XPoint * Clone (); s t a t i c Word In ( const ListExpr typeInfo , const ListExpr instance , const i n t errorPos , ListExpr & errorInfo , bool & correct ); Stromverarbeitung s t a t i c ListExpr Out ( ListExpr typeInfo , Word value ); s t a t i c Word Create ( const ListExpr typeInfo ); s t a t i c void Delete ( const ListExpr typeInfo , Word& w ); s t a t i c void Close ( const ListExpr typeInfo , Word& w ); s t a t i c Word Clone ( const ListExpr typeInfo , const Word& w ); s t a t i c bool KindCheck ( ListExpr type , ListExpr & errorInfo ); stati c int SizeOfObj (); s t a t i c ListExpr Property (); private : i n l i n e XPoint () {} int x; int y; }; M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 6 / 21 Implementierung von Datentypen Externe/Interne Darstellung Implementierung von Algebren in SECONDO M. Spiekermann ◮ Beispiele für externe Darstellungen: ( OBJECT alexanderpla tz () point (11068.0 12895.0)) ( OBJECT eight () instant " 2003 -11 -20 -08:00 " ) ( OBJECT intset_a10 () ( array i n t ) (1 2 3 4 5 6 7 8 9 10)) ◮ Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Solche Listendarstellungen können von Secondo eingelesen werden (restore command). M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 7 / 21 Implementierung von Datentypen Externe/Interne Darstellung Implementierung von Algebren in SECONDO M. Spiekermann ◮ Beispiele für externe Darstellungen: ( OBJECT alexanderpla tz () point (11068.0 12895.0)) ( OBJECT eight () instant " 2003 -11 -20 -08:00 " ) ( OBJECT intset_a10 () ( array i n t ) (1 2 3 4 5 6 7 8 9 10)) ◮ Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Solche Listendarstellungen können von Secondo eingelesen werden (restore command). M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 7 / 21 Implementierung von Datentypen Die Programmierschnittstelle für Listen Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Der Nested List Parser(Compiler) übersetzt textuelle Listen. ◮ Eine globale Instanz der Klasse NestedList stellt diese dann zur Verfügung. ◮ Einzelne Listen werden durch einen Wert des Typs ListExpr referenziert. ◮ Die Klasse NestedList stellt eine Programmierschittstelle zur Analyse und Konstruktion von Listen bereit. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 8 / 21 Implementierung von Datentypen Die Programmierschnittstelle für Listen Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Der Nested List Parser(Compiler) übersetzt textuelle Listen. ◮ Eine globale Instanz der Klasse NestedList stellt diese dann zur Verfügung. ◮ Einzelne Listen werden durch einen Wert des Typs ListExpr referenziert. ◮ Die Klasse NestedList stellt eine Programmierschittstelle zur Analyse und Konstruktion von Listen bereit. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 8 / 21 Implementierung von Datentypen Die Programmierschnittstelle für Listen Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Der Nested List Parser(Compiler) übersetzt textuelle Listen. ◮ Eine globale Instanz der Klasse NestedList stellt diese dann zur Verfügung. ◮ Einzelne Listen werden durch einen Wert des Typs ListExpr referenziert. ◮ Die Klasse NestedList stellt eine Programmierschittstelle zur Analyse und Konstruktion von Listen bereit. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 8 / 21 Implementierung von Datentypen Die Programmierschnittstelle für Listen Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Der Nested List Parser(Compiler) übersetzt textuelle Listen. ◮ Eine globale Instanz der Klasse NestedList stellt diese dann zur Verfügung. ◮ Einzelne Listen werden durch einen Wert des Typs ListExpr referenziert. ◮ Die Klasse NestedList stellt eine Programmierschittstelle zur Analyse und Konstruktion von Listen bereit. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 8 / 21 Implementierung von Datentypen In- und Out-Funktionen Implementierung von Algebren in SECONDO M. Spiekermann ListExpr XPoint :: Out ( ListExpr typeInfo , Word value ) { XPoint * point = s t a t i c c a s t <XPoint * >( value . addr ); return nl - > TwoElemList ( nl - > IntAtom ( point - > GetX ()) , nl - > IntAtom ( point - > GetY ())); Algebra Module Implementierung von Datentypen Implementierung von Operatoren } Word XPoint :: In ( const ListExpr typeInfo , const ListExpr instance , const i n t errorPos , ListExpr & errorInfo , bool & correct ) { Word w = SetWord ( Address (0)); i f ( nl - > ListLength ( instance ) == 2 ) { ListExpr First = nl - > First ( instance ); ListExpr Second = nl - > Second ( instance ); Stromverarbeitung i f ( nl - > IsAtom ( First ) && nl - > AtomType ( First ) == IntType && nl - > IsAtom ( Second ) && nl - > AtomType ( Second ) == IntType ) { correct = true ; w . addr = new XPoint ( nl - > IntValue ( First ) , nl - > IntValue ( Second )); return w ; } } correct = f a l s e ; cmsg . inFunError ( " Expecting a list of two integer atoms ! " ); return w ; } M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 9 / 21 Implementierung von Datentypen Persistenz ◮ Die interne Darstellung von Objekten (hier z.B. Klasse XPoint) wird vom Storage Manager in Dateien geschrieben. ◮ Große Objekte können nicht komplett im Hauptspeicher gehalten werden. ◮ Ein Objekt kann im Zustand open oder closed sein. ◮ Mögliche Zustandsübergänge: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 10 / 21 Implementierung von Datentypen Persistenz ◮ Die interne Darstellung von Objekten (hier z.B. Klasse XPoint) wird vom Storage Manager in Dateien geschrieben. ◮ Große Objekte können nicht komplett im Hauptspeicher gehalten werden. ◮ Ein Objekt kann im Zustand open oder closed sein. ◮ Mögliche Zustandsübergänge: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 10 / 21 Implementierung von Datentypen Persistenz ◮ Die interne Darstellung von Objekten (hier z.B. Klasse XPoint) wird vom Storage Manager in Dateien geschrieben. ◮ Große Objekte können nicht komplett im Hauptspeicher gehalten werden. ◮ Ein Objekt kann im Zustand open oder closed sein. ◮ Mögliche Zustandsübergänge: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 10 / 21 Implementierung von Datentypen Implementierung von Algebren in SECONDO Persistenz ◮ Die interne Darstellung von Objekten (hier z.B. Klasse XPoint) wird vom Storage Manager in Dateien geschrieben. ◮ Große Objekte können nicht komplett im Hauptspeicher gehalten werden. ◮ Ein Objekt kann im Zustand open oder closed sein. ◮ Mögliche Zustandsübergänge: M. Spiekermann Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung create open save opened closed clone close delete ◮ M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 10 / 21 Implementierung von Datentypen Implementierung von Algebren in SECONDO Persistenz ◮ Die interne Darstellung von Objekten (hier z.B. Klasse XPoint) wird vom Storage Manager in Dateien geschrieben. ◮ Große Objekte können nicht komplett im Hauptspeicher gehalten werden. ◮ Ein Objekt kann im Zustand open oder closed sein. ◮ Mögliche Zustandsübergänge: M. Spiekermann Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung create open save opened closed clone close delete ◮ M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 10 / 21 Implementierung von Datentypen Implementierungs-Beispiele Implementierung von Algebren in SECONDO M. Spiekermann Word XPoint :: Create ( const ListExpr typeInfo ) { return ( SetWord ( new XPoint( 0 , 0 ) )); } void XPoint :: Delete ( const ListExpr typeInfo , Word& w ) { d e l e t e s t a t i c c a s t <XPoint * >( w . addr ); w . addr = 0; } Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung void XPoint :: Close ( const ListExpr typeInfo , Word& w ) { d e l e t e s t a t i c c a s t <XPoint * >( w . addr ); w . addr = 0; } Word XPoint :: Clone ( const ListExpr typeInfo , const Word& w ) { XPoint * p = s t a t i c c a s t <XPoint * >( w . addr ); return SetWord ( new XPoint (* p ) ); } M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 11 / 21 Implementierung von Datentypen Kind Checking Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Jeder Typkonstruktor kann selbst auch Parameter haben. ◮ Die komplette Typbeschreibung, z.B. (array int), ist daher ggf. zu prüfen. ◮ Argumentlose Typen, wie z.B. xpoint müssen daher nur prüfen, ob die Liste aus einem Listenatom vom Typ Symbol mit Wert xpoint besteht. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 12 / 21 Implementierung von Datentypen Kind Checking Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Jeder Typkonstruktor kann selbst auch Parameter haben. ◮ Die komplette Typbeschreibung, z.B. (array int), ist daher ggf. zu prüfen. ◮ Argumentlose Typen, wie z.B. xpoint müssen daher nur prüfen, ob die Liste aus einem Listenatom vom Typ Symbol mit Wert xpoint besteht. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 12 / 21 Implementierung von Datentypen Kind Checking Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module ◮ Jeder Typkonstruktor kann selbst auch Parameter haben. ◮ Die komplette Typbeschreibung, z.B. (array int), ist daher ggf. zu prüfen. ◮ Argumentlose Typen, wie z.B. xpoint müssen daher nur prüfen, ob die Liste aus einem Listenatom vom Typ Symbol mit Wert xpoint besteht. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 12 / 21 Implementierung von Operatoren Überblick Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Jeder Operator benötigt: ◮ Ein Type-Mapping, welches die Typen der eingehenden Parameter prüft und ggf. den Rückgabetyp berechnet. ◮ Überladene Operatoren benötigen zusätzlich eine Selection-Funktion, die bestimmt welche Variante benutzt werden soll. ◮ Ein oder mehrere Value-Mapping Funktionen. ◮ Eine Beschreibung für den Benutzer. ◮ Eine Syntaxspezifikation und Beispiele. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 13 / 21 Implementierung von Operatoren Überblick Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Jeder Operator benötigt: ◮ Ein Type-Mapping, welches die Typen der eingehenden Parameter prüft und ggf. den Rückgabetyp berechnet. ◮ Überladene Operatoren benötigen zusätzlich eine Selection-Funktion, die bestimmt welche Variante benutzt werden soll. ◮ Ein oder mehrere Value-Mapping Funktionen. ◮ Eine Beschreibung für den Benutzer. ◮ Eine Syntaxspezifikation und Beispiele. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 13 / 21 Implementierung von Operatoren Überblick Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Jeder Operator benötigt: ◮ Ein Type-Mapping, welches die Typen der eingehenden Parameter prüft und ggf. den Rückgabetyp berechnet. ◮ Überladene Operatoren benötigen zusätzlich eine Selection-Funktion, die bestimmt welche Variante benutzt werden soll. ◮ Ein oder mehrere Value-Mapping Funktionen. ◮ Eine Beschreibung für den Benutzer. ◮ Eine Syntaxspezifikation und Beispiele. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 13 / 21 Implementierung von Operatoren Überblick Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Jeder Operator benötigt: ◮ Ein Type-Mapping, welches die Typen der eingehenden Parameter prüft und ggf. den Rückgabetyp berechnet. ◮ Überladene Operatoren benötigen zusätzlich eine Selection-Funktion, die bestimmt welche Variante benutzt werden soll. ◮ Ein oder mehrere Value-Mapping Funktionen. ◮ Eine Beschreibung für den Benutzer. ◮ Eine Syntaxspezifikation und Beispiele. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 13 / 21 Implementierung von Operatoren Überblick Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module Jeder Operator benötigt: ◮ Ein Type-Mapping, welches die Typen der eingehenden Parameter prüft und ggf. den Rückgabetyp berechnet. ◮ Überladene Operatoren benötigen zusätzlich eine Selection-Funktion, die bestimmt welche Variante benutzt werden soll. ◮ Ein oder mehrere Value-Mapping Funktionen. ◮ Eine Beschreibung für den Benutzer. ◮ Eine Syntaxspezifikation und Beispiele. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung 12.10.2007 13 / 21 Implementierung von Operatoren Type Mapping und Selection Funktionen Implementierung von Algebren in SECONDO M. Spiekermann ListExpr insideTypeMap ( ListExpr args ) { NList type ( args ); const string errMsg = " Expecting two rectangles " " or a point and a rectangle " ; // first alternative : xpoint x xrectangle -> bool i f ( type == NList ( XPOINT , XRECTANGLE ) ) { return NList ( BOOL ). listExpr (); } Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung // second alternative : xrectangle x xrectangle -> bool i f ( type == NList ( XRECTANGLE , XRECTANGLE ) ) { return NList ( BOOL ). listExpr (); } return NList :: typeError ( errMsg ); } int insideSelect ( ListExpr args ) { NList type ( args ); i f ( type . first (). isSymbol ( XRECTANGLE ) ) return 1; else return 0; } M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 14 / 21 Implementierung von Operatoren Implementierung von Algebren in SECONDO Value Mapping M. Spiekermann int insideFun_PR (Word* args , Word& result , i n t message , Word& local , Supplier s ) { // cout << " insideFun_PR " << endl ; XPoint * p = s t a t i c c a s t <XPoint * >( args [0]. addr ); XRectangle * r = s t a t i c c a s t < XRectangle * >( args [1]. addr ); Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung result = qp - > ResultStorag e ( s ); // query processor has provided // a CcBool instance for the result CcBool * b = s t a t i c c a s t < CcBool * >( result . addr ); bool res = ( && && && p - > GetX () p - > GetX () p - > GetY () p - > GetY () >= <= >= <= r - > GetXLeft () r - > GetXRight () r - > GetYBottom () r - > GetYTop () ); b - > Set ( true , res ); // the first argument says the boolean // value is defined , the second is the // real boolean value ) return 0; } M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 15 / 21 Implementierung von Operatoren Operatorbeschreibungen Implementierung von Algebren in SECONDO M. Spiekermann Algebra Module s t r u c t insideInfo : OperatorInfo { insideInfo () { name = INSIDE ; Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung signature = XPOINT + " x " + XRECTANGLE + " -> " + BOOL ; // since this is an overloaded operator we append // an alternative signature here appendSignat ur e ( XRECTANGLE + " x " + XRECTANGLE + " -> " + BOOL ); syntax = " _ " + INSIDE + " _ " ; meaning = " Inside predicate . " ; } }; M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 16 / 21 Implementierung von Operatoren .spec and .example Dateien Implementierung von Algebren in SECONDO M. Spiekermann < PointRecta ng l e Al g eb r a . spec >: ----------------------------operator intersects alias INTERSECTS pattern _ infixop _ operator inside alias INSIDE pattern _ infixop _ Algebra Module < PointRectang l e . example >: ------------------------Database : prttest Restore : YES Implementierung von Operatoren Operator : Number : Signature : Example : Result : inside 1 xpoint x xrectangle -> bool query p1 inside r1 TRUE Operator : Number : Signature : Example : Result : inside 2 xrectangle x xrectangle -> bool query r2 inside r1 TRUE Operator : Number : Signature : Example : Result : intersects 1 xrectangle x xrectangle -> bool query r1 intersects r2 TRUE M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO Implementierung von Datentypen Stromverarbeitung 12.10.2007 17 / 21 Stromverarbeitung Modul StreamExampleAlgebra Implementierung von Algebren in SECONDO M. Spiekermann Diese Algebra bietet keine neuen Typen an, aber folgende Operationen: int x int -> stream(int) Algebra Module Implementierung von Datentypen ◮ intstream: ◮ countintstream: stream(int) -> int Implementierung von Operatoren ◮ printintstream: stream(int) -> stream(int) Stromverarbeitung ◮ filterintstream: stream(int) x (int -> bool) -> stream(int) ◮ In Datenbanksystemen spielt Stromverarbeitung eine wichtige Rolle, da dies die Implementierung effizienter Auswertungspläne erlaubt. ◮ Keine Stromverarbeitung => alle Zwischenergebnisse müssen komplett berechnet werden. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 18 / 21 Stromverarbeitung Modul StreamExampleAlgebra Implementierung von Algebren in SECONDO M. Spiekermann Diese Algebra bietet keine neuen Typen an, aber folgende Operationen: int x int -> stream(int) Algebra Module Implementierung von Datentypen ◮ intstream: ◮ countintstream: stream(int) -> int Implementierung von Operatoren ◮ printintstream: stream(int) -> stream(int) Stromverarbeitung ◮ filterintstream: stream(int) x (int -> bool) -> stream(int) ◮ In Datenbanksystemen spielt Stromverarbeitung eine wichtige Rolle, da dies die Implementierung effizienter Auswertungspläne erlaubt. ◮ Keine Stromverarbeitung => alle Zwischenergebnisse müssen komplett berechnet werden. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 18 / 21 Stromverarbeitung Modul StreamExampleAlgebra Implementierung von Algebren in SECONDO M. Spiekermann Diese Algebra bietet keine neuen Typen an, aber folgende Operationen: int x int -> stream(int) Algebra Module Implementierung von Datentypen ◮ intstream: ◮ countintstream: stream(int) -> int Implementierung von Operatoren ◮ printintstream: stream(int) -> stream(int) Stromverarbeitung ◮ filterintstream: stream(int) x (int -> bool) -> stream(int) ◮ In Datenbanksystemen spielt Stromverarbeitung eine wichtige Rolle, da dies die Implementierung effizienter Auswertungspläne erlaubt. ◮ Keine Stromverarbeitung => alle Zwischenergebnisse müssen komplett berechnet werden. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 18 / 21 Stromverarbeitung Modul StreamExampleAlgebra Implementierung von Algebren in SECONDO M. Spiekermann Diese Algebra bietet keine neuen Typen an, aber folgende Operationen: int x int -> stream(int) Algebra Module Implementierung von Datentypen ◮ intstream: ◮ countintstream: stream(int) -> int Implementierung von Operatoren ◮ printintstream: stream(int) -> stream(int) Stromverarbeitung ◮ filterintstream: stream(int) x (int -> bool) -> stream(int) ◮ In Datenbanksystemen spielt Stromverarbeitung eine wichtige Rolle, da dies die Implementierung effizienter Auswertungspläne erlaubt. ◮ Keine Stromverarbeitung => alle Zwischenergebnisse müssen komplett berechnet werden. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 18 / 21 Stromverarbeitung Modul StreamExampleAlgebra Implementierung von Algebren in SECONDO M. Spiekermann Diese Algebra bietet keine neuen Typen an, aber folgende Operationen: int x int -> stream(int) Algebra Module Implementierung von Datentypen ◮ intstream: ◮ countintstream: stream(int) -> int Implementierung von Operatoren ◮ printintstream: stream(int) -> stream(int) Stromverarbeitung ◮ filterintstream: stream(int) x (int -> bool) -> stream(int) ◮ In Datenbanksystemen spielt Stromverarbeitung eine wichtige Rolle, da dies die Implementierung effizienter Auswertungspläne erlaubt. ◮ Keine Stromverarbeitung => alle Zwischenergebnisse müssen komplett berechnet werden. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 18 / 21 Stromverarbeitung Modul StreamExampleAlgebra Implementierung von Algebren in SECONDO M. Spiekermann Diese Algebra bietet keine neuen Typen an, aber folgende Operationen: int x int -> stream(int) Algebra Module Implementierung von Datentypen ◮ intstream: ◮ countintstream: stream(int) -> int Implementierung von Operatoren ◮ printintstream: stream(int) -> stream(int) Stromverarbeitung ◮ filterintstream: stream(int) x (int -> bool) -> stream(int) ◮ In Datenbanksystemen spielt Stromverarbeitung eine wichtige Rolle, da dies die Implementierung effizienter Auswertungspläne erlaubt. ◮ Keine Stromverarbeitung => alle Zwischenergebnisse müssen komplett berechnet werden. M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 18 / 21 Stromverarbeitung Implementierung eines Stromoperators Implementierung von Algebren in SECONDO M. Spiekermann Man kann drei Fälle unterscheiden: ◮ Operatoren, die einen Strom erzeugen. ◮ Operatoren, die einen Strom verbrauchen. ◮ Operatoren, die Stromelemente verarbeiten und selbst auch einen Strom erzeugen. ◮ Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Ein Strom kann dabei folgende Zustände haben: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 19 / 21 Stromverarbeitung Implementierung eines Stromoperators Implementierung von Algebren in SECONDO M. Spiekermann Man kann drei Fälle unterscheiden: ◮ Operatoren, die einen Strom erzeugen. ◮ Operatoren, die einen Strom verbrauchen. ◮ Operatoren, die Stromelemente verarbeiten und selbst auch einen Strom erzeugen. ◮ Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Ein Strom kann dabei folgende Zustände haben: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 19 / 21 Stromverarbeitung Implementierung eines Stromoperators Implementierung von Algebren in SECONDO M. Spiekermann Man kann drei Fälle unterscheiden: ◮ Operatoren, die einen Strom erzeugen. ◮ Operatoren, die einen Strom verbrauchen. ◮ Operatoren, die Stromelemente verarbeiten und selbst auch einen Strom erzeugen. ◮ Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Ein Strom kann dabei folgende Zustände haben: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 19 / 21 Stromverarbeitung Implementierung eines Stromoperators Implementierung von Algebren in SECONDO M. Spiekermann Man kann drei Fälle unterscheiden: ◮ Operatoren, die einen Strom erzeugen. ◮ Operatoren, die einen Strom verbrauchen. ◮ Operatoren, die Stromelemente verarbeiten und selbst auch einen Strom erzeugen. ◮ Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Ein Strom kann dabei folgende Zustände haben: M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 19 / 21 Stromverarbeitung Implementierung von Algebren in SECONDO Implementierung eines Stromoperators M. Spiekermann Man kann drei Fälle unterscheiden: Algebra Module ◮ Operatoren, die einen Strom erzeugen. ◮ Operatoren, die einen Strom verbrauchen. ◮ Operatoren, die Stromelemente verarbeiten und selbst D auch einen Strom erzeugen. ◮ D D Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung Ein Strom kann dabei folgende Zustände haben: CLOSE REQUEST, YIELD OPEN state closed state open CLOSE ◮ REQUEST, CANCEL M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 19 / 21 Stromverarbeitung Operator intstream Implementierung von Algebren in SECONDO M. Spiekermann int intstreamFun (Word* args , Word& result , i n t message , Word& local , Supplier s ) { Range * range = s t a t i c c a s t < Range * >( local . addr ); switch ( message ) { case OPEN : { // initialize the local storage CcInt * i1 = s t a t i c c a s t < CcInt * >( args [0]. addr ); CcInt * i2 = s t a t i c c a s t < CcInt * >( args [1]. addr ); range = new Range ( i1 , i2 ); local . addr = range ; return 0; } case REQUEST : { // return the next stream element Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung i f ( range - > current <= range - > last ) { CcInt * elem = new CcInt ( true , range - > current ++); result . addr = elem ; return YIELD ; } else { // you should always set the result to null // before you return a CANCEL result . addr = 0; return CANCEL ; } } case CLOSE : { // free the local storage delete return } default: return range ; 0; { /* should never happen */ -1; }}} M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 20 / 21 Stromverarbeitung Implementierung von Algebren in SECONDO Operator countintstream M. Spiekermann int countFun (Word* args , Word& result , i n t message , Word& local , Supplier s ) { qp - > Open ( args [0]. addr ); // open the argument stream Word elem = SetWord ( Address (0)); // retrieve the first element qp - > Request ( args [0]. addr , elem ); i n t count = 0; while ( qp - > Received ( args [0]. addr ) ) { count ++; // consume the stream objects . This will free their // memory representati o n if they are not used any more s t a t i c c a s t < Attribute * >( elem . addr ) - > DeleteIfAll ow ed (); qp - > Request ( args [0]. addr , elem ); } Algebra Module Implementierung von Datentypen Implementierung von Operatoren Stromverarbeitung // Assign a value to the operations result object which is provided // by the query processor result = qp - > ResultStorag e ( s ); s t a t i c c a s t < CcInt * >( result . addr ) - > Set ( true , count ); qp - > Close ( args [0]. addr ); // close the underlying stream return 0; } M. Spiekermann (Fernuniversität in Hagen) Implementierung von Algebren in SECONDO 12.10.2007 21 / 21