Implementierung von Algebren in SECONDO

Werbung
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
Herunterladen