1 / 47

PySBQL

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ć pensję Kowalskiego?. SQL+JDBC+Java. Connection conn; ResultSet R; Statement s; ... s=conn.createQuery(); ...

Télécharger la présentation

PySBQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PySBQL Język zapytań dla obiektowych baz danych

  2. Aplikacje bazodanowe • Główny nurt budowania aplikacji opiera się na połączeniu: • SQL • JDBC • Java • Jak wyświetlić pensję Kowalskiego?

  3. SQL+JDBC+Java Connection conn; ResultSet R; Statement s; ... s=conn.createQuery(); ... R=s.executeQuery( "SELECT salary FROM empl WHERE sname = 'SMITH'"); while (R.next()){ System.out.println (R.getString(1)); }

  4. Obiektowe bazy danych • Grupa OMG w roku 1991 powołuje ODMG • ODMG tworzy specyfikacje kolejnych wersji języka OQL • Oparty o „algebrę obiektową” • Brak konstrukcji imperatywnych • Brak abstrakcji proceduralnych • Niespójna semantyka • W roku 2001 grupa ODMG zostaje rozwiązana

  5. Obiektowe bazy danych • 1990 r. System LOQIS z prototypowym językiem opartym o podejście stosowe (SBA) • Początek 2006 r.– reaktywacja ODMG w celu ustanowienia standardu języków zapytań. • Rozważany jest standard oparty o podejście stosowe

  6. SBA i SBQL • Lata 90-te, Kazimierz Subieta z IPIPAN • Stos środowisk ENVS • Bindery • Struktura dynamiczna • Uczestniczy w przetwarzaniu operatorów niealgebraicznych • Jedno środowisko może zawierać wiele binderów o danej nazwie var1(„string”) ... empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) currentDate(...) ... ENVS

  7. Główne zalety SBA • Ujednolicona architektura • Uwolnienie od „algebr” • Algorytmiczne definiowanie języka • Precyzja w definiowaniu semantyki • Możliwość bezpośredniej implementacji definicji • Język zapytań traktowany jak język programowania

  8. Modele danych • SBA i koncepcja SBQL są niezależne od modelu danych • Możliwość zaadoptowania do modelu relacyjnego, XML, abstrakcyjnych modelów obiektowych, itp. • Implementacja oparta na konkretnym modelu

  9. Model danych M0 i1empl i6empl i11empl i2 fname ”John” i7 fname ”Bob” i12 sname ”Smith” i3 sname ”Smith” i8 sname ”Gordon” i13 dept i5 salary 2000 i9 salary 2300 i4 dept i10 dept i20dept i25dept i21 name ”IT” i26 name ”Marketing” i22 employee i27 employee i23 employee i28 boss i24 boss R = { i1, i6, i11, i20, i25 }

  10. <Osoba> <Imię value=„Jan”/> <Nazwisko value=„Nowak”/> <Zarobki value=1500/> <Adres> <Ulica value=„Polna”/> <Numer value=„13A”/> <Kod value=„10-168”/> <Miasto value=„Olsztyn”/> </Adres> </Osoba> XML a M0 <i1,Osoba, { <i2, Imię, „Jan”>, <i3, Nazwisko, „Nowak”>, <i4, Zarobki, 1500>, <i5, Adres, { <i6, Ulica, „Polna”>, <i7, Numer, „13A”>, <i8, Kod, „10-168”>, <i9, Miasto, „Olsztyn”>, }> }>

  11. Model relacyjny a M0 Schemat relacyjny: Osoba(Imię, Nazwisko, DataUr) Relacja Osoba: <i1,Osoba, { <i2, Imię, „Jan”>, <i3, Nazwisko, „Nowak”>, <i4, DataUr, 9/10/1971> }> <i5,Osoba, { <i6, Imię, „Adam”>, <i7, Nazwisko, „Kowalski”>, <i8, DataUr, 22/01/1968> }>

  12. Model danych M1 • Relacja CC • Nie zawiera cykli • Relacja OC • Zbiór C i40PersonClass i41 age (...code...) ... Dziedziczy po i50EmplClass i51 changeSal (...code...) i52 netSal (...code...) ...

  13. Rezultaty dla modelu M1 • Rezultatem może być: • Wartość atomowa (liczba, znak, itp.) • Referencja do obiektu • Krotki, słowniki i listy rezultatów • Bindery

  14. Dlaczego Python? - Bruce Eckel • 10. Reduced Clutter • 9. It’s not backward-compatible in exchange for pain • 8. It doesn’t value performance over my productivity • 7. It doesn’t treat me like I’m stupid • 6. I don’t wait forever for a full implementation of the language

  15. Dlaczego Python? - Bruce Eckel • 5. It doesn’t make assumptions about how we discover errors • 4. Marketing people are not involved • 3. I don’t have to type so much • 2. My guesses are usually right • 1. Python lets me focus on concepts

  16. Dynamiczne typy #include <string> #include <iostream> using namespace std; template<class A, class B, class R> R sum(A a, B b) { return a + b; } int main() { string a("one"), b("two") cout << sum<string, string, string>(a, b) << endl; cout << sum<int, int, int>(1, 2) << endl; }

  17. interface addable { Object add(Object b);} class X implements addable { public Object add(Object b) { return new Object(); // Test } } class AddableNotFoundException extends Exception {} public class WeakTyping { public static Object sum(Object a, Object b) throws AddableNotFoundException { Class[] intfs = a.getClass().getInterfaces(); for(int i = 0; i < intfs.length; i++) if(intfs[i] == addable.class) return ((addable)a).add(b); throw new AddableNotFoundException(); } public static void main(String[] args) throws Exception { X a = new X(); X b = new X(); Object c = sum(a, b); } }

  18. Dynamiczne typy def sum(arg1, arg2): return arg1 + arg2 print sum(42, 47) print sum('spam', 'eggs')

  19. Grupy operatorów • Operatory pogrupowane są ze względu na sposób ewaluacji • Brak „grup” jedno-elementowych

  20. Zapytania atomowe • Literały • Np. 2, 3.14, „napis” • Nazwy • Np. osoba, miasto, x • Wynikiem ewaluacji nazwy jest zbindowanie jej na stosie środowisk

  21. Operatory algebraiczne • Nie używają ENVS • Głównie operatory arytmetyczne, porównania, itp. • Jeżeli q1i q2to zapytania, a ∆ to binarny operator algebraiczny to q1 ∆ q2jestzapytaniem • Jeżeli q1to zapytanie, a ∆ to unarny operator algebraiczny to ∆ q1jestzapytaniem

  22. Operatory niealgebraiczne • Ewaluowane na stosie środowisk • Binarne • Np. where, . (kropka), order by itp. • Ewaluacja zapytania q1θq2 : • Ewaluacja zapytania q1 • Dla każdego elementu z rezultatu, ewaluowane jest q2 • Do wyniku tej ewaluacji stosowany jest operator θaby obliczyć wynik częściowy

  23. Drzewo zapytania empl where sname == „Smith” where empl == sname „Smith”

  24. Przykładowa baza i1empl i6empl i11empl i2 fname ”John” i7 fname ”Bob” i12 sname ”Smith” i3 sname ”Smith” i8 sname ”Gordon” i13 dept i5 salary 2000 i9 salary 2300 i4 dept i10 dept i20dept i25dept i21 name ”IT” i26 name ”Marketing” i22 employee i27 employee i23 employee i28 boss i24 boss

  25. Ewaluacja empl where sname == „Smith” empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) ENVS QRES

  26. Ewaluacja empl where sname == „Smith” empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  27. Ewaluacja empl where sname == „Smith” fname(i2) sname(i3) dept(i4) salary(i5) empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  28. Ewaluacja empl where sname == „Smith” fname(i2) sname(i3) dept(i4) salary(i5) empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  29. Ewaluacja empl wheresname== „Smith” fname(i2) sname(i3) dept(i4) salary(i5) i3 empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  30. Ewaluacja empl where sname ==„Smith” fname(i2) sname(i3) dept(i4) salary(i5) „Smith” i3 empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  31. Ewaluacja empl where sname == „Smith” fname(i2) sname(i3) dept(i4) salary(i5) True empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  32. Ewaluacja empl where sname == „Smith” Wynik pomocniczy: i1 fname(i2) sname(i3) dept(i4) salary(i5) empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  33. Ewaluacja empl wheresname== „Smith” Wynik pomocniczy: i1 fname(i2) sname(i3) dept(i4) salary(i5) i8 empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  34. Ewaluacja empl where sname ==„Smith” Wynik pomocniczy: i1 fname(i2) sname(i3) dept(i4) salary(i5) „Smith” i8 empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  35. Ewaluacja empl where sname == „Smith” Wynik pomocniczy: i1 fname(i2) sname(i3) dept(i4) salary(i5) False empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  36. Ewaluacja empl where sname == „Smith” Wynik pomocniczy: i1 fname(i12) dept(i13) empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1, i6, i11 ENVS QRES

  37. Ewaluacja empl where sname == „Smith” empl(i1) empl(i6) empl(i11) dept(i17) dept(i22) i1 ENVS QRES

  38. Konstrukcje imperatywne • Mogą modyfikować stan bazy i stan ENVS • Mogą tworzyć nowe sekcje na ENVS • Np. for, while, create, delete, operatory przypisania, wstawiania

  39. Funkcje • Otwierają nowe środowisko • Mogą być deklarowane z konkretną, bądź zmienną ilością parametrów • Parametry mogą mieć wartości domyślne • Wynikiem funkcji może być referencja do innej funkcji

  40. Funkcje def averegeWage(*wages): i,sum=0,0.0 for w in wages: i+=1 sum+=w else: print „No wages given” print sum/i averegeWage((employee where dept.name==”Sales”).salary)

  41. SQL+JDBC+Java Connection conn; ResultSet R; Statement s; ... s=conn.createQuery(); ... R=s.executeQuery( "SELECT salary FROM empl WHERE sname = 'SMITH'"); while (R.next()){ System.out.println (R.getString(1)); }

  42. PySBQL print (empl where sname == "Smith").salary

  43. PySBQL – przykłady for n, surn in empl.(fname,sname): print n, surn

  44. PySBQL – przykłady for p in (dept where name==„IT”).employee: p.salary *=1.15 if (p.salary as ps> p.dept.boss.salary as bs): ps, bs = bs, ps print p.(fname, sname, salary)

  45. PySBQL – przykłady print empl.(“Mr”, fname, sname, “earns”, salary)

  46. PySBQL – przykłady nowak = first( osoba where nazwisko == „Nowak” ) if nowak.pensja as p < 2000: p*=1.30 print nowak else: p+= 600.00

  47. PySBQL – przykłady def fib(n): #Lista liczb Fibonacciego mniejszych od n wynik = [] a, b = 0, 1 while b < n: wynik+=[b] a, b = b, a+b return wynik

More Related