Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd 1 2011 Języki i środowiska programowania systemów rozproszonych Wykładowca:

Slides:



Advertisements
Podobne prezentacje
I część 1.
Advertisements

Konstrukcja systemów obiektowych i rozproszonych
Lingwistyka Matematyczna
Sortowanie przez scalanie
Systemy liniowe stacjonarne – modele wejście – wyjście (splotowe)
Obiektowe języki zapytań
© K.Subieta. Obiektowe języki zapytań 08, Folia 1 kwiecień 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik.
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Rafał Hryniów Tomasz Pieciukiewicz
Grażyna Mirkowska PJWSTK 15 listopad 2000
© K.Subieta. Obiektowe języki zapytań 14, Folia 1 czerwiec 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik.
Bazy danych i inżynieria oprogramowania
Bazy danych i inżynieria oprogramowania
Obiektowe języki zapytań
© K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 3, Folia 1 październik 2004 Konstrukcja systemów obiektowych i rozproszonych Wykładowca:
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Relacyjny model danych
ALGORYTM Co to jest algorytm?
Badania operacyjne. Wykład 2
© K.Subieta. Obiektowe języki zapytań 12, Folia 1 maj 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik.
© K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 6, Folia 1 listopad 2004 Konstrukcja systemów obiektowych i rozproszonych Wykładowca: Kazimierz.
© K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 1, Folia 1 październik 2004 Konstrukcja systemów obiektowych i rozproszonych Wykładowca:
© K.Subieta. Obiektowe języki zapytań 09, Folia 1 maj 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik.
© K.Subieta. Obiektowe języki zapytań 13, Folia 1 czerwiec 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik.
© K.Subieta. Obiektowe języki zapytań 07, Folia 1 kwiecień 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik.
MS Access 2000 Normalizacja Paweł Górczyński 2005.
PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić
ALGORYTMY GEOMETRYCZNE.
KONKURS WIEDZY O SZTUCE
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
ATOM WODORU, JONY WODOROPODOBNE; PEŁNY OPIS
BD-LAB6 Wojciech Pieprzyca
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Zadania Bazy danych.
Structured Query Language
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
Podejście stosowe do obiektowych języków programowania baz danych
Podstawy programowania
O relacjach i algorytmach
Podstawy układów logicznych
Automatyczne dereferencje w języku SBQL
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Zbiór do posortowania mieści się w pamięci
Wyrażenia algebraiczne
Podstawy programowania
Języki i środowiska programowania systemów rozproszonych, Wykład 06, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 04, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 11, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 10, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 09, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 01 SBA&SBQL, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 03, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 12, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 01, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Elżbieta Fiedziukiewicz
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Sterowanie – metody alokacji biegunów II
Model obiektowy bazy danych
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
Obiektowe języki zapytań
Obiektowe języki zapytań
Haskell Składnia funkcji.
Obiektowe języki zapytań
Zapis prezentacji:

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca: Tomasz Kowalski Wykłady przygotowane na podstawie materiałów prof. Kazimierza Subiety Wykład 7 Język SBQL (Stack- Based Query Language) (2) Operatory niealgebraiczne,

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Dlaczego "niealgebraiczne"? (1) Do nich należą operator where, operator kropki, kwantyfikatory, zależne złączenie join, sortowanie (order by), i inne. Wszystkie są binarne. Mimo podobieństwa do operatorów algebraicznych, semantyka operatorów niealgebraicznych nie da się prosto sprowadzić do algebry. To zdanie może wydawać się niejasne. W modelu relacyjnym operatory selekcji (operator where), projekcji (operator kropki) oraz złączenia są przecież traktowane jako operatory algebraiczne algebry relacji. Tu właśnie jest nieporozumienie. Takie traktowanie jest możliwe wyłącznie przy ograniczonej funkcjonalności, oraz po przyjęciu triku formalnego. Trik polega na tym, że część semantyki jest przenoszona na poziom metajęzykowy. Operatory te są dodatkowo kwalifikowane wyrażeniem metajęzykowym. Np. w wyrażeniu algebry relacyjnej: Zar>1000 ( Prac ) operator selekcji jest kwalifikowany wyrażeniem metajęzykowym Zar >1000. Operator selekcji nie jest pojedynczym operatorem, lecz nieskończoną rodziną zawierającą tyle operatorów, ile jest warunków selekcji.

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Dlaczego "niealgebraiczne"? (2) W podejściu stosowym dowolne operatory nie są indeksowane wyrażeniami meta-językowymi. Nie występuje więc semantyczna schizofrenia nazw dzieląca je na językowe i meta-językowe. Nie ma podziału na nazwy pierwszej kategorii i drugiej kategorii. Każda nazwa ma dokładnie taką samą semantykę i podlega dokładnie tym samym regułom wiązania i zakresu Podobnie z operatorami: nie występuje semantyczne zróżnicowanie operatorów: operator < występuje na tym samym poziomie semantycznym jak operator selekcji where. Koncepcja operatorów niealgebraicznych jest bardzo prosta oraz ma dobrze ugruntowane korzenie w semantyce języków programowania. Definicja operatorów niealgebraicznych będzie się nieco różniła w zależności od tego, który modelu składu (AS0 - AS3) będzie rozpatrywany. Wszystkie te definicje będą bazowały na podanej niżej podstawowej definicji dla modelu AS0.

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Opis procedury eval dla operatora nie-algebr. Aby dokonać ewaluacji zapytania q 1 q 2 wykonaj następujące czynności: Dokonaj ewaluacji zapytania q 1. Zapytanie to zwraca wielozbiór elementów. Dla każdego elementu e należącego do wyniku q 1 wykonaj następujące czynności: Oblicz wartość funkcji nested( e ). Wynik jest zbiorem binderów. Włóż obliczony zbiór binderów jako nową sekcje na wierzchołek stosu ENVS. Dokonaj ewaluacji zapytania q 2 w tym nowym środowisku. Oblicz wynik cząstkowy dla danego elementu e poprzez połączenie e z wynikiem zwróconym przez q 2. Funkcja łącząca zależy od operatora. Usuń nowo wstawioną górną sekcję ze stosu ENVS. Zsumuj wszystkie wyniki cząstkowe w wynik końcowy. Sposób sumowania sumuj ( U ) zależy od rodzaju operatora. Stan stosu środowisk ENVS po zakończeniu ewaluacji jest taki sam, jak przez rozpoczęciem ewaluacji.

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Formalny zapis procedury eval dla oper. niealgebr. procedure eval( q : zapytanie ) begin case q jest rozpoznane jako q 1 q 2 : (* q 1, q 2 są zapytaniami, jest operatorem niealgebraicznym *) begin wyniki_pośr: bag of Rezultat; (* lokalna kolekcja wyników pośrednich *) wynik_pośredni: Rezultat; (* lokalna zmienna na wynik pośredni *) wynik_końcowy: Rezultat; (* lokalna zmienna na wynik końcowy *) e: Rezultat; (* lokalna zmienna na element kolekcji zwracanej przez q 1 *) wyniki_pośr := ; (* zerowanie kolekcji wyników pośrednich *) eval( q 1 ); (*q 1 zwraca kolekcję elementów; wynik q 1 na czubku stosu QRES *) for each e in top( QRES ) do (* iteracja po wszystkich elementach wyniku q 1 *) begin push( ENVS, nested( e ) ); (* nowa sekcja na stosie środowisk *) eval( q 2 ); (* wynik q 2 na czubku stosu QRES *) wynik_pośredni := połącz ( e, top( QRES ) ); (* połączenie e z wynikiem q 2 ; zależne od *) wyniki_pośr := wyniki_pośr U { wynik_pośredni }; (* akumulacja wyniku pośredniego *) pop( QRES ); (* usuniecie z QRES wyniku q 2 *) pop( ENVS ); (* usuniecie z ENVS nowej sekcji *) end; wynik_końcowy := sumuj ( wyniki_pośr ); (* zsumowanie wyników pośrednich; zależne od *) pop( QRES ); (* usuniecie z QRES wyniku q 1 *) push( QRES, wynik_końcowy ); (* włożenie na QRES końcowego wyniku *) end; end;

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Poglądowy obraz małej bazy danych i 1 Prac i 2 Nazwisko Nowak i 3 Zar 2500 i 4 PracujeW i 5 Prac i 6 Nazwisko Kowalski i 7 Zar 2000 i 8 PracujeW i 9 Prac i 10 Nazwisko Barski i 11 Zar 900 i 16 PracujeW i 13 Miasto Radom i 14 Ulica Wolska i 15 NrDomu 12 i 12 Adres i 17 Dział i 18 Nazwa Produkcja i 19 Lokacja Kielce i 21 Zatrudnia i 20 Lokacja Kraków i 22 Dział i 23 Nazwa Sprzedaż i 24 Lokacja Radom i 25 Zatrudnia i 26 Zatrudnia

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator where (selekcja) Składnia: q 1 where q 2 Ograniczenie: podzapytanie q 2 zwraca wartość prawda lub fałsz. Semantyka Dla każdego elementu e zwróconego przez q 1, ENVS jest podwyższany o nested(e) Następnie ewaluowane jest q 2 Po ewaluacji q 2 stos ENVS wraca do poprzedniego stanu e należy do ostatecznego wyniku wyłącznie wtedy, gdy q 2 zwróciło prawda. Objaśnienie funkcji eval Funkcja połącz: dla danego e należącego do wyniku q 1 zwraca jednoelementowy wielozbiór { e } w przypadku, gdy dla tego e podzapytanie q 2 zwróciło prawda, lub pusty wielozbiór { }, jeżeli podzapytanie q 2 zwróciło fałsz. Funkcja sumuj: sumuje (mnogościowo) wszystkie wyniki pośrednie. Przykład: Prac where ( Zar > 1000 )

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator where - ilustracja działania Prac where ( Zar > 1000 ) i1i5i9i1i5i9 Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) i3i3 i7i7 i 11 i1i5i1i5 Stan stosu ENVS przed ewaluacją Rezultat zwracany przez zapytanie Prac (wiązanie Prac) Rezultat zwracany przez zapytanie Zar (wiązanie Zar) Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e) Nazwisko(i 2 ) Zar(i 3 ) PracujeW(i 4 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 6 ) Zar(i 7 ) PracujeW(i 8 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 10 ) Zar(i 11 ) Adres(i 12 ) PracujeW(i 16 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Rezultat dereferencji wymuszanej przez operator > Rezultat zwracany przez zapytanie prawda fałsz Rezultat zwracany przez zapytanie Zar>1000 Końcowy rezultat zapytania

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator kropki (projekcja, nawigacja) Składnia: q 1. q 2 Semantyka Dla każdego elementu e zwróconego przez q 1, ENVS jest podwyższany o nested(e) Następnie ewaluowane jest q 2 Po ewaluacji q 2 stos ENVS wraca do poprzedniego stanu Ostateczny wynik jest sumą mnogościową wyników q 2 Objaśnienie funkcji eval Funkcja połącz: ignoruje e; zwraca wynik podzapytania q 2. Funkcja sumuj: sumuje (mnogościowo) wszystkie wyniki pośrednie. Przykład: Prac. Zar Operator kropki przykrywa tzw. wyrażenia ścieżkowe (path expressions) w najbardziej uniwersalnej postaci, pozwalając je jednocześnie dowolnie kombinować z innymi operatorami.

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator kropki - ilustracja działania Prac. Zar i1i5i9i1i5i9 i3i3 i7i7 i 11 Stan stosu ENVS przed ewaluacją Rezultat zwracany przez zapytanie Prac (wiązanie Prac) Rezultat zwracany przez zapytanie Zar (wiązanie Zar) Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e) Końcowy rezultat zapytania i 3 i 7 i 11 Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 2 ) Zar(i 3 ) PracujeW(i 4 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 6 ) Zar(i 7 ) PracujeW(i 8 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 10 ) Zar(i 11 ) Adres(i 12 ) PracujeW(i 16 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 )

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator zależnego złączenia Składnia: q 1 join q 2 Semantyka Dla każdego e zwróconego przez q 1, ENVS jest podwyższany o nested(e) Następnie ewaluowane jest q 2 Po ewaluacji q 2 stos ENVS wraca do poprzedniego stanu Ostateczny wynik jest sumą mnogościową wszystkich struktur, w których na początku jest e, zaś dalej jest element wyniku q 2 zwrócony dla tego e. Objaśnienie funkcji eval Funkcja połącz: zarówno e jak i każdy element e 2 zwracany przez q 2 traktuje jako struktury (jednoelementowe lub wieloelementowe). Dla każdego e 2 zwracanego przez q 2 tworzy strukturę poprzez połączenie e oraz e 2. Wynikiem pośrednim jest kolekcja wszystkich takich struktur. Funkcja sumuj: sumuje (mnogościowo) wszystkie wyniki pośrednie. Przykład: Prac join Zar Zależne złączenie jest zdefiniowane w ODMG OQL (klauzula from) w znacznie ograniczonej postaci w stosunku do powyższej definicji.

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator zależnego złączenia - ilustracja działania Prac join Zar i1i5i9i1i5i9 i3i3 i7i7 i 11 Stan stosu ENVS przed ewaluacją Rezultat zwracany przez zapytanie Prac (wiązanie Prac) Rezultat zwracany przez zapytanie Zar (wiązanie Zar) Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e) Końcowy rezultat zapytania struct(i 1, i 3 ) struct(i 5, i 7 ) struct(i 9, i 11 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 2 ) Zar(i 3 ) PracujeW(i 4 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 6 ) Zar(i 7 ) PracujeW(i 8 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 10 ) Zar(i 11 ) Adres(i 12 ) PracujeW(i 16 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 )

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Operator sortowania Składnia: q 1 order by q 2 Semantyka Wykonywane jest zapytanie: q 1 join dereferencja( q 2 ) Wynik (bag) jest sortowany według części struktur zwróconej przez q 2. Po posortowaniu wynik jest sekwencją. Końcowy wynik uzyskuje się poprzez projekcję tej sekwencji (bez zmiany kolejności elementów na części struktur zwrócone przez q 1. Np. Prac order by Nazwisko Prac order by ((PracujeW.Dział.Nazwa), Zarobek) Operator ten można dodatkowo wyposażyć w kwalifikatory asc (wzrastająco) i desc (malejąco) przy każdej składowej q 2. Np. Prac order by ((PracujeW.Dział.Nazwa) asc, Zarobek desc) Operator asc jest komentarzem, operator desc jest odwrotnością wartości: np. 5 desc oznacza -5, "abceg" desc oznacza "zyxvt", itd. Operator ten należy parametryzować (najlepiej konfiguracyjnie) funkcją porównania elementów ( zależną od języka: angielski, polski, niemiecki,.. ).

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Składnia: q 1 ( q 2 ) lub q 1 q 2 (lub w ODRA: forsome(q 1 ( q 2 )) ) Ograniczenie: podzapytanie q 2 zwraca wartość prawda lub fałsz. Semantyka Dla każdego e zwróconego przez q 1, ENVS jest podwyższany o nested(e) Następnie ewaluowane jest q 2 Po ewaluacji q 2 stos ENVS wraca do poprzedniego stanu Ostateczny wynik jest prawda wtedy i tylko wtedy, jeżeli dla co najmniej jednego e podzapytanie q 2 zwróciło prawda. Objaśnienie funkcji eval Funkcja połącz: ignoruje e; zwraca wynik podzapytania q 2. Funkcja sumuj: Zwraca prawda jeżeli co najmniej jeden wynik pośredni zwrócony przez q 2 jest prawda; w przeciwnym wypadku zwraca fałsz. Przykład: foresome Prac ( Zar > 1000 ) Kwantyfikator egzystencjalny

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Składnia: q 1 ( q 2 ) lub q 1 q 2 (lub w ODRA: forall(q 1 ( q 2 )) ) Ograniczenie: podzapytanie q 2 zwraca wartość prawda lub fałsz. Semantyka Dla każdego e zwróconego przez q 1, ENVS jest podwyższany o nested(e) Następnie ewaluowane jest q 2 Po ewaluacji q 2 stos ENVS wraca do poprzedniego stanu Ostateczny wynik jest prawda wtedy i tylko wtedy, jeżeli dla wszystkich e podzapytanie q 2 zwróciło prawda. Jeżeli q 1 zwróciło pusty wielozbiór, to wynik także jest prawda. Objaśnienie funkcji eval Funkcja połącz: ignoruje e; zwraca wynik podzapytania q 2. Funkcja sumuj: Zwraca fałsz jeżeli co najmniej jeden wynik pośredni zwrócony przez q 2 jest fałsz ; w przeciwnym wypadku zwraca prawda. Przykład: forall Prac ( Zar > 1000 ) Kwantyfikator uniwersalny

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Kwantyfikator uniwersalny - ilustracja działania Prac ( Zar > 1000 ) i1i5i9i1i5i9 i3i3 i7i7 i 11 Stan stosu ENVS przed ewaluacją Rezultat zwracany przez zapytanie Prac (wiązanie Prac) Rezultat zwracany przez zapytanie Zar (wiązanie Zar) Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e) Rezultat dereferencji wymuszanej przez operator > Rezultat zwracany przez zapytanie prawda fałsz Rezultat zwracany przez zapytanie Zar>1000 Końcowy rezultat zapytania fałsz Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 2 ) Zar(i 3 ) PracujeW(i 4 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 6 ) Zar(i 7 ) PracujeW(i 8 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 10 ) Zar(i 11 ) Adres(i 12 ) PracujeW(i 16 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 )

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Kroki ewaluacji zapytania z pomocniczą nazwą (Prac as x) where ( ( x. Zar ) > 1000 ) i1i5i9i1i5i9 i3i3 i7i7 i 11 x(i 1 ) x(i 5 ) Rezultat zwracany przez zapytanie Prac Rezultat zwracany przez zapytanie x (wiązanie x) Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e) Rezultat dereferencji wymuszanej przez operator > Rezultat zwracany przez zapytanie prawda fałsz Rezultat zwracany przez zapytanie Zar>1000 Końcowy rezultat zapytania Rezultat zwracany przez zapytanie Prac as x x(i 1 ) x(i 5 ) x(i 9 ) i1i1 i5i5 i9i9 Rezultat zwracany przez zapytanie Zar x(i 1 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) x(i 5 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) x(i 9 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 2 ) Zar(i 3 ) PracujeW(i 4 ) x(i 1 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 6 ) Zar(i 7 ) PracujeW(i 8 ) x(i 5 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Nazwisko(i 10 ) Zar(i 11 ) Adres(i 12 ) PracujeW(i 16 ) x(i 9 ) Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Iteracja po elementach e poprzedniego rezultatu: na ENVS wkłada się nested(e)

Języki i środowiska programowania systemów rozproszonych, Wykład 07, Slajd Zamiana "zmiennej" na etykietę struktury Dla zapytania (Prac as x) where (( x. Zar ) > 1000 ) końcowy wynik jest różny od wyniku zapytania Prac where Zar > 1000, mianowicie, elementy wyniku są opatrzone nazwą x. Elementy takie można uważać za proste struktury (w sensie języków C/C++), których jedynym polem jest pole o nazwie x. W standardzie ODMG są "tajemnicze" miejsca, w których zmienna dziedzinowa zmienia się w etykietę struktury. Standard tego nie wyjaśnia. Dopiero na gruncie SBA widać jasno, dlaczego tak się dzieje. Wymagało to jednak bardzo istotnych założeń odnośnie semantyki. Standard ODMG jest semantycznie nieprecyzyjny, więc nie jest w stanie tego wyjaśnić. Tego efektu nie można także wyjaśnić na gruncie algebry obiektowej, rachunku obiektowego, lub innego tradycyjnego formalizmu. Można pokazać, że zapytanie Prac where Zar > 1000 jest równoważne zapytaniu ((Prac as x) where (( x. Zar ) > 1000 )). x