602SQL-Úplná dokumentace Index  

Příznaky kompatibility jazyka SQL

Některé detaily implementace jazyka SQL a práce SQL serveru lze nastavit pomocí tzv. příznaků kompatibility. Týká se to oblastí, které nejsou v normě jazyka SQL specifikovány nebo které se ve starších verzích 602SQL chovaly odlišně, než předepisují nové normy jazyka SQL. Aby byla zachována nezměněná funkce starších aplikací a přitom aby bylo možno vytvářet nové aplikace v souladu s normami SQL, umožňuje server 602SQL nastavit, do jaké míry se má zachovat kompatibilita funkce se staršími verzemi.

Kupříkladu pokud je při vytváření odpovědi na dotaz požadována typová konverze, kterou nelze provést, starší verze 602SQL vracely hodnotu NULL, zatímco dle normy má celá operace skončit neúspěchem.

Po připojení se nového klienta na server jsou všechny jeho volby nastaveny dle vlastnosti serveru DefaultSQLOption. Pokud hodnota této vlastnosti není změněna, je zapnuta ve všech volbách kompatibilita se staršími verzemi 602SQL. Interaktivní nastavování této vlastnosti umožňuje okno Provozní parametry, záložka Kompatibilita SQL, které je přístupné ze složky Systém na Řídicím panelu.

Nastavení příznaků kompatibility lze libovolně měnit i za běhu aplikace a pro různé klienty mohou ve stejném okamžiku platit různá nastavení. Změnu nastavení provádí klient voláním API funkce Set_sql_option. Aktuální nastavení vrací funkce Get_sql_option. V prostředí SQL serveru lze aktuální nastavení číst a měnit pomocí systémové proměnné @@SQLOPTIONS.

Přehled příznaků kompatibility:
jméno volby hodn. čeho se týká stav je-li nastaveno (602sql syntax) stav není-li nastaveno (SQL syntax)
SQLOPT_NULLEQNULL 1 porovnání dvou hodnot NULL (*), ovlivňuje vyhodnocování některých dotazů výsledek je TRUE výsledek je UNKNOWN
SQLOPT_NULLCOMP 2 operace mezi NULL a jinou hodnotou (*) NULL je menší v relacích a je inertním prvkem v ostatních operacích výsledek relací je UNKNOWN, ostatních operací NULL
SQLOPT_RD_PRIVIL_VIOL 4 použití hodnoty, k níž není právo čtení, při konstrukci kurzoru místo utajené hodnoty se použije NULL dojde k chybě NO_RIGHTS
SQLOPT_MASK_NUM_RANGE 8 přetečení číselného rozsahu při konverzi výsledkem je NULL dojde k chybě SQ_NUM_VAL_OUT_OF_RANGE
SQLOPT_MASK_INV_CHAR 16 řetězec znaků nelze konvertovat na požadovaný typ výsledkem je NULL dojde k chybě SQ_INV_CHAR_VAL_FOR_CAST
SQLOPT_MASK_RIGHT_TRUNC 32 při typové konverzi na typ řetězec dochází ke ztrátě znaků na pravém konci znaky jsou ztraceny dojde k chybě SQ_STRING_DATA_RIGHT_TRU
SQLOPT_EXPLIC_FREE 64 zrušení a uvolnění záznamu zrušené záznamy se uvolňují funkcí Free_deleted zrušené záznamy se uvolňují ihned po zrušení
SQLOPT_OLD_ALTER_TABLE 128 syntaxe ALTER TABLE použije se původní varianta ALTER TABLE (stejné jako návrhář) používá se varianta ALTER TABLE podle normy SQL
SQLOPT_DUPLIC_COLNAMES 256 když se dva sloupce v odpovědi na dotaz jmenují stejně ponechají se stejná jména, lze je rozlišit pomocí prefixu sloupce se automaticky přejmenují
SQLOPT_USER_AS_SCHEMA 512 prefixování jmen tabulek jménem uživatele prefix se vždy považuje za jméno schématu pokud se prefix shoduje se jménem přihlášeného uživatele, ignoruje se
SQLOPT_DISABLE_SCALED 1024 výskyt číselných necelých přesných typů v odpovědi na dotaz (NUMERIC) pokud nelze považovat za zastaralý typ Money, je automaticky konvertován na typ Real typ se zachová
SQLOPT_ERROR_STOPS_TRANS 2048 reakce transakce na chybu transakce se ukončí transakce pokračuje až do commitu nebo rollbacku
SQLOPT_NO_REFINT_TRIGGERS 4096 spouštění triggerů při provádění akcí aktivní referenční integrity triggery se nespouštějí triggery se spouštějí
SQLOPT_USE_SYS_COLS 8192 výběr i systémových sloupců (_W5_ ...) v klauzuli SELECT * vyberou se všechny sloupce včetně systémových systémové sloupce se nevyberou
SQLOPT_CONSTRS_DEFERRED 16384 kdy se má vyhodnocovat porušení těch omezení tabulky (s výjimkou UNIQUE), které nejsou nastaveny explicitně chyba se projeví při commitu (DEFERRED) chyba se projeví okamžitě (IMMEDIATE)
SQLOPT_COL_LIST_EQUAL 32768 kdy se provede UPDATE trigger se seznamem sloupců je-li změněna stejná množina sloupců pokud množina změněných sloupců má neprázdný průnik se seznamem
SQLOPT_QUOTED_IDENT 65536 jak se interpretují uvozovky v SQL uvozovky vymezují řetězec znaků, stejně jako apostrof uvozovky vymezují identifikátor, stejně jako obrácený apostrof; pro ODBC driver platí vždy bez ohledu na nastavení
SQLOPT_GLOBAL_REF_RIGHTS 131072 užití práv při vytváření odpovědi na dotaz vyžaduje se globální právo čtení k těm sloupcům, které jsou použity v podmínkách nevyžaduje se globální právo čtení ke sloupcům, záznamy bez dostatečných práv se nezařadí do odpovědi
SQLOPT_REPEATABLE_RETURN 262144 chování příkazu RETURN v těle funkce příkaz RETURN definuje návratovou hodnotu, ale neukončuje provádění příkazů bezprostředně po provedení příkazu RETURN funkce skončí
SQLOPT_OLD_STRING_QUOTES 524288 označování řetězců uvozovka a apostrof jsou rozdílné znaky pro označení řetězce, nelze psát SET retez = "aaa' (od verze 9.0) uvozovka i apostrof mají stejný význam pro označení řetězce, lze psát SET retez = "aaa' (jako ve verzích 8.x)

(*) pro řetězce s hodnotou NULL (= prázdné řetězce) platí bez ohledu na nastavení údaje ze sloupce Syntax WB (porovnání dvou NULL stringů je TRUE apod.).