Transcript

Stack-Based Query Language for Java

Emil WcisoJzyk zapyta oparty na podejciu stosowym zintegrowany z JavStack-Based Query Languagefor Java

Plan prezentacjiPJWSTK 20102Motywacje powstaniaCele projektuPodstawowe zaoeniaNiezgodno impedancjiIntegracja skadniowaArchitektura rozwizaniaPlany rozwoju projektuPodsumowanie

Motywacje powstaniaPJWSTK 20103Wiksza moc jzyka JavaLepsza pielgnacyjno koduSynergia Java + jzyk zapyta Nowe cechy SBQLMarketing podejcia stosowegoOdpowied na LINQPodstawa mocnego API do baz danychCh obrony mgr ;-)

Cele projektuPJWSTK 20104Zapytania na obiektach JavaZachowanie cech SBQLIntegracja skadniowaMocna kontrola typw w czasie kompilacjiKompatybilno wstecznaMoliwo wywoania metod i konstruktorw z zapytaWydajno tumaczenie zapyta na kod Javy

Podstawowe problemyPJWSTK 20105Niezgodno impedancjiSkadnia - rne style i budowa programwRozwizanie dopasowanie skadni operatorw majcych odpowiedniki w jzyku programowania (np. ==, !=, !, &&, ||, new, instanceof)Nowe operatory (np. where, join, order by) warto dodana jzykaSystemy typwJednolity model danychSBA wyszy poziom abstrakcji

Niezgodno impedancji cd.PJWSTK 20106Semantyka i paradygmaty programw deklaratywno kontra imperatywnoZapytania jako specjalne wyraenia (wywoanie funkcji)Generowanie funkcji realizujcej zapytaniePoziomy abstrakcji wysoki jzyka zapyta, niski jzyka programowaniaIntegracja dwukierunkowaGeneryczno operatorw wykorzystanie standardowych interfejsw (operatory ==, porwnania zakresowego, order by)Moliwo uycia metod, funkcji i konstruktorw Java

Niezgodno impedancji cd. 2PJWSTK 20107Przetwarzanie kolekcjiSpecjalne traktowanie obiektw kolekcji w jzyku zapytaMapowanie java.util.Collection bag, java.util.List sequenceKolekcje generyczne w jzyku zapyta, np. bagKonieczne okrelenie typu elementow kolekcji

Zasada korespondencjiPJWSTK 20108Jzyk zapyta ok. 35 operatorwJava ok. 240 nie-terminaliBezporednie wczenie zapyta oznacza potencjalnie ponad 8400 punktw stykuOznacza to:Trudnoci w rozwoju jzyka zapytaKonflikty dla operatorw o tej samej skadni i rnej semantyce Oglne zagmatwanie ostatecznego tworu

Integracja skadniowaPJWSTK 20109Rozwizanie problemu korespondencji rozdzielenie skadni na rozczne konteksty

Integer[] n = new Integer[] {4, 2, 6, 20, 4, 23, 1, 5, 7};List result = #{ n as i where i > 7 };System.out.println(result);Cae zapytanie jako nowy element skadniowyMinimalna ilo nowych poczeZapytanie jako wywoanie funkcji

Architektura rozwizaniaPJWSTK 201010Dodatkowa faza preprocesingu

Kod rdowy zapyta*.s4j*.s4j*.s4jWygenerowany kod Java*.s4j*.s4j*.javaSkompilowany kod*.s4j*.s4j*.classpreprocesingkompilacjauruchomienieFaza preprocesinguPJWSTK 201011Zadania:Parsowanie i analiza zapytaAnaliza uytych bytw Java (min. zmienne, klasy, metody)Analiza kodu JavyTranslacja zapyta na kod Javyrodki:Integracja z kompilatorem Java (OpenJDK)Typechecker i sygnatury zapytaGenerator kodu Java

Faza preprocesingu cd.PJWSTK 201012

Wygenerowany kod rdowy*.javaKod rdowy i biblioteki*.s4j*.java*.jar

*.class

Preprocesor SBQL4J Java ParserSBQL4J ParserJava AnalyserSBQL4J AnalyserCode generatorSygnatury zapytaPJWSTK 201013S tworzone w trakcie analizyZawieraj informacje o wyniku zapytania lub podzapytaniaLiczno wyniku ([0..1] lub [0..*] dla kolekcji)Typ kolekcji wynikowej (bag, sequence)Nazwa typuInne waciwoci charakterystyczne dla danego typu sygnaturyPodobnie jak obiekty w runtime, zawieraj metod nested

