K.Subieta. SQL3: Nowy standard języka SQL, Folia 1
Luty 1998
SQL3:
Nowy standard języka SQL
Kazimierz Subieta
Instytut Podstaw Informatyki PAN,
Warszawa
subieta@ipipan.waw.pl
http://www.ipipan.waw.pl/~subieta
Polsko-Japońska Wyższa Szkoła
Technik Komputerowych,
Warszawa
Luty 1998
K.Subieta. SQL3: Nowy standard języka SQL, Folia 2
Luty 1998
Terminologia, pojęcia
Niniejsza prezentacja zakłada znajomość podstawowych
konstrukcji SQL.
Prezentacja nie obejmuje wielu cech SQL3 (nie jest w
stanie).
Wyjaśnienie większości terminów z zakresu
obiektowości, które wystąpią w tej prezentacji, znajduje
się w pracy:
Kazimierz Subieta
Słownik często spotykanych
terminów dotyczących
obiektowości
Prace IPI PAN
Nr 839
Instytut Podstaw Informatyki PAN
Warszawa, wrzesień 1997
Słownik jest również dostępny na Webie (nieodpłatnie) w wersji postscript (140 stron):
http://www.ipipan.waw.pl/~subieta
K.Subieta. SQL3: Nowy standard języka SQL, Folia 3
Luty 1998
Geneza SQL3
• Informix Universal Server (połączenie systemu Illustra i
Informix OnLine),
• DB2 Universal Database (firmy IBM, połączenie Starburst i
DB2),
• Oracle8 (firmy ORACLE),
• OSMOS (firmy Unisys),
• OpenIngres (firmy Computer Associates),
• Sybase Adaptive Server (firmy SYBASE)
• ......
SQL3 powstaje w wyniku przenikania koncepcji obiektowych
do systemów relacyjnych. Jednocześnie, podjęto zadanie
ulepszenia poprzednich wersji SQL.
Intencją nowego standardu jest poprawa istniejących,
sprawdzonych cech relacyjnej technologii bez wprowadzania
zbyt rewolucyjnych zmian.
Nie jest pewne, czy ta intencja jest zachowana, bo zmiany są jednak
rewolucyjne...
Adresatem SQL3 są systemy określane jako “obiektowo-
relacyjne”:
Systemy obiektowo-relacyjne powstają w wyniku
ostrożnej ewolucji systemów relacyjnych w kierunku
obiektowości, liczą na pozycję systemów relacyjnych
na rynku i odwołują się do ich wiernej klienteli.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 4
Luty 1998
Obecny status standardyzacji SQL
SQL3 rozszerza poprzedni standard SQL-92 w następujących
kierunkach:
SQL3 jest kontynuacją linii SQL-92, rozwijaną przez
ANSI (American National Standard Institute), komitet X3H2,
oraz ISO (International Standard Organization) .
Obiektowość: SQL3 reprezentuje podejście “hybrydowe”, dodajac
niektóre cechy obiektowości (takie jak ADT) do tablic znanych z
systemów relacyjnych.
Rozszerzalność: umożliwienie użytkownikom deklarowania
własnych typów.
Niekonwencjonalne typy danych: multimedialne, przestrzenne,
temporalne.
Pełne możliwości uniwersalnego języka programowania dla
definiowania i zarządzania trwałymi, złożonymi obiektami.
Rozszerzenia w zakresie aktywnych reguł, interfejsów do innych
języków programowania, autoryzacji, procedur bazy danych, ewolucji
schematu, i inne.
Deklarowana jest zgodność ‘w dół” ze standardem SQL-92.
(Praktyka jednak dowodzi, że ze „zgodnością w dół” bywa bardzo różnie...)
K.Subieta. SQL3: Nowy standard języka SQL, Folia 5
Luty 1998
Stan zaawansowania prac, krytyka
Wg planów, prace nad standardem miały być zakończone w IV kwart. 1998.
Wygląda jednak na to, że bedą nieco opóźnione (rok lub nawet 2-3 lata).
Głównym powodem jest fakt, że standard jest ogromny,
według różnych szacunków 1200 - 1600 stron, zaś jego
poszczególne części są niezbyt spójne.
Krytykę powoduje również fakt, że standard jest zbyt eklektyczny, łączy w
sobie wiele koncepcji i pojęć, często redundantnych i niespójnych.
Obciążeniem standardu jest deklarowana zgodność z SQL-92 (czyli
konieczność pogodzenia się z niektórymi wadami SQL-92).
Są opinie, że nad całością tego standardu nikt nie
panuje.
Zaznacza się bardzo silnie “syndrom komitetu” (koń-
wielbłąd).
Są opinie, że nawet jeżeli ten standard powstanie,
nikt nie zaimplementuje go w całości, co podważy
sens standardyzacji.
Duże kontrowersje wzbudza fakt, że prace badawczo-
rozwojowe nad konstrukcją całkowicie nowego języka
programowania są podejmowane przez ciało
standardyzacyjne, statutowo powołane do innych celów.
Konkurencją jest standard ODMG (Object Database Management Group),
zawierający niecałe 250 stron, bardziej spójny i jednorodny, ale też o
znacznie mniejszym zakresie.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 6
Luty 1998
Obiektowy model SQL3
Rozszerzenia w kierunku struktur obiektowych dotyczą
następujacych cech:
Typy definiowane przez użytkownika
(abstrakcyjne typy
danych (ADT), nazwane typy wierszy, oraz typy rozróżnione
(distinct)
Konstruktory typów dla wierszy
(row types) i
referencji
(reference types)
Konstruktory typów dla kolekcji:
zbiorów, list
(sekwencji) i wielozbiorów
Definiowane przez użytkownika funkcje i procedury
Wspomaganie dla dużych obiektów
(Binary Large OBject - BLOB, Character Large OBject - CLOB)
Wbudowane typy skalarne
K.Subieta. SQL3: Nowy standard języka SQL, Folia 7
Luty 1998
Rozszerzenia systemu typów
• Rozszerzalność: definiowanie nowych typów “zrozumiałych” dla
SZBD.
• Zwiększenie potencjału modelowania pojęciowego (złożone
obiekty).
• Ponowne użycie istniejących bibliotek typów.
• Integracja pojęć obiektowych i relacyjnych w jednym języku.
• Abstrakcyjne typy danych (ADT)
+ Mocna kontrola typów
+ Podtypy i dziedziczenie
+ Hermetyzacja
+ Atrybuty wirtualne
+ Zamienialność
(substitutability
)
+ Procedury polimorficzne
+ Dynamiczne wiązanie (dyzpozycja funkcji podczas czasu wykonania)
+ Kontrola typu podczas kompilacji
+ Przywileje: kto może używać ADT
• Typy rozróżnione (distinct): zwiększenie skuteczności mocnej kontroli typów i wydajności.
• Typy wierszy:
+ Są podobne do struktur lub zapisów (records) w innych językach
+ Umożliwiają określenie typów wierszy w tablicach
+ Umożliwiają zagnieżdżanie wierszy
• Typy kolekcji:
+ Wbudowane, parametryczne typy SET(T), LIST(T), MULTISET(T)
+ Odwzorowanie do tablic
K.Subieta. SQL3: Nowy standard języka SQL, Folia 8
Luty 1998
Procedury, operatory, podtablice,
programy
• Funkcje definiowane przez użytkownika.
• Przeciążanie funkcji.
• Dynamiczna dyzpozycja (dispatch) funkcji.
• Kontrola typologiczna wołania funkcji podczas kompilacji.
• Procedury zapamiętane w bazie danych definiowane przez użytkownika.
• Operatory definiowane przez użytkownika (z przeciążaniem i zmianą pierwszeństwa)
• Podtablice:
+ Zwiększają możliwości w zakresie modelowania i moc wyszukiwawczą języka
+ Są środkiem do modelowania hierarchii kolekcji
+ Zapytanie działające na tablicy działa jednocześnie na podtablicach i v/v.
• Inne rozszerzenia:
+ Dodatkowe predykaty (FOR ALL, FOR SOME, SIMILAR TO)
+ rozszerzenia możliwości kursorów
+ punkty składowania (savepoints)
+ rozszerzenia w zakresie aktualizacji perspektyw (view updating)
• Zdania sterujące języka programowania (dotyczy SQL/PSM):
+ bloki begin/end, podstawienia, wołania procedur i funkcji, zdania
case, if, loop, for,
signal/resignal, zmienne, wyjątki;
+ wiele zdań SQL w jednym EXEC SQL;
• Rozszerzenia w zakresie przetwarzania danych temporalnych.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 9
Luty 1998
Typy definiowane przez użytkownika
Najprostsza forma: typy rozróżnione:
Nowa nazwa dla już zdefiniowanego typu, traktowana jako oddzielny
(nieporównywalny) typ:
CREATE DISTINCT dolar_usa AS DECIMAL(9,2)
CREATE DISTINCT polski_zl AS DECIMAL(9,2)
Porównanie wartości typu dolar_usa z wartością polski_zl powoduje błąd typu.
Typ wiersza:
ciąg par <nazwa_pola, typ_danej>, przypominający
deklarację tablicy.
Typ wiersza może być użyty do deklarowania tablic, wartości kolumn,
zmiennych, parametrów.
Typ wiersza może być być nazwany; jest wtedy równoważny delaracji typu
(struktury).
CREATE ROW TYPE TypKoduPoczt (rejon CHAR(2) lokacja CHAR(3));
CREATE TABLE pracownicy
(nazwisko CHAR(30),
adres ROW( ulica CHAR(30),nr_domu CHAR(4), miasto CHAR(20),
kod_poczt TypKoduPoczt));
INSERT INTO pracownicy VALUES
(‘Nowak’, (‘Ordona’, ‘21’, ‘Warszawa’, (‘01’,‘237’)));
distinct types, row types
K.Subieta. SQL3: Nowy standard języka SQL, Folia 10
Luty 1998
Abstrakcyjne typy danych, ADT
ADT definiują atrybuty i operacje zakapsułowane w jednostce danych.
CREATE TYPE TypPracownika
(PUBLIC
nazwisko
CHAR(20),
adres
TypAdresu,
kierownik
TypPracownika,
data_zatrudn DATE,
PRIVATE
zar_brutto
DECIMAL(7,2),
potracenia
DECIMAL(7,2),
PUBLIC
FUNCTION lata_pracy(p TypPracownika) RETURNS INTEGER
<kod obliczający lata pracy>,
PUBLIC
FUNCTION zarobek(p TypPracownika) RETURNS DECIMAL
<kod oblicząjacy aktualny zarobek>
);
Pełna hermetyzacja
(encapsulation): dostęp do wartości typu
TypPracownika
jest możliwy wyłącznie poprzez własności określone jako PUBLIC.
abstract data type
K.Subieta. SQL3: Nowy standard języka SQL, Folia 11
Luty 1998
Dalsze własności ADT
ADT może być zdefiniowany jako podtyp innego ADT. Podtyp
dziedziczy wszystkie własności nadtypu (atrybuty i operacje),
dokładając własne atrybuty i operacje. Wspomagane jest wielo-
dziedziczenie.
Wystąpienia ADT (czyli obiekty) mogą być trwale zapamiętane w
bazie danych jako wartości kolumn tablic.
Możliwe jest zadeklarowanie atrybutów wirtualnych (takich jak
lata_pracy)
Dla każdego atrybutu automatycznie są definiowane dwie
funkcje:
* obserwator (funkcja czytająca atrybut)
* mutator (funkcja zmieniająca atrybut)
Wystąpienia ADT są tworzone przez zdefiniowane systemowo
konstruktory.
Atrybuty mogą być inicjalizowane poprzez wołanie mutatorów.
Możliwe jest definiowanie wyspecjalizowanych konstruktorów.
BEGIN
DECLARE p TypPracownika;
SET p..nazwisko = ‘Kowalski’;
SET p..data_zatrudn = ‘96/02/11’;
.....
END
K.Subieta. SQL3: Nowy standard języka SQL, Folia 12
Luty 1998
Typy referencyjne
reference type
Nazwany typ wiersza może być użyty jako typ referencyjny.
Wartość typu referencyjnego jest unikalnym identyfikatorem wystąpienia typu wiersza.
Jest on trwały, niezmienny dla całego życia danego wystąpienia.
Wartość typu referencyjnego może być zapamiętana w tablicy i
nastepnie użyta jako bezpośrednia referencja (wskaźnik, pointer) do
specyficznego wiersza w innej tablicy. W efekcie, możliwe jest
tworzenie powiązań asocjacyjnych pomiędzy obiektami, tak jak w
modelu obiektowym ODMG.
CREATE ROW TYPE TypKonta
(nr_konta INTEGER,
klient REF(TypKlienta),
typ_konta CHAR(1),
data_otwarcia DATE,
oprocentowanie DOUBLE PRECISION,
bilans DOUBLE PRECISION,
);
CREATE TABLE Konto OF TypKonta
(PRIMARY KEY nr_konta
);
typ
referencyjny
K.Subieta. SQL3: Nowy standard języka SQL, Folia 13
Luty 1998
SELECT k.klient -> nazwisko
FROM Konto k
where k.klient->adres..miasto = “Kraków”
AND k.bilans > 10000;
Użycie referencji w zapytaniach
Referencje mogą być użyte w zapytaniach w postaci tzw.
wyrażeń ścieżkowych (path expressions), podobnych do
analogicznych wyrażeń w innych językach.
CREATE ROW TYPE TypKlienta
(nr_klienta INTEGER,
nazwisko CHAR(30),
adres ROW( ulica CHAR(30),nr_domu CHAR(4),
miasto CHAR(20), kod_poczt TypKoduPoczt));
Deklaracja typu
TypKlienta
Zdanie select
dereferencja
k.klient->adres..miasto
wyrażenie ścieżkowe
K.Subieta. SQL3: Nowy standard języka SQL, Folia 14
Luty 1998
Kolekcje
Kolekcje są to wartości zawierające pewną liczbę
jednorodnych elementów, od zera do dowolnej dużej liczby.
Liczba elementów może się dowolnie zmieniać w czasie
istnienia bazy danych. SQL3 przewiduje następujące
kolekcje:
- zbiory (sets): zestaw elementów bez powtórzeń, kolejność
nieistotna,
- listy (lists): zestaw elementów z ew.powtórzeniami, kolejność
istotna,
- wielozbiorów (multisets): zestaw elementów z powtórzeniami,
kolejność nieistotna
collection
Kolumny tablic mogą zawierać kolekcje.
CREATE TABLE pracownicy
(id INTEGER PRIMARY KEY,
nazwisko VARCHAR(30),
adres ROW( ulica VARCHAR(40),
nr_domu CHAR(4),
miasto CHAR(20),
kod_poczt INTEGER),
projekty SET(INTEGER),
dzieci LIST(TypOsoby),
zainteresowania SET(VARCHAR(20)));
}
Deklaracje
atrybutów, których
wartości są
kolekcjami
K.Subieta. SQL3: Nowy standard języka SQL, Folia 15
Luty 1998
Operacje wyszukiwania na kolekcjach
SELECT *
FROM pracownicy p
WHERE ‘podróże’ IN (SELECT *
FROM TABLE(p.zainteresowania) z)
AND 5 > (SELECT count(*) FROM TABLE (p.dzieci) d)
W zapytaniach wystąpienia typów
SET, LIST i MULTISET
są traktowane jak tablice.
Końcowy rezultat zapytania jest zawsze
tablicą
(w danym przypadku - fragmentem tablicy
pracownicy).
Podaj informacje o pracownikach, którzy interesują sie
podróżami i mają więcej niż pięcioro dzieci.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 16
Luty 1998
Duże obiekty: BLOB i CLOB
W odróżnieniu od istniejących rozwiązań, wystąpienia dużych
obiektów nie są odrębnymi plikami, ale są zapamietane w
bazie danych na zasadzie identycznej do zapamietywania
prostych wartości.
W stosunku do wartości BLOB i CLOB maja zastosowanie wszystkie
mechanizmy bazy danych, w szczególności mechanizmy bezpieczeństwa,
prywatności, transakcji, cofania i odtwarzania.
CREATE TABLE pracownicy
(id INTEGER PRIMARY KEY,
nazwisko VARCHAR(30),
zarobek polski_zl,
.....
opinia CLOB(75K),
podpis BLOB(1M),
zdjecie BLOB(12M));
Binary Large OBject, Character Large OBject
Tego rodzaju atrybuty mogą być używane w zdaniach
select, ale oczywiście, nie wszystkie operacje maja
zastosowanie. Działają na nich wyspecjalizowane funkcje
oraz operacje, takie jak wyszukiwanie wartości, predykat
LIKE, itd.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 17
Luty 1998
Dziedziczenie
inheritance
ADT może być zdefiniowany jako podtyp jednego lub więcej ADT
poprzez zdanie UNDER.
Podtyp dziedziczy wszystkie atrybuty i operacje (behawior) jego nadtypów;
mogą być zdefiniowane dodatkowe atrybuty i operacje. Przesłanianie
(overriding): w ramach podtypu może być zdefiniowana operacja o tej
samej nazwie co odziedziczona; w takim przypadku ta operacja
“przesłania” odziedziczoną. Podtyp może zmienić nazwy dziedziczonych
własności.
Wystąpienie podtypu jest uważane za wystąpienie wszystkich jego
nadtypów.
Zasada zamienialności (substitutability): wystąpienie podtypu może być
użyte wszędzie tam, gdzie może być użyte wystąpienie nadtypu.
CREATE TYPE posiadłość
(areał
DECIMAL(5,2),
lokalizacja
adres,
opis
VARCHAR(1024),
zdjęcie_frontu
BLOB,
dokument
CLOB);
CREATE TYPE dom UNDER posiadłość
(il_pięter
INTEGER,
il_pokoi
INTEGER,
powierzchnia_domu
DECIMAL(5,2));
K.Subieta. SQL3: Nowy standard języka SQL, Folia 18
Luty 1998
Tablice z ADT, operacje na ADT
CREATE TABLE info_o_posiadłości
(cena
pieniądze,
właściciel CHAR(40),
własność
posiadłość);
INSERT INTO info_o_posiadłości VALUES
(polski_zl(200000), ‘Jan Nowak’,
posiadłość(1500,... );
INSERT INTO info_o_posiadłości VALUES
(polski_zl(150000), ‘Adam Kowal’, dom(400,... );
może być tu zarówno
posiadłość jak i dom
(zasada zamienialności)
Informacja o typie jest trzymana razem z wartością i może być testowana.
SELECT właściciel, cena_w_zl(cena)
FROM info_o_posiadłości
WHERE cena_w_zl(cena) < polski_zl(180000)
AND TYPE(własność) IN (dom)
AND własność..il_pokoi > 7
K.Subieta. SQL3: Nowy standard języka SQL, Folia 19
Luty 1998
Podtablice, nadtablice
Jest to mechanizm niezależny od ADT, podtypów i dziedziczenia.
CREATE TABLE osoba
(nazwisko CHAR(30),
płeć CHAR(1),
wiek INTEGER);
CREATE TABLE pracownik UNDER osoba
(zarobek FLOAT);
CREATE TABLE klient UNDER osoba
(konto INTEGER);
Nadtablica
Podtablica
Podtablica
Podtablica dziedziczy wszystkie kolumny
nadtablicy; może mieć własne kolumny.
Maksymalna tablica wraz ze wszystkimi
podtablicami tworzą rodzinę podtablic.
Każdy wiersz podtablicy musi być związany z
dokładnie jednym wierszem nadtablicy. Każdy
wiersz nadtablicy może być związany z co
najwyżej jednym wierszem podtablicy.
Operatory INSERT, DELETE, UPDATE działają
spójnie i jednocześnie na całej rodzinie
podtablic.
“Maksymalna” tablica
subtable, supertable
Nadtablica
Podtablica
K.Subieta. SQL3: Nowy standard języka SQL, Folia 20
Luty 1998
Procedury w SQL3
Zalety:
• nie jest potrzebny interfejs pomiędzy SQL i językiem-gospodarzem
• wyeliminowana niezgodność impedancji
• zachowana jest informacja o typie umożliwiająca mocną kontrole typu
CREATE FUNCTION podaj_info_o_posiadłości( pos posiadłośc)
RETURNS VARCHAR(1024)
BEGIN ATOMIC
/* blok 1 */
DECLARE tekst VARCHAR(1024);
...
BEGIN ATOMIC
/* blok 2 */
DECLARE lok_zm posiadłość;
/* lokalna zmienna */
SET lok_zm = pos;
SET tekst = opis_tekstowy(lok_zm); /* pewna funkcja */
IF TYPE(lok_zm)IN (dom)
THEN ....
END IF;
END;
/* koniec bloku 2 */
...
RETURN tekst;
END;
/* koniec bloku 1 */
• Podstawienie na lokalna zmienną lok_zm zachowuje informacje o typie.
• Ta informacja jest także przekazywana do wnetrza wołanej procedury
opis_tekstowy.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 21
Luty 1998
Rozszerzenia proceduralne SQL3
Zdania złożone
BEGIN ... END
Deklaracje zmiennych
DECLARE x INTEGER;
Zdanie if
IF x <> 5 THEN ... ELSE ...
Zdanie case
CASE x
WHEN 4 THEN ...
WHEN 5 THEN ...
Zdanie loop
LOOP <ciąg zdań SQL> END LOOP;
Zdanie while
WHILE x <100 DO ... END WHILE;
Zdanie repeat
REPEAT ... UNTIL x <1 END REPEAT;
Zdanie for
FOR rezultat AS ... DO ... END FOR;
Zdanie leave
LEAVE ... ;
Zdanie return
RETURN x;
Wołanie procedury
CALL JakasProcedura(1, 3, 5);
Zdanie podstawienia
SET x = 27;
Sygnalizacja wyjątku
SIGNAL dzielenie_przez_zero;
K.Subieta. SQL3: Nowy standard języka SQL, Folia 22
Luty 1998
Rozszerzenia w zakresie wyzwalaczy
trigger
Wyzwalacze są nazwanymi obiektami bazy danych, które są
spontanicznie aktywowane po wystąpieniu
odpowiadającego im zdarzenia.
Akcja jest wykonywana, jeżeli spełniony jest warunek.
CREATE TRIGGER aktualizacja_bilansu
BEFORE INSERT ON historia_konta
REFERENCING NEW AS zlec_wyplaty
FOR EACH ROW
WHEN (zlec_wyplaty.autoryzacja = ‘OK’)
UPDATE konta
SET bilans = bilans - zlec_wyplaty.ile
WHERE nr_konta = zlec_wyplaty.nr_konta;
zdarzenie
warunek
akcja
Wyzwalacze mają wiele zastosowań, w szczególności do kontroli
poprawności operacji, do egzekwowania reguł biznesu, do
aktualizowania redundantnych danych (replik), itd. Możliwości
wyzwalaczy w SQL3 są rozszerzone w stosunku do SQL-92.
Zdarzeniami mogą być zlecenia INSERT, DELETE, UPDATE dotyczące
tablic i kolumn.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 23
Luty 1998
Krytyczne podsumowanie (1)
W nowym standardzie SQL3 twórcy próbują
wyeliminować wszelkie wady jego poprzedników.
Jednocześnie, próbują wszystko z nich pozostawić.
Występuje tendencja do uniwersalizmu, nie przeoczenia
jakiejkolwiek własności, która mogłaby mieć znaczenie
dla organizacji bazy danych lub interfejsu
programistycznego.
Silnie zaznacza się wpływ modnych pojęć obiektowości,
które nakładają się na wymienione (sprzeczne)
tendencje. Jednocześnie obiektowość jest okrojona i
wtłoczona w obce jej mechanizmy. Jest wątpliwe, czy jest
to droga do realizacji misji obiektowości, jaką jest walka
ze złożonością.
Standard tworzy się bez troski o minimalność języka.
Duża liczba konstrukcji jest redundantnych, od strony
syntaktycznej, semantycznej lub koncepcyjnej.
Zaznaczają się wyraźnie prywatne ambicje i koniki
twórców standardu, przez co przemycane są cechy
drugorzędne, egzotyczne, lub z pogranicza
implementacyjnej kuchni.
K.Subieta. SQL3: Nowy standard języka SQL, Folia 24
Luty 1998
Krytyczne podsumowanie (2)
Podejście do mocnej kontroli typów jest naiwne i nie
wróży nic dobrego.
Podejście do programowania ogólnego (SQL/CLI)
zachowuje wady dynamicznego SQL. Brakuje takich
pojęć jak typy/klasy parametryczne, funkcje wyższego
rzędu, itd.
Ortogonalność języka pozostawia wiele do życzenia;
nadal bedą kłopoty ze
“skomplikowanymi” zapytaniami takimi jak 2+2.
Semantyka wielu konstrukcji jest wyjaśniona na prostych
przykładach, co zwykle nie jest wystarczające. Występuje
brak troski o interakcję konstrukcji i zasadę
korespondencji
(np. jak aktualizować referencje, czy można zrobić
grupowanie wg typu lub referencji, ...)
W rezultacie powstaje konstrukcja dość monstrualna.
Jest mało prawdopodobne, aby producenci systemów
implementowali ją w całości.
Prawdopodobnie, producenci systemów uzgodnią pewną
część tego standardu, która będzie implementowana.
Jest pewne, że wykażą oni więcej rozsądku, niż twórcy
tego kontrowersyjnego standardu.