Przetwarzanie symbolu _
Cukier syntaktyczny.
W niektórych zapytaniach można użyć symbolu podkreślenia. Ta technika to cukier syntaktyczny. Podobnie jak rozwijanie symbolu * w wyniku pojawienia się jednego odwołania w wyniku kompilacji pojawi się wiele pól. Ile tych pól powstanie ma wpływ co z czym i w jakiej kolejności zostało złączone w klauzuli FROM.
Zapytanie ilustrujące tą funkcjonalność przedstawia się następująco:
DECLARE a UINT, b UINT STREAM core0, 0.1 FILE 'file1.txt'
DECLARE c UINT, d UINT STREAM core1, 0.2 FILE 'file2.txt’
SELECT core0[_] * core1[_]
STREAM pomnozone
FROM core0+core1Po przeprowadzeniu kompilacji poleceniem:
$ xretractor -c query.rql
pomnozone(1/10)
:- PUSH_STREAM(core0)
:- PUSH_STREAM(core1)
:- STREAM_ADD
pomnozone_0: UINT
PUSH_ID(pomnozone[0])
PUSH_ID(pomnozone[2])
MULTIPLY
pomnozone_1: UINT
PUSH_ID(pomnozone[1])
PUSH_ID(pomnozone[3])
MULTIPLY
core0(1/10) file1.txt
a: UINT
b: UINT
core1(1/5) file2.txt
c: UINT
d: UINTJak widać poprosiliśmy o pomnożenie dwóch wartości w jednym polu, a wytworzyły się 2 pola mnożące wartości 1 z 3 oraz 2 z 4. Należy zauważyć, że odwołujemy się w zapytaniu nie do wartości pomnożone a do wartości schematów źródłowych. Tutaj stosujemy aliasowanie.
Po pojawieniu się w formule operatora _ w indeksie tablicy, kompilator powieli formułę dla wszystkich pól argumentów. Schematy obu argumentów muszą być równoliczne. Czyli core0 i core1 muszą mieć schematy tej samej liczności – typy zostaną wyrównane do najwyższego. O równaniu typów wspomnę za chwilę.
Ta funkcjonalność ma główne zastosowanie w przypadku budowy zapytań w których budujemy algorytmy filtrów sygnałowych. Tam dochodzi do szeregu operacji matematycznych. Funkcjonalność związana z przetwarzaniem symbolu _ nie jest wymagana w celu osiągnięcia pełnej funkcjonalności systemu RetractorDB. Jednak znacząco upraszcza budowę specyficznych zapytań w których należy połączyć operacje na dwóch schematach. Przykład zastosowania zostanie przedstawiony w trakcie prezentacji algorytmów przetwarzania sygnałów.
Last updated