Przegld sygnaturPJWSTK 201014ValueSignatureBinderSignatureClassSignatureMethodSignatureConstructorSignatureStructSignaturePackageSignature

Kontrola bdwPJWSTK 201015Zgoszenia za pomoc standardowego mechanizmu kompilatora JavyW przypadku bdu zgoszenie, wstawienie domylnej sygnatury dla danego operatora i kontynuacjaKady operator wymaga okrelonej sygnatury o odpowiednich atrybutach (np. typ wyniku, liczno)Sprawdzane s bdy zarwno w zapytaniach, jak i w kodzie Java

Translacja zapyta na kod JavaPJWSTK 201016Dostpne 4 tryby translacji:Wywoanie interpreteraGeneracja kodu tosamego z interpreteremZoptymalizowany kod interpretera bez stosu QRESNatywne operacje Java bez stosw QRES i ENVS

Balansowanie midzy elastycznoci i wydajnoci

Tryb interpreteraPJWSTK 201017Klasa implementujca wzorzec VisitorTekst zapytania parsowany w runtime programuPrzekazanie parametrw z kontekstu Java na spd stosu ENVSObiekty Java otoczone wrapperami w trakcie wykonaniaNiska wydajno, dua elastyczno moliwe dynamiczne tworzenie zapyta

Generowany kod interpreteraPJWSTK 201018Zapytanie jako metoda wygenerowanej klasyKod zapytania tosamy z ciek wywoania interpreteraStosy QRES i ENVS uywane w trakcie wykonaniaTylko zapytania zdefiniowane przed kompilacjBrak parsowania tekstu zapytania i generowania drzewa AST podczas uruchomieniaWysza wydajno mniejsza elastyczno

Generowany kod interpretera bez stosu QRESPJWSTK 201019Wyniki podzapyta jako nowe zmienne w kodzieGenerowanie unikalnych nazw podzapytaMinimalna ilo koercji w trakcie wykonania

Generowany kod bez stosw QRES i ENVSPJWSTK 201020Maksymalne wykorzystanie moliwoci maszyny wirtualnej JavaZamiana nazw uytych w zapytaniu na nazwy z modelu danych Konieczna dodatkowa analiza wizania nazw i uycia funkcji nestedNajwiksza wydajno i czytelno wygenerowanego kodu

Nowy operator order byPJWSTK 201021Funkcja sortujca zdefiniowana zgodnie ze standardami Javy:W obiekcie sortowanym interfejs java.lang.ComparableW obiekcie implementujcym java.util.Comparator

List products = getProductList();Comparator plCollator = ...; //porwnywanie polskich literList orderedProducts = #{ products order by unitsInStock desc; productName asc using plCollator};Generyczne kolekcjePJWSTK 201022Rozdzielenie interfejsu (bag, sequence) od implementacjiSpecjalizacja kolekcji bez zmian w semantyce jzyka

List products = getProductList();Collection orderedProducts = #{ bag(products.productName)};Plany rozwoju projektuPJWSTK 201023Uniwersalne API do baz danych i innych rde danychWariant translacji zapyta SBQL4J na natywne zapytania / operacje uzyskania danychWariant podzapyta niezalenych skadniowoSmart parsingPodzia na konteksty wewntrz zapytaniaMoliwo rozszerzenia semantyki jzyka przez dodanie bibliotekiWiksze moliwo integracji

DBLink warehouseDBLink = ...;List result = #{ warehouseDBLink.((cusomers rollby segment).name) };System.out.println(result);Plany rozwoju projektu cd.PJWSTK 201024Optymalizacja zapyta przez przepisywanieZintegrowane rodowisko programistyczne (IDE) dla SBQL4J Zapytania ad-hoc i kontrola typologiczna w czasie wykonania

PodsumowaniePJWSTK 201025Mocny jzyk zapyta oparty na SBQL, zintegrowany z JavPrzeamanie niezgodnoci impedancjiNiskie ryzyko uycia w istniejcych projektachSzerokie moliwoci rozwoju

Dzikuj za uwagPJWSTK 201026


Top Related