Sdílet prostřednictvím


Identifikátory (Entity SQL)

Identifikátory se v Entity SQL používají k reprezentaci aliasů výrazů dotazu, odkazů na proměnné, vlastností objektů, funkcí atd. Entity SQL poskytuje dva druhy identifikátorů: jednoduché identifikátory a uvozové identifikátory.

Jednoduché identifikátory

Jednoduchý identifikátor entity SQL je posloupnost alfanumerických a podtržítka. První znak identifikátoru musí být abecední znak (a-z nebo A-Z).

Identifikátory uvozových hodnot

Uvozovaný identifikátor je libovolná posloupnost znaků uzavřených v hranatých závorkách ([]). Identifikátory v quotedu umožňují zadat identifikátory s znaky, které nejsou platné v identifikátorech. Všechny znaky mezi hranatými závorkami se stanou součástí identifikátoru, včetně všech prázdných znaků.

Identifikátor v uvozováku nesmí obsahovat následující znaky:

  • Newline.

  • Návrat na začátek řádku.

  • Záložky.

  • Backspace.

  • Další hranaté závorky (to znamená hranaté závorky v hranatých závorkách, které označují identifikátor).

Identifikátor uvozených znaků může obsahovat znaky Unicode.

Identifikátory quoted umožňují vytvořit znaky názvu vlastnosti, které nejsou platné v identifikátorech, jak je znázorněno v následujícím příkladu:

SELECT c.ContactName AS [Contact Name] FROM customers AS c

Identifikátory v uvozování můžete použít také k určení identifikátoru, který je vyhrazeným klíčovým slovem Entity SQL. Pokud má například typ Email vlastnost s názvem "From", můžete ji pomocí hranatých závorek pomocí hranatých závorek zrušit takto:

SELECT e.[From] FROM emails AS e

Můžete použít uvozovaný identifikátor na pravé straně operátoru tečky (.).

SELECT t FROM ts as t WHERE t.[property] == 2

Pokud chcete použít hranaté závorky v identifikátoru, přidejte další hranatou závorku. V následujícím příkladu "abc]" je identifikátor:

SELECT t from ts as t WHERE t.[abc]]] == 2

U sémantiky porovnání identifikátorů uvozových čísel naleznete v tématu Vstupní znaková sada.

Pravidla aliasingu

V dotazech Entity SQL doporučujeme zadat aliasy, kdykoli je to potřeba, včetně následujících konstruktorů Entity SQL:

  • Pole konstruktoru řádku

  • Položky v klauzuli FROM výrazu dotazu.

  • Položky v klauzuli SELECT výrazu dotazu.

  • Položky v klauzuli GROUP BY výrazu dotazu.

Platné aliasy

Platné aliasy v Entity SQL jsou jakýkoli jednoduchý identifikátor nebo uvozovaný identifikátor.

Generování aliasů

Pokud ve výrazu dotazu Entity SQL není zadaný žádný alias, entity SQL se pokusí vygenerovat alias na základě následujících jednoduchých pravidel:

  • Pokud je výraz dotazu (pro který není zadaný alias) jednoduchý identifikátor nebo uvozovaný identifikátor, použije se tento identifikátor jako alias. Například z ROW(a, [b]) se stane ROW(a AS a, [b] AS [b]).

  • Pokud je výraz dotazu složitějším výrazem, ale poslední komponenta tohoto výrazu dotazu je jednoduchý identifikátor, použije se tento identifikátor jako alias. Například z ROW(a.a1, b.[b1]) se stane ROW(a.a1 AS a1, b.[b1] AS [b1]).

Pokud chcete později použít název aliasu, doporučujeme nepoužívat implicitní aliasy. Kdykoli dojde ke konfliktu aliasů (implicitní nebo explicitní) nebo se opakují ve stejném oboru, dojde k chybě kompilace. Implicitní alias se předá kompilaci, i když existuje explicitní nebo implicitní alias stejného názvu.

Implicitní aliasy se automaticky generují na základě uživatelského vstupu. Například následující řádek kódu vygeneruje název jako alias pro oba sloupce, a proto bude konflikt.

SELECT product.NAME, person.NAME

Následující řádek kódu, který používá explicitní aliasy, také selže. Selhání se ale zjeví čtením kódu.

SELECT 1 AS X, 2 AS X …

Pravidla oborů

Entity SQL definuje pravidla oborů, která určují, kdy jsou určité proměnné viditelné v dotazovacím jazyce. Některé výrazy nebo příkazy představují nové názvy. Pravidla určení rozsahu určují, kde lze tyto názvy použít, a kdy nebo kde může nová deklarace se stejným názvem skrýt svého předchůdce.

Pokud jsou názvy definované v dotazu Entity SQL, říká se, že jsou definovány v rámci oboru. Obor pokrývá celou oblast dotazu. Všechny výrazy nebo odkazy na názvy v rámci určitého oboru mohou zobrazit názvy definované v daném oboru. Před zahájením a koncem oboru nelze odkazovat na názvy definované v rámci oboru.

Obory je možné vnořit. Části Entity SQL představují nové obory, které pokrývají celé oblasti, a tyto oblasti mohou obsahovat další výrazy Entity SQL, které také představují obory. Pokud jsou obory vnořené, lze odkazy vytvořit na názvy, které jsou definovány v nejvnitřnějším oboru, který obsahuje odkaz. Odkazy lze vytvořit také u názvů definovaných v jakýchkoli vnějších oborech. Za obory na stejné úrovni se považují všechny dva obory definované ve stejném rozsahu. Odkazy nelze vytvořit u názvů definovaných v rámci oborů na stejné úrovni.

Pokud název deklarovaný ve vnitřním oboru odpovídá názvu deklarovanému ve vnějším oboru, odkazy v rámci vnitřního oboru nebo v rámci oborů deklarovaných v tomto oboru odkazují pouze na nově deklarovaný název. Název ve vnějším oboru je skrytý.

I v rámci stejného oboru nelze názvy odkazovat před jejich definováním.

Globální názvy mohou existovat jako součást spouštěcího prostředí. Může to zahrnovat názvy trvalých kolekcí nebo proměnných prostředí. Aby byl název globální, musí být deklarován v nejkrajnější oblasti působnosti.

Parametry nejsou v oboru. Vzhledem k tomu, že odkazy na parametry obsahují speciální syntaxi, názvy parametrů nikdy nebudou v dotazu kolidovat s jinými názvy.

Výrazy dotazu

Výraz dotazu Entity SQL zavádí nový obor. Názvy, které jsou definovány v klauzuli FROM, se zavádějí do oboru v pořadí od vzhledu zleva doprava. Výrazy v seznamu spojení můžou odkazovat na názvy, které byly definovány dříve v seznamu. Veřejné vlastnosti (pole atd.) prvků identifikovaných v klauzuli FROM se nepřidávají do oboru. Na tyto názvy musí vždy odkazovat kvalifikovaný název aliasu. Obvykle se všechny části výrazu SELECT považují za v rámci oboru.

Klauzule GROUP BY také zavádí nový obor na stejné úrovni. Každá skupina může mít název skupiny, který odkazuje na kolekci prvků ve skupině. Každý výraz seskupení také zavede nový název do oboru skupiny. Kromě toho se do oboru přidá také agregace vnoření (nebo pojmenovaná skupina). Samotné výrazy seskupení jsou v rámci oboru. Při použití klauzule GROUP BY se však klauzule select-list (projekce), KLAUZULE HAVING a ORDER BY považují za v rámci oboru skupiny, a ne z oboru. Agregace dostávají zvláštní zacházení, jak je popsáno v následujícím seznamu s odrážkami.

Níže jsou uvedené další poznámky k rozsahům:

  • Seznam select-list může do oboru zavést nové názvy v pořadí. Výrazy projekce vpravo můžou odkazovat na názvy předpokládané na levé straně.

  • Klauzule ORDER BY může odkazovat na názvy (aliasy) zadané v seznamu select.

  • Pořadí vyhodnocení klauzulí v rámci výrazu SELECT určuje pořadí, ve které jsou názvy zavedeny do oboru. Klauzule FROM se vyhodnocuje jako první, následovaná klauzulí WHERE, klauzulí GROUP BY, klauzulí HAVING, klauzulí SELECT a nakonec klauzulí ORDER BY.

Agregační zpracování

Entity SQL podporuje dvě formy agregací: agregace založené na kolekcích a agregace založené na skupinách. Agregace založené na kolekcích jsou upřednostňovaným konstruktem entity SQL a agregace založené na skupinách jsou podporovány kvůli kompatibilitě SQL.

Při překladu agregace se entity SQL nejprve pokusí o jeho zacházení jako s agregací založenou na kolekci. Pokud to selže, Entity SQL transformuje agregační vstup na odkaz na vnořenou agregaci a pokusí se tento nový výraz vyřešit, jak je znázorněno v následujícím příkladu.

AVG(t.c) becomes AVG(group..(t.c))

Viz také